演算法系列#14 Topological sort
這個 pattern 是當題目要求你 sort 有 dependencies 關係時的 element 時的方法,dependencies 的意思比如 A 需要在 B 之後才能出現,因此排序時我們就不能將 A 排在 B 之前
以下為 topological sort 的步驟
- 瀏覽所有的 vertices 並計算每個元素的 in-degrees 數值,初始為 0,用 HashMap 儲存,每個 vertices 的子元素的 HashMap 都要 +1,這樣就完成了初始化
- 接著將這個 HashMap 中 in-degrees 為 0 的元素提出來(也就是沒有排序在其他元素後方的元素),並將他們加入到一個 sources queue
- 將 sources queue 中的元素加到要輸出的 sorted list 裡,並將所有此元素的子元素的 in-degree 數值 -1,如果 in-degree 變 0 了,就將他們加到 source queue 中
- 重複 3 的動作
如何分辨
- 題目需要處理 graph 並且沒有 cycle 的問題
- 題目有特定的 sorted order 條件
題目
- Task scheduling (medium)
- Minimum height of a tree (hard)