演算法筆記基礎

2021-10-22 19:28:40 字數 1721 閱讀 5826

好的程式具有:正確性、可拓展性、安全性、健壯性、可維護性以及演算法等

大o表示法定義:對於給定的函式g(n),用o(g(n))來表示以下函式的集合:o(g(n))=。我們使用的o記號來給出函式的乙個在常量因子內的上界

時間比較:o(1) < o(log n) < o(n) < o(n log n) < o(n2) < o(n3) < o(2n) < o(n!) < o(nn)

複雜時間法則:

型別取值法則

for迴圈

從裡到外,類似於剝洋蔥形式

順序語句

各個執行時間求和

if/else語句

路徑最長時間

概念:在某一有序陣列中查詢某一特定元素的搜尋演算法

步驟:1.如果中間元素正好是要查詢的元素,則搜尋過程結束

2.如果某一特定元素大於或者小於中間元素,則在對應的子陣列中查詢,再次比較中間元素是否相同

3.若出現某一步驟陣列為空,則代表沒有找到

特點:陣列,有序且連續;鍊錶,可連續也可不連續

複雜度比較:

操作鍊錶

陣列查詢

o(n)

o(1)

頭部插入/刪除

o(1)

o(n)

尾部插入/刪除

o(n)

o(1)

中間插入/刪除

o(n)

o(n)

特點:是陣列和鍊錶的結合體

型別特點

單向鍊錶

是陣列和鍊錶的結合體,包含頭指標和尾指標

雙向鍊錶

是陣列和鍊錶的結合體,包含頭節點和尾節點,每乙個節點都指向乙個前驅和後繼

型別特點

棧先進後出(lifo)

佇列先進後出(fifo)

棧方法:

1.s.push(e):壓入棧中

2.s.pop:彈出棧

3.s.top():查詢頂部元素

4.s.is_empty():檢查棧是否包含元素

5.len(s):檢查棧的長度

佇列方法:

1.q.enqueue(e):隊尾插入

2.q.dequeue():隊頭去除

3.q.first():查詢對頭元素

4.q.is_empty():檢查棧是否包含元素

5.len(q):檢查棧的長度

迴圈佇列:避免了佇列空間浪費的弊端

雙端佇列:支援佇列的頭部和尾部進行插入和刪除操作

雙端佇列方法:

1.d.add_first(e):對頭插入

2.d.add_last(e):對尾插入

3.d.delete_first(e):對頭刪除

4.d.delete_last(e):對尾刪除

5.d.first():查詢頭部元素

6.d.last():查詢尾部元素

4.d.is_empty():檢查是否包含元素

5.len(d):檢查的長度

選擇排序

特點:1.執行時間和輸入無關;2.資料移動是最少的

時間複雜度:o(n2);空間複雜度:o(1)

氣泡排序

特點:執行時間和輸入無關;

時間複雜度:o(n2);空間複雜度:o(1)

插入排序

特點:執行時間和輸入有關;

希爾排序

結合分組和不長進行插入排序比較

歸併排序

對兩個不同的資料進行排序進行

快速排序

隨機挑出基準值,進行排列

演算法基礎筆記

演算法即為計算過程,輸入為例項。演算法兩個特徵 1,存在許多候選解 2存在實際應用。資料結構為儲存和組織資料的方式,旨在修改和訪問。np完全問題,是否存在有效演算法未知,可有近似演算法。歸併排序所用時間為cnlgn 插入排序所用時間為cn insertion sort 偽 非降序 for j 2 t...

演算法基礎 筆記

演算法導論 中文第三版第 10 頁 演算法導論 中文第三版第 11 頁 需要注意的是 演算法導論 中文第三版 第三章 漸近記號 asymptotic notation 通常有 o 和 記號法。記號漸進地給出了乙個函式的上界和下界,當只有漸近上界時使用o 記號,當只有漸近下界時使用 記號。儘管技術上 ...

演算法基礎筆記

查詢演算法 排序演算法 演算法評估分析 複雜度 第二部分 經典演算法 七查八排 檢索 查 插入 增 刪除 刪 更新 改 排序第三部分 常用演算法 多維陣列 列表佇列棧堆 紅黑樹二叉樹 有向圖無環圖 演算法 指基於特定的計算模型解決某一類資訊問題而設計的有序指令。輸入 所求解例項問題的特定例項描述 輸...