數據結構與算法 基礎概述 入門必備!

一、數據的邏輯結構
(1)集合結構
結構中的數據元素之間除了同屬於一個集合的關係外,再無任何其它關係。

(2)線性結構
結構中的數據元素之間存在着一對一的線性關係。

(3)樹形結構
結構中的數據元素之間存在着一對多的層次關係。

(4)圖狀結構
結構中的數據元素之間存在着多對多的任意關係。

二、數據的存儲結構
(1)順序映像—>順序存儲
藉助存儲其中相對位置來表示數據元素之間的邏輯關係(與數組相似)

(2)非順序映像—>鏈式存儲
藉助指針表示數據元素之間的邏輯關係(與鏈表相似)

邏輯結構與存儲結構的關係爲:存儲結構是邏輯關係的映像與元素本身的映像,是數據結構的實現,邏輯結構是數據結構的抽象。

三、算法的概念

 數據結構+算法=程序

1.有窮性
對於任意一組合法的輸入值,在執行有窮步驟之後一定能結束,即算法中的每一個步驟都能在有限的時間內完成。

2.確定性
算法的每一步必須是確切定義的,使算法的執行者或閱讀者都能夠明確其含義及如何執行,並且在任何條件下,算法都只有一條執行路徑。

3.可行性
算法應該是可行的,算法中的所有操作都必須足夠基本,都可以通過已經實現的基本操作運算有限次實現。

4.有輸入
一個算法應該有零個或者多個輸入,他們是算法所需的除溼量或被加工的對象的表示。有些輸入量需要在算法執行過程中輸入,而有的算法表面上可以沒有輸入,實際上已被嵌入算法之中。

5.有輸出
一個算法應該有一個或者多個輸出,它是一組與輸入有確定關係的量值,是算法進行信息加工後的結果,這種確定關係即爲算法的功能。

四、算法的評價標準
1.正確性
正確性指算法能滿足具體問題的要求,即對任何合法的輸入,算法都會得出正確的結果。

2.可讀性
可讀性指算法被理解的難易程度。算法主要是爲了人閱讀與交流,其次纔是爲了計算機執行,因此算法應該更易於人的理解。另一方面,晦澀難讀的程序易於隱藏較多錯誤而難以調試。

3.健壯性
健壯性又稱魯棒性,即對非法輸入的抵抗能力。當輸入數據非法時,算法應當恰當地做出反應或者進行相應處理,而不是產生奇怪的輸出結果。並且,處理出錯的方法不應是中斷程序的執行,而應是返回一個表示錯誤或者錯誤性質的值,以便在更高抽象層次上進行處理。

4.高效率與低存儲量需求
效率通常指的是算法的執行時間;存儲量指的是算法在執行過程中所需的最大存儲空間,兩者都與問題的規模有關。儘管計算機的運行速度提高很快,但是這種提高無法滿足問題規模加大帶來的速度要求。所以追求高速算法仍然是必要的。相比起來,人們會更多滴關注算法的效率,但這並不因爲計算機的存儲空間是海量的,而是由人們面臨的問題的本質決定的。二者往往是一對矛盾,常常可以用空間換時間,時間換空間。

五、算法性能分析
算法效率的度量,是評價算法優劣的重要依據。一個算法的複雜性高低體現在運行該算法所需要的計算機資源的多少上面,所需的資源越多,我們就說這個算法的複雜性更高;反之,所需的資源越低,則該算法的複雜性越低。最重要的計算機資源是時間和空間資源。因此,算法的複雜性有時間複雜性和空間複雜性之分。

(1)時間複雜度
一般情況下,算法中基本操作重複執行的次數是問題規模n某個函數f(n),算法的時間度量記作T(n) = O(f(n)),它表示隨問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的時間複雜度。

語句頻度:
語句頻度是指該語句在一個算法中重複執行的次數。

eg:
(1)x =x+1//時間複雜度爲O(1),稱爲常量階。
(2)for(i =1;i<=n;i++) x=x+1//時間複雜度爲O(n),稱爲線性階。
(3)

for(i =1;i<=n;i++) 
         for(j =1;j<=n;j++)
             x=x+1//時間複雜度爲O(n方),稱爲平方階。

隨着問題規模n的不斷增大,上述時間複雜度不斷增大,算法的執行效率不斷下降。

(2)空間複雜度
與時間複雜度相似,空間複雜度是指算法在計算機內執行時所需存儲空間的度量。記作:

S(n)=O(f(n))

算法在執行期間所需要的存儲空間包括三個部分:
(1)算法程序所佔的空間

(2)輸入的初始數據所佔的存儲空間

(3)算法執行過程中所需要的額外空間

若輸入數據所佔空間之取決於問題本身,和算法無關,則只需要分析除輸入和程序之外的輔助變量所佔的額外空間

若所需額外空間相對於輸入數據量來說是常數,則稱此算法爲原地工作。

若所需存儲量依賴於特定的輸入,則通常按最壞的情況考慮。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章