建議關注收藏,持續更新中……
2.演算法**
3.時間複雜度和空間複雜度
1.1 資料結構的概念:
資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。(程式設計=資料結構+演算法)
1.2 資料結構的劃分:
傳統上,資料結構分為邏輯結構和物理結構。
邏輯結構:是指資料物件中資料元素之間的相互關係。
集合結構:集合結構中的資料元素除了同屬於乙個集合外,沒有其他關係。
線性結構:元素有一對一的關係。
樹型結構:一對多的層次關係。
圖形結構:元素是多對多的關係。
物理結構:是指資料的邏輯結構在計算機中的儲存形式。
順序儲存結構:把資料元素存放在位址連續的儲存單元裡,其資料間的邏輯關係和物理關係是一致的。例如陣列。
鏈式儲存結構:把資料元素儲存在任意儲存單元裡,儲存單元可以是連續的,也可以是不連續的。
2.1 演算法的概念:
解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。
特徵:
輸入:演算法具有零個或多個輸入。
輸出:至少有乙個或多個輸出。
有窮性:有窮執行步驟。
確定性:演算法的每乙個步驟都有確定的含義。
可行性:每一步都能夠通過有限次數執行。
2.2 演算法設計的要求:
正確性:指演算法至少具有輸入、輸出和加工處理的無歧義性、能正確反映問題的需求、能夠得到正確答案。(無錯、輸出、說明、結果)
時間效率高和儲存量低
2.3 演算法效率的度量方法:
事後統計方法:通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低。缺陷:不便捷。
事前分析估算方法:編寫程式前,依據統計方法對演算法進行估算。
研究演算法的複雜度,側重研究的是演算法隨著輸入規模擴大增長量的抽象(不關心語言,只關心演算法),分析乙個演算法的執行時間時,重點是把基本操作的數量和輸入模式關聯起來。
判斷演算法效率時只需關心主項的階數。
3.1 時間複雜度:
在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:t(n)=o(f(n))。它表示隨問題規模n的增長,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱時間複雜度。其中f(n)是問題規模n的某個函式。
用o()來體現演算法時間複雜度的記法,稱為大o記法。
如何推導大o階:
(1) 用常數1取代執行時間中所有加法常數。
(2) 在修改後的執行次數函式中,只保留最高端項。
(3) 如果最高端項存在且不是1,則去除與這個項相乘的常數。
(4) 得到的最後結果就是大o階。
線性階:一般含有非巢狀迴圈涉及線性階,線性階就是隨著問題規模n的擴大,對應計算次數呈直線增長。
平方階:巢狀。
對數階:o(logn)
資料結構和演算法
判斷乙個演算法的效率時,函式中的常數和其它次要項常常可以忽略,而更應該關注主項 最高項 的階數。演算法時間複雜度的定義 在進行演算法分析時,語句中的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作 t n ...
資料結構和演算法
程式是什麼?好多書上都寫著 程式 資料結構 演算法。可是怎麼去理解呢?好多程式設計人員對資料結構和演算法說不上熟悉,因為在他們所從事的工作中很少用到這些知識點。但並不表示他們不重要。還有一些人是這樣的想法 大公司才會注重這些知識點,小公司可能就不注重了。寫這篇文章之前我也是持這種想法的。但是,此時此...
資料結構和演算法
一 資料結構 1.概念 資料結構就是資料之間的結構關係,或者理解成資料元素之間存在的一種或者多種特定關係的集合,在傳統上資料結構分為邏輯結構與物理結構 1 邏輯結構 只反映資料元素之間的邏輯關係的資料結構,其中的邏輯關係是指資料元素之間的前後關係,而與他們在計算機中的儲存位置無關,有以下四類 集合結...