演算法學習日誌

2021-10-06 03:55:30 字數 1834 閱讀 9694

計畫

預計兩個月。(±乙個月)

實際情況

快速排序。

演算法思想:分治; 時間複雜度:o(nlogn)

——2020/5/13

歸併排序。

演算法思想:分治; 時間複雜度:o(nlogn)

——2020/5/14

整數二分。

難點,劃重點。

注1:捋一下搞不懂的地方,對於求上下界問題中的check()函式很亂。

注2:演算法思想:折半查詢,根據某一性質來判斷每次是進入左區間 or 右區間。

時間複雜度:o( logn )

注3:對於兩種模板,畫乙個圖一下子邊界就能出來了,要注意的地方是當l = mid時,mid = (l + r ) / 2需變成mid =( l + r + 1) / 2,這是為了避免 l = r -1 時,可能出現死迴圈的情況。

——2020/5/15/10:20

浮點數二分。

演算法思想:折半查詢

注1:因為是浮點數,故不存在整數二分中的邊界問題,mid = (l + r) / 2.0 即可。

高精度加法(大整數 + 大整數)。

演算法思想:陣列儲存,模擬手算加法的過程

——2023年5月16日11:16:10

高精度減法(大整數 - 大整數)

——2023年5月24日22:17:10

高精度乘法(大整數 * 小整數)

——2023年5月24日22:18:11

高精度除法(大整數 整除 小整數)

注:4種高精度演算法中,陣列低位存放個位數字,;例如:a = 「123456」,a = .

——2023年5月29日16:07:32

字首和(s[ l, r ] = s[ r ] - s[l - 1)

步驟:1、遞推求字首和; 2、 求區間和

——2023年5月29日16:48:53

二維字首和

步驟:1、遞推求字首和;2、求區間和

ps:畫個圖,一目了然

——2023年5月29日22:32:10

一維差分

效果:類似字首和的逆運算,使得區間加:[l, r] 上的數都各加上乙個常數,時間複雜度從o(n)降為 o(1);

實現:差分陣列 b[l] += c, b[r + 1] -= c

——2023年6月16日15:32:40

二維差分

差分的思路都是一樣的,跟一維的差別就是計算方式、求字首和不同。

——2023年6月16日16:54:59

雙指標演算法。

難點,劃重點。

模板看起來雖簡單,但是用起來,一臉懵逼~

位運算主要介紹兩種位運算:

(1)求n的二進位制表示的第k位數字;

(2)lowbit(n)操作:求得n二進位制表示的最後一位1的大小;

具體實現:lowbit(n)= n & -n,因 c++中 -n = n取反+ 1

——2023年6月29日15:27:04

離散化。

難點,劃重點。

主要思想是:資料範圍大,但資料個數小,將其對映到乙個小的空間,大大降低複雜度,提高效率。例題挺難的呀,理解了一丟丟,說不定以後能更理解一些,哈

——2023年7月7日18:54:51

區間合併。

相對來說,比較簡單一些,將區間儲存於 pair型別 的陣列中,合併操作:排序、三種情況進行合併、放進臨時陣列中。

靜態鍊錶。

採用陣列模擬,即靜態的鍊錶,為什麼不用動態的呢?原因是c++裡的new操作非常慢,演算法題若使用,80%會超時。

end————————————

該往**走

————————————

Leetcode演算法學習日誌 78 Subsets

given a set ofdistinctintegers,nums,return all possible subsets the power set note the solution set must not contain duplicate subsets.for example,ifn...

演算法學習 Union Find演算法

union find演算法有它的實際用途。多用於動態連通的應用場景。union find演算法是 給出兩個節點,判斷它們是否連通,如果連通,是不需要給出具體的路徑的 舉兩個例子作為主要表現 1 在網路連線中,當發現沒有連線的兩個節點,可以把他們連線起來,一旦節點都連線起來,又能把多餘的線拆除,這時候...

演算法學習 KM演算法

km演算法 用於求二分圖的最佳完美匹配 即權值最大的完美匹配 如果你也是個剛來學習km演算法的人 大概的用途肯定還是知道的吧 還是直接說重點吧 首先 理解km演算法前 必須有以下3個概念 1.可行頂標 對於乙個賦值二分圖g x,y,e,w x,y 代表二分圖的兩邊頂點標號 e代表邊 w代表邊的權值 ...