普林斯頓演算法課第一二三周有感

2022-09-10 14:51:31 字數 1116 閱讀 7606

1.棧有兩種實現方式:鍊錶和可變化大小的陣列

鍊錶優點:每次push和pop得時間是一定的,總的操作時間比陣列大;

陣列優點:在擴張/壓縮陣列的插入/刪除花費時間大,但均攤下來每次插入和刪除都比鍊錶快速,顯得總的操作時間小。

q:何時採用鍊錶方法?

a:飛機場停飛機,網路中源源不斷收到資料報。  因為這樣情況下不允許突然來個長時間的插入。

2.選擇排序與插入排序比較:

選擇排序無論初始陣列有序狀況如何,其所耗費的時間複雜度是固定的,都需要對剩餘未排序部分進行掃瞄;

插入排序很大程度上依賴於初始陣列有序程度,若較為有序,則速度很快,比選擇排序塊,若無序,很有可能接近於冒泡程度。

3.為什麼希爾排序是基於插入排序實現的?

因為剛開始在gap比較大時,每個待排序的陣列規模較小,此時各個排序複雜度差不多;

當gap比較小,如2,1時,則此時經過前面的gap,陣列的有序程度已經改善,此時用插入排序會更加快一些。

ps:當以gap1進行shell排序後,再進行gap2(gap2 < gap1)排序,則排完後的序列仍遵守gap1的排序結果。

4.如何選擇適當的排序演算法?

應當根據要求,比如是否要求穩定?是否要求確定的?各個key值是否獨特的?key值型別是否有很多?需要鍊錶形式還是陣列形式?陣列規模大小?初始陣列有序的程度。

從**中可以看到,選擇排序是無論陣列規模或初始有序狀態如何,其交換次數是固定,適合於陣列規模較小情況。而插入排序適合於初始陣列就比較有序,並且可以看到其平均時間複雜度比選擇排序好一些。

歸併排序各方面表現良好,但是需要額外的陣列空間;  快排不穩定,但實際中更快一些;   三向切分適合於有重複key值的情況。

普林斯頓演算法課 筆記

1 1設計乙個演算法的步驟 steps to developing a usable algorithm.model the problem.find an algorithm to solve it.fast enough?fits in memory?if not,figure out why....

普林斯頓公開課 演算法2 7 棧

棧和佇列都是乙個元素的集合,都能提供增加 刪除 迭代 判斷是否為空4個操作。在棧中,刪除操作刪除的是最後新增的元素。在佇列中,刪除操作刪除的是最早新增的元素。push pop isempty 將乙個鍊錶中第乙個節點刪掉,並將第二個節點設為首節點。將新的節點加入到鍊錶的頭部。在最壞情況下,每個操作的複...

普林斯頓大學演算法公開課筆記 插入排序

演算法 排序,algorithms part1插入排序 插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。極客學院 演算法描述 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在...