演算法知識要點

2021-08-08 01:23:30 字數 1695 閱讀 5130

非遞迴的題目:

二叉樹的前序、中序、後序,全排列,全子集

佇列一定要掌握好,寬度優先搜尋也是很基礎的東西

平衡二叉搜尋樹,只需要知道他的定義和結構是什麼,有什麼樣的特性,可以支援增刪改操作,不需要細究其增刪改方法如何實現。

記憶化搜尋,即動態規劃是一種思想,幹的事情是:否決掉了中間重複計算的狀態,如果遇到計算過的,直接return(中間狀態用雜湊表儲存;順序計算,把前乙個狀態的計算記錄下來)

記憶化搜尋說明用遞迴來做,這樣會影響空間優化的事情。所以要盡量用多重迴圈(自底向上)的方式實現動態規劃。

(自頂向下和自底向上沒有優劣,只是思維方式不一樣。我以後會選擇「自頂向下」來做)

分治與動態規劃的區別:一刀切,分治下去,一般不會有重複的點。但是動態規劃則會有重複的點。

遞迴如果自己不熟悉的話,一定要自己手動寫testcase

for(int i = 1; i < nums.length; i++)}}

@@@

求最小值的時候,要講資料先初始化成最大值----integer.max_value;

比較大小的時候,可以寫簡潔一點-----f[i] = math.min(f[i],f[j]+1);

陣列拿到手,可以先排個序,一般都會對解題有幫助。但如果要求時間複雜度為o(n)的,則不可行,因為排序至少o(nlogn)

merge一般需要用到指標,用到指標的迴圈,一般用while,而不是for。

雜湊表的作用是用來確定元素在不在集合表中

@@@關於鍊錶的基礎知識,當node1 = node2,print(head)的時候,head沒有動,還是輸出123

鍊錶中dumynode的使用:

listnode dumynode = new listnode(0);

dumynode.next = head;

head = dumynode;

return dumynode.next;

鍊錶是否為空的check:

head != null && head.next != null  

head.next != null && head.next.next != null

@@@@@資料結構題

median的問題--- quick select 快排

data stream 的概念是指給你乙個陣列,只能for迴圈一次。因為流的概念就是query一次或者一次request

動態的增加乙個數,求最大值;動態的增加乙個數,求中位數等----這一類屬於資料結構題。

有一種資料結構支援找最大值或最小值----priorityqueue/heap 如何用這兩個資料結構  o(logn) pop/push o(n) getmin/getmax

lru cache 

key value/member ship ------hash

決策樹演算法知識要點

也可以認為是定義在特徵空間與類空間上的條件概率分布。決策樹主要優點 模型具有可讀性,分類速度快。學習時,利用訓練資料,根據損失函式最小化的原則,建立決策樹模型。時,對新的資料,利用決策樹模型進行分類 決策樹學習包括3 個步驟 特徵選擇 決策樹的生成和決策樹的修剪 決策樹結構 有向邊 directed...

向量知識要點

1 向量的加法 向量的加法滿足平行四邊形法則和三角形法則。ab bc ac。a b x x y y a 0 0 a a。向量加法的運算律 交換律 a b b a 結合律 a b c a b c 2 向量的減法 如果a b是互為相反的向量,那麼a b,b a,a b 0.0的反向量為0 ab ac c...

Makefile知識要點

clean rm o phony clean phony顯式地告訴 make clean的是偽目標,那麼每次makeclean必然會執行rm o。否則存在一種可能性,假如當前路徑下有乙個名為clean的檔案,因為clean這個目標又沒有依賴的檔案,那這個clean檔案永遠被認為是最新的,導致rm指令...