這題為一個設計題,給了一個 Data Stream,希望設計一個 class 能夠支援連續的 operation,並找出該 Stream 目前的中位數。注意 Data Stream 中的 Data 是無序的且可以為負數,所以我們要做的第一件事是讓每一次 data 輸入進來,都要讓其有序。這裡介紹的解法十分巧妙,使用 maxHeap 和 minHeap 來解決問題,這樣中位數的計算便只要看 maxHeap 的最大值和 minHeap 的最小值來判斷。

Continue reading

Heap 資料結構

Heap 的定義是「父節點和子節點之間滿足固定大小關係的樹」。當所有父節點都大於其子節點時,就稱其為「Max Heap」; 當所有父節點都小於其子節點時,就稱其為「Min Heap」,附上一個 Heap 圖參考連結。雖然 Heap 本身定義上只關心節點之間的順序規則,所以可以有很多種類例如: d-ary heap、binomial heap、Fibonacci heap 等等,但很多時候教材講的 Heap,其實默認會是 complete binary heap ,也就是除了滿足 heap property 還滿足了:

  • complete: 代表同一階層要由左到右排列,不能跳過
  • binary: 每個 node 最多只能有兩個 child

Heap 常被作為 Priority Queue 的實作方式,且在一些圖論(例如 Dijkstra)或排序(Heap sort)的演算法中扮演極其重要的地位。

Continue reading

Author's picture

李昀陽 YunYang Lee

Welcome to my Tech Note. You can read some of the chapters below.

Software Engineer

Taiwan