在我的算法類中,我被告知圖表表示的鄰接表的縮小是O(n)查找時間,用於遍歷每個節點對應的相鄰節點的數組。我通過使用將節點映射到其相鄰節點的HashSet的HashMap來實現鄰接列表,是不是隻需要O(1)查找時間?有什麼我失蹤?O(1)鄰接列表使用HashSet查找時間?
2
A
回答
4
正如你所知,在HashMap中使用鍵查找值是O(1)。但是,在鄰接列表中,HashMap的值也是其相鄰節點的列表。鄰接表的主要目的是迭代相鄰節點。例如:圖形遍歷算法,如DFS和BFS。在你的情況下HashSet。假設HashSet中的元素數量是n。然後,即使在HashSet中迭代所有元素也是O(n)。
So, total complexity would be O(1)+O(n).
Where O(1)= look up in HashMap
O(n)= iterate all the elements
一般來說,鄰接表對於稀疏圖是比較好的,因爲它是隻有少量邊的圖。這意味着每個節點(HashMap的關鍵字)中相鄰元素的數量較少。所以查找元素不會花費更多。
2
我通過使用節點映射到一個哈希一套自己的相鄰節點的一個HashMap實現我鄰接名單,那不是隻需要O(1)查找時間? [重點煤礦]
右—但「adjacency list」通常意味着表示數組或一個鏈接列表,而不是一個HashSet:換句話說,鄰接表被用於遍歷頂點的鄰居,而優化而不是查詢兩個頂點是否是鄰居。
相關問題
- 1. 圖形鄰接表如何實現節點/頂點的O(1)查找。陣列?
- 2. 查找具有O(n)的時間和O(1)空間
- 3. 在散列表O(1)中查找?
- 4. 找到O(1)的空間和O(n)的時間
- 5. 使用O(1)中的前綴樹查找單個最近的鄰居?
- 6. 隊列<T> O(1)時間
- 7. 查找鏈接列表中的條目優於O(n)時間的索引
- 8. 鄰接矩陣和鄰接表的時間/空間複雜度
- 9. 在O(1)時間中查找BST尺寸C
- 10. 查找中位數訂單統計樹在O(1)時間
- 11. 爲什麼hashmap查找是O(1)即恆定時間?
- 12. 查找一個數組是否是O(n)時間和O(1)空間的序列
- 13. 在O(1)時間查找最大堆的第10個最大元素時間
- 14. 用O(1)查找.NET集合集合?
- 15. 如何僅使用O(1)空間在鏈接列表上實現MergeSort?
- 16. 用於查找重複陣列的HashSet
- 17. 試圖使用鏈接列表和向量使鄰接列表
- 18. 使用鄰接列表和鄰接矩陣的圖的大小?
- 19. 實際上是鏈接列表添加O(N)或O(1)?
- 20. 在一個合併兩個列表,O(1)時間複雜度
- 21. 列表查找,Hashset或Linq哪一個更好在列表中
- 22. 我怎樣才能找到與時間O(n)和空間O(1)
- 23. 查找O(1)表示法中的數字列表的平均值 - 常量時間
- 24. 使用鄰接表來查找完整路徑遍歷
- 25. 鄰接列表C++
- 26. 鄰接列表indegree
- 27. 使用json對象的鄰接列表
- 28. 鄰接列表表示的時間複雜度?
- 29. 鄰接矩陣列表O(m + n)上的BFS如何?
- 30. 查找兩個單詞之間的相鄰單詞列表
我不確定我清楚我的意思是HashSet。我的意思是我使用HashSet數據結構(基本上是一組O(1)查找時間的元素)作爲我的密鑰的值。如果我是正確的,你認爲我的價值是我命名HashSet的通用列表。 – discuit
好吧,我的意思是說,鄰接表的主要目的是存儲鄰接節點,並且每當這些節點需要像DFS這樣的算法時,它們就會使用並遍歷所有節點。所以如果你使用HashSet,迭代的時間複雜度也是O(n)。並且查找HashSet是O(1)。你是對的。看到我更新的答案。我認爲現在很清楚。 –