1 斐波拉契數列,遞迴,複雜度2的n次方e
二分查詢:o(logn)
二叉樹的遍歷:o(n) 每個節點遍歷僅遍歷一次
排序的二維矩陣的查詢:o(n)
快排:o(nlogn)
2 優先佇列
正常入,按優先順序出。實現機制:1) 堆(二叉堆,多項式堆,斐波拉契堆),二叉搜尋樹。
小頂堆:最小的在最上面
3 hashmap:平均時間複雜度: 查詢,刪除,插入複雜度o(1)。最差的時間複雜度:o(n).
二叉搜尋樹:o(logn),元素有序,如果要求元素是有序排列的,可以用這個。
4 二叉搜尋樹
左子樹上所有結點的值均小於它的根結點的值,右子樹上都大於根結點的值,左右子樹分別為二叉查詢樹。
5 二叉樹的遍歷
看根的位置:
前序:根左右;中序:左根右,後序:左右根
6 廣度優先搜尋
在樹/圖/ 狀態集中尋找特定的節點
7 剪枝
有些節點一看就不用去看的。
8 二分查詢
要求: 所查詢的數是要在乙個有序的陣列裡,存在上下界線,可以通過索引來訪問。鍊錶不適合,陣列適合。
9 trie 樹
字典樹:又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串,
所以經常被搜尋引擎系統用於文字詞頻統計。優點是最大限度減少無謂的字串比較,查詢效率比雜湊表高。
每條邊代表乙個字母
10 位運算
x 和0異或,得到x,x和x 異或得到0
實戰常用的位運算
x &1==1 或者0 是判斷奇偶(x%2==1)
x&(x-1) 清零最低位的1 # 求出有多少個二進位制的1或0
x&-x得到最低位的1
11 dp
=遞迴+記憶化:
狀態定義:opt[n] ,dp[n],fib[n]
狀態轉移方程:opt[n]=best_of(opt[n-1,opt[n-2],...)
最優子結構
普通的遞迴:fib[n]=fib[n-1]+fib[n-2),時間複雜度2的n 次方
bp:把每次的fib[n] 記住,後面使用,時間複雜度o(n),從小到大:
dp vs 回溯 vs 貪心
回溯:重複計算
貪心:永遠區域性最優
dp-記錄區域性最優子結構,多種記錄值。
12 並查集
樹型結構,用於處理一些不交集的合併及查詢問題
find:確定元素屬於哪乙個子集,可以被用來確定兩個元素是否屬於同乙個子集
union :將兩個子集合並為同乙個集合
初始化:它的值等於它自己
13 lru cache
最近最少使用,雙向鍊錶,查詢,修改和更新都是o(1)
14 bloom 過濾器
乙個很長的二進位制向量和乙個對映函式:布隆過濾器可以用於檢索乙個元素是否在乙個集合中。優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪
演算法40講
找女朋友問題 如果能夠後悔 o n 如果不能後悔 priority queue 乙個任務的密度 重要程度 完成時間 始終完成最緊迫的工作 kelly formula 凱利公式 game theory 博弈論 五個 的模板 手寫 1 遞迴的終止條件 遞迴 defrecurison level,para...
學習筆記40
今天完成了第十五章部分所有內容的學習。1 修改程式以使用函式 建立乙個目錄來儲存漫畫,並定義downloadxkcd 來迴圈遍歷指定範圍中的所有編號 2 建立並啟動執行緒 建立多個執行緒並且使每個執行緒都呼叫downloadxkcd 3 等待所有程式結束 呼叫thread物件join 方法來阻塞。利...
每日演算法 day 40
那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.3.25 最後乙個資料點卡著時間ac了差了幾十毫秒 本來想吸一口氧氣的結果不吸氧氣...