認真背演算法day03

2021-10-21 17:51:03 字數 642 閱讀 9925

昨天高強度背了bm演算法和kmp演算法,今天整點陽間的休閒一下。

今天主要講兩個東西,乙個是堆排序,乙個是圖的深度遍歷(回溯演算法)和廣度遍歷。

堆排序為什麼堆這麼重要呢?因為堆是可以用陣列表示的,假設堆上某個節點在陣列中下標為i,則其左右孩子節點的下標為i*2和i*2+1。

下面講解堆排序的思路:

我看過網上很多文章,我認為他們都沒有講清楚堆排序,其實堆排序就乙個很重要的操作,叫做堆化(heapify)

堆化其實本質是說這樣一件事:假如有乙個完全二叉樹,它的根節點的左右子樹都是堆,那麼經過堆化,這個完全二叉樹就會變為堆。

所以,堆排序的過程可以分為兩步:

1.建堆,建堆從陣列的size/2開始,代表第乙個有葉子的節點,倒著來,這樣不停的堆化,就可以保證,任何乙個節點的左右子樹均為堆。

2.刪除元素,從堆中刪除頭元素,然後把最後乙個節點拿上來,再堆化。

多麼簡單!偷懶就不上**了。

然後今天要背乙個圖的深度廣度遍歷(圖用鄰接表儲存)。

深度廣度遍歷都要維護三個資料結構:

1.乙個佇列(廣度遍歷需要,深度遍歷不需要)

2.乙個已經訪問的節點的陣列

3.每個節點的前驅節點的下標

有了這三個陣列,相信人人都能寫遍歷了~

好啦,今天就到這裡了~

認真背演算法day04

好久沒更新演算法了,今天再更新一天。今天主要複習一下trie樹和ac自動機 1.trie樹 trie 樹,是一種專門處理字串匹配的資料結構,用來解決在一組字串集合中快速查詢某個字串的問題。trie樹的記錄方法 每乙個節點,都記錄其所有可能出現的字元,以乙個陣列形式組織,陣列中存放節點。具體組織形式如...

認真背演算法day02(續) kmp演算法

字串匹配怎麼能少了大名鼎鼎的kmp演算法呢?概念 好字首 直到遇到壞字元為止,最長的字首子串。好字首的所有字尾子串中,最長的可匹配字首子串的那個字尾子串,叫作最長可匹配字尾子串 對應的字首子串,叫作最長可匹配字首子串 直接上思路 1.kmp演算法和bm演算法完全相反,kmp演算法採用從前到後進行比較...

day 03 內建函式

例子 print abs 1 求絕對值的 false 0,none print bool 如果all裡面的引數全部都是真的話,這個返回值就是真的 c all 1,2,3,4 print c 對於any來說,引數只要有真就為真 d any 1,none print d s 黎明 c bytes s,e...