好的程式具有:正確性、可拓展性、安全性、健壯性、可維護性以及演算法等
大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 記號,當只有漸近下界時使用 記號。儘管技術上 ...
演算法基礎筆記
查詢演算法 排序演算法 演算法評估分析 複雜度 第二部分 經典演算法 七查八排 檢索 查 插入 增 刪除 刪 更新 改 排序第三部分 常用演算法 多維陣列 列表佇列棧堆 紅黑樹二叉樹 有向圖無環圖 演算法 指基於特定的計算模型解決某一類資訊問題而設計的有序指令。輸入 所求解例項問題的特定例項描述 輸...