王道2021-第一章 緒論


1.1 數據結構的基本概念

數據結構的三要素:邏輯結構、存儲結構、數據的運算

 

邏輯結構

線性結構:線性表、棧、隊列;非線性結構:樹、圖、集合

與存儲結構無關,獨立於計算機

 

存儲結構

物理結構,包括順序存儲(隨機存取,碎片多)、鏈式存儲(不會出現碎片,指針占用存儲空間,只能實現順序存取)、索引存儲(建立附加的索引表,索引項的一般形式為【關鍵字,地址】,檢索速度快,索引表額外占用空間,增刪數據要修改索引表花費較多時間)和散列存儲等。

用計算機語言實現的邏輯結構,依賴於計算機語言

 

運算:

包括定義與實現,定義針對邏輯結構,實現針對存儲結構

 

錯題:

選擇題:

3.以下屬於邏輯結構的是:

A.順序表 B.哈希表 C.有序表 D.單鏈表

答案:C。順序表、哈希表、單鏈表都是數據結構,既描述邏輯結構,又描述存儲結構和數據運算。有序表是指關鍵字有序的線性表,僅描述邏輯關系,既可以是鏈式存儲也可以順序存儲。

 

6.在存儲數據時,通常不僅要存儲個數據元素的值,而且要存儲:

A.數據的操作方法 B.數據元素的類型 C.數據元素之間的關系 D.數據的存取方法

答案:C

數據庫就是數據和關系

 

7.鏈式存儲設計時,節點內的存儲單元地址:

A.一定連續 B.一定不連續 C.不一定連續 D.部分連續,部分不連續

答案:A。鏈式存儲設計時,各個不同節點的存儲空間可以不連續,但節點內的存儲單元地址必須連續。

 

應用題:

1.對於兩種不同的數據結構,邏輯結構或物理結構一定不相同嗎?

應該注意到,數據的運算也是數據結構的一個重要方面。

對於兩種不同的數據結構,它們的邏輯結構和物理結構完全有可能相同。比如二叉樹和二叉排序樹,二叉排序樹可以采用二叉樹的邏輯表示和存儲方式,前者通常用於表示層次關系,而后者通常用於排序和查找。雖然它們的運算都有建立樹、插入節點、刪除節點和查找節點等功能,但對於二叉樹和二叉排序樹,這些運算的定義是不同的,以查找節點為例,二叉樹的時間復雜度為O(n),而二叉排序樹的時間復雜度為O(log2n)。

 

1.2 算法和算法評價

算法是對特定問題求解步驟的一種描述。它是指令的有限序列,其中的每條指令表示一個或多個操作。 

算法的五個特性:有窮性、確定性、可行性、輸入、輸出

好的算法目標:正確性、可讀性、健壯性、效率與低存儲量要求。

算法效率的度量:時間復雜度、空間復雜度。

時間復雜度T(n) = O(f(n))

f(n)為算法中基本運算(最深層循環內的語句)的頻度

一般總是考慮在最壞情況下的時間復雜度,以保證算法的運行時間不會比它更長。

O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

空間復雜度S(n) = O(g(n))

算法原地工作是指算法所需的輔助空間為常量,即O(1)。

 

錯題:

選擇題:

 1.一個算法應該是:

A.程序 B.問題求解步驟的描述 C.要滿足五個基本特性 D.A和C

答案:B。程序不一定滿足有窮性,如死循環、操作系統等,而算法必須有窮。算法代表對問題求解步驟的描述,而程序則是算法在計算機上的特定實現。C只是算法的必要條件,不能成為算法的定義。

 

2.下面說法中,錯誤的是:

A.算法原地工作的含義是指不需要任何額外的輔助空間

B.在相同規模n下,復雜度為O(n)的算法在時間上總是優於復雜度為O(2^n)的算法

C.所謂時間復雜度,是指最壞情況下估算算法執行時間的一個上界

D.同一個算法,實現語言的級別越高,執行效率越低

答案:A。

B,不要想當然去給n賦予一個特殊值。

 

歸納總結:

時間復雜度的分析方法:

1、循環主體中的變量參與循環條件的判斷

此類題應該找出主體語句中與T(n)成正比的循環變量,將之帶入條件中進行計算。

2、循環主題中的變量與循環條件無關

此類題可采用數學歸納法或直接累計次數。多層循環時從內分析到外,忽略單步語句、條件判斷語句,只關注主體語句的執行次數。

遞歸程序一般使用公式進行遞推,非遞歸程序可以直接累計次數。

 

思維拓展:

求解斐波那契數列

F(n)={1,n = 0,1;F(n-1) + F(n-2), n>1}

有兩種常用的算法:遞歸算法和非遞歸算法。試分別分析兩種算法的時間復雜度。

答案:

節點數為計算次數。F(n)的斐波那契遞歸計算法有n層,共2^(n-1)-1個節點,因此F(n)的時間復雜度為O(2^n)。

斐波那契數列——遞歸法時間復雜度計算_qiuxiaonao的博客-CSDN博客_斐波那契數列遞歸時間復雜度

斐波那契數列遞歸算法和非遞歸算法以及其時間復雜度分析_一米陽光-的博客-CSDN博客_斐波那契數列遞歸和非遞歸時間復雜度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM