按照Tsort 檔案的簡單示例:
require 'tsort'
class Hash
include TSort
alias tsort_each_node each_key
def tsort_each_child(node, &block)
fetch(node).each(&block)
end
end
當我用這個資料集運行它時,結果陣列對我來說似乎是錯誤的:
{ 1 => [], 2 => [1], 3 => [2], 4 => [1], 5 => [2] }.tsort
#=> [1, 2, 3, 4, 5]
我被期望使用這些陣列之一:
[1, 4, 2, 3, 5]
[1, 4, 2, 5, 3]
[1, 2, 4, 3, 5]
[1, 2, 4, 5, 3]
我是誤會Tsort了,還是我還缺少其他東西來訪問這些陣列?
uj5u.com熱心網友回復:
正如 Amadan 在評論中提到的那樣,您檢索的結果沒有任何問題。拓撲排序要求任何邊的u -> v頂點u都應該在v結果之前 - 并且[1,2,3,4,5]很好地滿足了這個要求。
特定順序由您遍歷圖形的方式決定。例如,如果您稍微更改代碼,以便我們以相反的順序遍歷鍵
require 'tsort'
class Hash
include TSort
def tsort_each_child(node, &block)
fetch(node).each(&block)
end
def tsort_each_node(&block)
each_key.reverse_each(&block)
end
end
結果也會有所不同:
{ 1 => [], 2 => [1], 3 => [2], 4 => [1], 5 => [2] }.tsort
# => [1, 2, 5, 4, 3]
這個新結果也不符合您的任何期望,但它再次完全滿足拓撲排序定義 - 所有節點都嚴格按照它們的依賴關系出現。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417127.html
標籤:
上一篇:過濾和重組物件陣列
下一篇:在保留組的位置的同時進行排序
