演算法學習 4

2021-07-26 07:50:33 字數 1169 閱讀 3020

排序是演算法學習中最基礎的內容,也有很多中排序演算法,這裡簡單介紹學一下堆排序。

理解堆排序之前,一定要先明白什麼是堆,其實它就是乙個陣列或者是陣列的一部分,一定要記住明白這一點,不然容易有一種樹結構的錯覺。它就是在陣列的元素間定義一些關係,讓這些元素看起來近似乙個二叉樹。這些元素組成的陣列就叫做堆。

堆排序的具體流程:

1,使a.heap-size = a.length,把陣列a 轉換為最大堆build-max-heap(a)

2,把a[1]跟a[a.heap-size]交換

3,使a.heap-size減一,對陣列a[1..a.heap-szie]中堆的根節點a[1]進行維護最大堆操作max-heapify,因為a[a.heap-size]是最後乙個節點,是乙個葉節點,所以去掉後,陣列a[1..a.heap-szie]仍然乙個堆。

4,重複上述2,3步驟重複直到a.heap-size等於1,這時陣列a也就排好序了

偽**:

heap-sort(a)

heap-size = a.length

build-max-heap(a)

while heap-size > 1

exchange a[1] with a[heap-size]

heap-size -= 1

max_heapify(a[1..a.heap-szie],1)

max_heapify(a,i)

a.heap-size = a.length

l = left(i)

r = right(i)

if l ≤ a.heap-szie and

a[l] > a[i]

l = largest

elif r ≤ a.heap-szie and

a[r] > a[i]

r = largest

else

i = largest

if largest != i

exchange a[i] with a[largest]

max_heapify(a,largest)

build-max-heap(a)

a.heap-szie = a.length

for i=a.heap-szie/2 downto i

max_heapify(a,i)

排序演算法學習(4)

1.對下列關鍵字序列用快排進行排序時,速度最快的情形是 a a b cd 分析 pivotkey 的選擇越靠近 即左右兩個子串行長度越接近,排序速度越快。21正好是序列的正中,所以排除b,d。a經過一次排序後結果為9,17,5,21 25,23,30 c經過一次排序後結果為5,9,17,21 25,...

強化演算法學習記錄 4

q learning一步步更新q表,收斂速度慢,就是在當前狀態下探測後序狀態對當前狀態的影響,若可以得到n步狀態的評估,可以加速當前狀態的收斂。修改q s,a 表的更新公式,從公式中可以看出來由原來的學習一步變成要學習n步,這n步才使用貪婪策略來 未來n步每一步狀態的行為進行學習,這樣可以探索更遠距...

演算法學習 Union Find演算法

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