第一本演算法書 結構

2021-10-06 01:39:09 字數 1304 閱讀 6111

雜湊表

雜湊表儲存是由key value組成的資料 使用雜湊表解決線性查詢費時的問題

準備陣列來儲存資料 使用hash計算雜湊值 放入對應的陣列位置中 放入過程中會遇到相同的值導致衝突

可以使用鍊錶在已有資料的後面繼續儲存新資料(鏈位址法) 也可以計算出候選位址解決衝突(開放位址法)以及線性探測法

放入完成之後 可以對資料進行查詢 首先計算出雜湊值 查到對應的位置 如果使用了鍊錶 需要結合鍊錶的線性查詢 最後得到結果

堆堆是一種圖的樹形結構 被用於實現優先佇列 可以自由新增資料 但取出資料時候要從最小值開始按順序取出

堆的樹形結構中 各個頂點被稱為結點 資料儲存在結點中

堆中每個結點最多有兩個子結點 樹的形狀取決於資料的個數 另外結點的排序為從上到下從左到右

資料儲存需要遵守 子結點必定大於父節點 因此最小值被儲存在頂端的根節點

在往堆中新增資料時候 一般會把新資料放在最下面一行靠左的位置 當最下面一行沒有多餘空間時候 就再往下另起一行

把資料加在這一行的最左端

取出資料時候 取出最上面的資料 由於被取出資料 堆的結構也需要重新調整

堆中最頂端的資料始終最小,所以無論資料量有多少 取出的最小值的時間複雜度都為o(1)

因為取出資料後 需要將最後的資料移到頂端 一邊比較與子節點資料大小一邊往下移動 所以取出資料需要的執行時間和樹的高度成正比

假設資料量為n 根據堆的形狀特點可知樹的高度為logn 那麼重構樹的時間複雜度為o(logn)

新增資料也一樣 o(logn)

二叉查詢樹

採用了圖的樹形結構 資料儲存於二叉查詢樹的各個結點中

每個結點最多有兩個子結點

二叉查詢樹有兩個性質 第乙個每個結點的值均大於左子樹上任意乙個結點的值 第二個是每個結點的值均小於右子樹上任意乙個結點的值

得出結論 二叉樹查詢樹 的最小結點要從頂端開始 往左下的末端尋找

反過來最大結點 要從頂端開始往其右下的末端尋找

新增資料 從二叉樹的頂端結點開始尋找新增數值的位置 將想要新增的數字與結點的數值進行比較 小於往左邊移動 大於它則往右邊移動

刪除資料 如果要刪除的結點沒有子結點 直接刪掉 如果需要刪除的結點只有乙個子結點 那麼先刪去目標點

然後把子結點移到被刪除結點的位置上

如果要刪除的結點有兩個子結點 那麼先刪除目標結點 然後在被刪除結點的左子樹中尋找最大結點 最後將最大結點移到被刪除結點的位置上

這樣一來 就滿足二叉樹性質的前提下刪除結點 如果需要移動的結點還有子結點 就遞迴執行前面的操作

查詢結點 二叉樹頂端結點開始網下查詢 和新增資料一樣 把目標和結點中的值相互比較 小於則左移 大於則右移 直至找到

《我的第一本演算法書》

我的第一本演算法書 日 石田保輝 宮崎修一 著 張貝 譯 冒泡 選擇 插入 氣泡排序演算法 o n 2 重複 從序列右邊開始比較相鄰兩個數字的大小,在根據結果交換兩個數字的位置 這一操作的演算法 private void bubblesort int arr 選擇排序 o n 2 重複 從待排序的資...

Note 讀《我的第一本演算法書》有感

最近看了第一本演算法相關書籍,名字就叫做 我的第一本演算法書 作者是日本的宮崎修一和石田保輝。本書用大量輔以詳細分步講解,以直觀 通俗易懂的方式展現了資料結構和一些基礎演算法,便於學習和記憶。通過本書的學習,對上個學期的沒有學精的資料結構有了更為深入的理解,特別是堆,之前一直對大頂堆小頂堆迷迷糊糊,...

《我的第一本演算法書》隨手記(2)

看了幾本圖靈系列的漫畫書,隨手記些要點,方便回憶!佇列的資料呈線性排列,佇列中新增和刪除資料分別在兩端進行。入隊 出隊 像佇列這種先進去的資料最先被取出來,即 先進先出 的結構,簡稱fifo。先來的資料先處理是一種常用的思路,因此,列表的應用很廣泛。如廣度優先搜尋演算法。雜湊表中儲存的是由鍵 key...