資料結構和演算法之學前吹牛

2021-10-17 09:03:03 字數 1918 閱讀 4599

建議關注收藏,持續更新中……

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 邏輯結構 只反映資料元素之間的邏輯關係的資料結構,其中的邏輯關係是指資料元素之間的前後關係,而與他們在計算機中的儲存位置無關,有以下四類 集合結...