我剛剛研究了不相交集數據結構,並且我知道它也被稱爲「union-find數據結構」,union和find是這個數據結構的兩個主要操作。我們可以在不相交集合上執行聯合,類似的,我們可以執行查找操作;我想知道除了union和find以外,我們可以在不相交的集合上執行哪些其他操作。可以對不相交集合執行哪些操作?
5
A
回答
3
獨立集合結構也被稱爲「合併 - 查找結構」。因此無論如何union
,find
和MakeSet
操作應該得到支持。其他行動不是這個結構的全部,它們是否得到支持取決於實施和目標。有時候您需要專門選擇特定的實施方式,以滿足您項目對額外操作的需求。
除此之外,如果我們支持的其他基本的設置相關的操作這將是很好。讓我們列舉一下:
- 十字路口兩套。由於集合是不相交的,除非這兩個集合重合,否則它總是空的。
- 工會的兩套 - 支持開箱即用。
- 從集合獲取元素 - 的支持,這是最有可能的
find
結果。 - 從集合刪除元素 - 取決於執行。當集合被實現爲森林時,它很棘手並且需要較慢的附加操作。當集合被實現爲鏈表時,它很簡單。
- 枚舉設定,即迭代在該給定組中的每個元件。這個依賴於實現:鏈接列表很簡單,對於像森林一樣的實現,它需要額外的結構來支持。
2
使用vanilla union-find數據結構,您無法枚舉實際集合,因此許多集合操作都不可用。這是因爲在香草版本中,只有指向一個方向的指針---在下圖中,每條對角線對應於向上的箭頭,並且根(頂部線)是集合的根對象:
o [set1] o [Set2]
/\ \
o o o
/
o
所以沒有辦法找到所有的對象,比如set 1;例如,您不能從根節點追蹤到它們的路徑。您也可以向下指針,但這會顯着地使數據結構複雜化,因爲對象在數據結構中可以有任意數量的父項。
所以它實際上多爲以下操作:
- 答到:做我的對象A和B屬於同一組或沒有?
- 合併設置S1和S2,以便在集合中的所有對象現在都被認爲屬於同一組
爲了詳細說明這一點,工會組數據結構有它支持的操作非常低的時間複雜度;合併集合和回答相同集合查詢採取分攤的恆定時間(O(1));由於這種非常複雜的時間,你不能支持所有的設置操作。例如,一個標準集表示是由一個[二進制]搜索樹,其中大多數操作至少具有O(log n)複雜性。
0
聯合發現不相交集合結構的關鍵不在於執行基本集合操作,因爲您的問題和其他受訪者似乎暗示。相反,它是關於某些算法需要的結構的高效實現。特別是,找到連接組件和最小生成樹將在聯合查找不相交集之上構建其最有效的實現。
相關問題
- 1. 對項目集合執行操作
- 2. 你可以使用C++中的bool和int操作符執行哪些操作?
- 3. Scala並行集合上的哪些操作是並行化的?
- 4. 在動作中執行操作以進行收集而不創建新集合
- 5. 集合被修改,枚舉操作可能不會執行
- 6. 用於在兩個不相交的集合上執行並集操作的數據結構
- 7. 在Sun VM中可以在Dalvik VM(Android的VM)上執行哪些操作?
- 8. 使用LINQ執行這些操作的方法有哪些?
- 9. 集合操作中對象的行爲
- 10. 哪個python庫可以執行復雜的`wget`操作?
- 11. Jmeter中可能對線程故障執行某些操作嗎?
- 12. 您可以使用NH3執行復雜的聚合操作嗎?
- 13. C#集合已被修改;枚舉操作可能不會執行
- 14. 實體框架集合已被修改;枚舉操作可能不會執行
- 15. MVC Action Filters集合已被修改;枚舉操作可能不會執行
- 16. WPF CollectionView錯誤:'集合被修改;枚舉操作可能不會執行。'
- 17. C#集合已被修改;枚舉操作可能不會執行
- 18. Ninject投擲「集合被修改;枚舉操作可能不會執行」錯誤
- 19. 從集合中刪除一個項(MembershipUserCollection) - 枚舉操作可能不會執行
- 20. DbContext.Add錯誤,集合被修改;枚舉操作可能不會執行
- 21. 以通用方式對Scala集合進行操作
- 22. 提交按鈕以執行兩個不同的操作
- 23. 哪些操作可以並行完成而不需要抓取GIL?
- 24. 作爲集合執行
- 25. 需要查找基本操作集合/相交/對稱差異JAVA
- 26. 對相同的選項菜單項執行不同的操作
- 27. 這些不同的Android操作系統可以安裝在哪些設備上?
- 28. 在隱藏的工作表或工作簿上可以執行哪些Excel VBA操作?
- 29. nhibernate SaveOrUpdate - 輕鬆確定將執行哪些操作
- 30. 哪些數據庫操作必須在後臺執行?