在上一篇博文中我們提到:要令排序算法的時間復雜度低於O(n2),必須令算法執行“遠距離的元素交換”,使得平均每次交換減少不止1逆序數。 而希爾排序就是“簡單地”將這個道理應用到了插入排序中,將插入排序小小的升級了一下。那么,希爾排序是怎么將這個道理應用於插入排序的呢?我們先來回顧一下 ...
到目前為止,我們所提過的所有數據結構,不是線性表,就是樹。即使是散列表 優先隊列 AVL樹這樣看似特殊的數據結構,其實也沒逃出線性表與樹的范疇,那么,在數據結構方面 如果是說算法方面,那么與線性表 樹相關的算法可講不完 ,還有什么我們尚未探討的情況嗎 答案是肯定的,那就是:圖。不過在進一步介紹圖之前,我想先回顧一下樹與線性表的關系。不難發現,其實線性表就是一棵特殊的樹: 無叉樹 。而樹也可以看作 ...
2018-02-08 14:52 0 1521 推薦指數:
在上一篇博文中我們提到:要令排序算法的時間復雜度低於O(n2),必須令算法執行“遠距離的元素交換”,使得平均每次交換減少不止1逆序數。 而希爾排序就是“簡單地”將這個道理應用到了插入排序中,將插入排序小小的升級了一下。那么,希爾排序是怎么將這個道理應用於插入排序的呢?我們先來回顧一下 ...
正如上一篇博文所說,今天我們來討論一下所謂的“高級排序”——快速排序。首先聲明,快速排序是一個典型而又“簡單”的分治的遞歸算法。 遞歸的威力我們在介紹插入排序時相比已經見識過了:只要我前面的隊伍是有序的,我就可以通過向前插隊來完成“我的排序”,至於前面的隊伍怎么有序……遞歸實現 ...
在前兩次博文中,我們由線性表講到數組,然后又由數組的缺陷提出了指針式鏈表。但是指針式鏈表也不是完美無缺的,在某些沒有指針數據類型的編程語言中,指針式鏈表是無法由我們來實現的,但是有時候我們又希望能用上鏈表,因為鏈表可以快速的進行插入和刪除。這個時候我們就可以使用一種由數組來實現的“鏈表 ...
到目前為止,我們一直在談論的數據結構都是“線性結構”,不論是普通鏈表、棧還是隊列,其中的每個元素(除了第一個和最后一個)都只有一個前驅(排在前面的元素)和一個后繼(排在后面的元素),但是在(9)中,我們發現有的時候“線性結構”是不能滿足我們的需求的,必然存在某些場景需要我們使用非線性的數據結構 ...
在深入淺出數據結構系列前面的文章中,我們一直在討論“線性表”,其形式如下: 由a1,a2,a3,……a(n-1)個元素組成的序列,其中每一個元素ai(0<i<n)都是一個“原子”,“原子”的意思就是說元素本身是一個個體,所有元素都是相同的結構。 但是在我們常見 ...
一:定義 (一)AOV網(Activity On Vertex) 注意(重點): (二)拓撲序列 (三)拓撲排序 二:應用 我們對一個有向圖進行構造時,會出現兩個結果。 補充 ...
上一篇博文我們提到了圖的最短路徑問題:兩個頂點間的最短路徑該如何尋找?其實這個問題不應該叫“最短”路徑問題,而應該叫“最便宜”路徑問題,因為有時候我們會為圖中的邊賦權(weight),也叫權重,相當於經過一條邊的“代價”,一般為正數。比如下圖(邊旁的數字即該邊的權重 ...
在普通隊列中,元素出隊的順序是由元素入隊時間決定的,也就是誰先入隊,誰先出隊。但是有時候我們希望有這樣的一個隊列:誰先入隊不重要,重要的是誰的“優先級高”,優先級越高越先出隊。這樣的數據結構我們稱之為優先隊列(priority queue),其常用於一些特殊應用,比如操作系統控制進程的調度程序 ...