簡體   English   中英

HashSet 與 Linked Hashset 的迭代

[英]Iteration through HashSet vs a Linked Hashset

我正在考慮在 memory 中表示圖形的方法?

我正在考慮使用 hash 映射的 hash 映射,以便它的行為類似於鄰接矩陣,但我們可以使用可比較邊緣標簽而不僅僅是整數。

在廣度優先搜索和 Dijkstra 的算法中,我們必須遍歷鄰接列表並將節點添加到隊列中。 這導致了我的問題:

通過鏈接的 hash 集合進行迭代是否比通過 Java 中的常規 HashSet 進行迭代更有效?

似乎是因為每個節點之間的鏈接按添加順序排列,所以如果它們存在,我們不必遍歷空箱(取決於 HashMap 的重新散列率,這可能更多或較少的)。 這將允許我們將鄰接矩陣的隨機訪問行為與鄰接列表的搜索算法效率結合起來。

你是對的。

Java HashMap/Set 在稀疏圖中的性能很差,因為它必須從空 bin 進行迭代。 當大多數節點只連接一個其他節點時。 HashMap/Set 可能需要 8 次迭代才能得到准確的結果。 相關分析見Codeforces:Performance of hash set iterators in different programming languages

為了表示圖形,Java 泛型機制可以讓您為原始類型創建 Object 類型,例如 Integer。 當轉換為原始類型並構建圖形時,它們會降低性能。 在最佳實踐中,您需要使用Trove或其他庫。 也許,自己實施。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM