資料結構與演算法

以根為 a[0] 的陣列表示父節點值大於或等於子節點值的最大堆積。對堆積 50, 30, 40, 10, 20, 35 加入45:先放在末尾,只要比父節點大就與父節點交換。操作後的陣列為下列何者?

  1. A50, 30, 40, 10, 20, 35, 45
  2. B45, 30, 50, 10, 20, 35, 40
  3. C50, 30, 45, 10, 20, 35, 40
查看答案與解析

正確答案:C. 50, 30, 45, 10, 20, 35, 40

45放在 a[6],其父節點為 a[(6−1) ÷ 2] = a[2] = 40。由於 45 > 40,兩者交換,45移到 a[2]。下一個父節點 a[0] = 50 大於45,因此在此停止,得到 50, 30, 45, 10, 20, 35, 40。交換次數最多只有樹的高度,因此加入為 O(log n),取出最大值也同樣是 O(log n)。由於這個性質,二元堆積常用於實作優先佇列。

  • A. 只是放在末尾,雖然比父節點40大卻沒有交換。
  • B. 把比根部50小的45一路移到了根部。
  • C. 正確。與40交換後,父節點50較大,因此停止。
練習這個領域 前往領域頁面

相關計算工具

資料結構與演算法的其他題目

  1. 以中序走訪(依左子樹、該節點、右子樹的順序拜訪)走訪二元搜尋樹時,拜訪到的節點值會如何排列?假設所有值都不相同。
  2. 對空的二元搜尋樹依序插入 50, 30, 70, 20, 40, 60, 80。以後序走訪(依左子樹、右子樹、該節點的順序拜訪)走訪此樹時,順序為下列何者?
  3. 對空的二元搜尋樹依序插入 1, 2, 3, …, 1000(不做平衡的操作)。在這棵樹中尋找1000時,從根部開始比較,到找到為止要比較幾個節點?
  4. 資料庫與檔案系統的索引常使用 B 樹(包含 B+ 樹)而非二元搜尋樹,其主要原因為下列何者?
  5. 像頂點約100萬個、邊約300萬條的道路網這樣,邊數相對於頂點數很少的(稀疏)圖,適合以下列何種方式存放在記憶體中?