擁有一組N
集合,生成這些集合的包含圖的最快方法是什麼?算法:什麼是檢查集合包含的最快方法?
2
A
回答
1
如果你有一組N組,其中沒有一組包含另一組,所有相同的大小,你將需要做N^2組比較。
1
那麼,讓我們就最壞的情況進行推理,爲了簡單起見,假設您有一個有效的集合表示,您可以在其中檢查恆定時間的成員資格。
要確定一個集合X是否是Y的子集,您必須執行| X | Y的成員資格測試次數與時間成線性比例| X |。所以如果你有N個集合,並且想弄清哪些集合是其他集合的子集,那麼你就必須做這樣的子集測試,因此我想你最終的複雜度是O (AN )其中A是最大集合中元素的數量。
即使你可以做一些聰明的事情來同時決定「X子集Y」和「Y子集X」,你不會獲得超過一個因子2,所以複雜性不會提高。
1
首先,您可以顯示該圖將包含給定n個集合的O(n^2)個邊:考慮集合A1,...,An,其中每個集合= {1,...,k}。然後,在包含圖中,A1子集A2,A1子集A3,...,A1子集An,A2子集A3,...是n(n-1)/ 2個邊。
鑑於此,我可以想出一個合理簡單的方法來解決這個問題。讓Ai可能是子集Aj,如果Aj中有一些x不在Ai中。現在,Ai子集Aj如果Ai可能是子集Aj而不是Aj可能是子集Ai。
現在,對於每個元素x將您的集合分爲兩個:那些包含x和那些沒有。後者可能是前者的子集。將相應的邊添加到maybe-subset圖中。每當我們在每個方向上都有一對頂點連接時,我們知道兩個頂點都不是另一個的子集。對於m個元素和n個集合,這個算法是O(mn^2)。
Et瞧!
相關問題
- 1. 什麼是計算ε閉包的最快方法?
- 2. 獲取集合元素的最快方法是什麼?
- 3. 什麼是MySQL的最快的方法來檢查外國REFFERENCE
- 4. Tcl:什麼是檢查空白字符串的最快方法
- 5. 什麼是檢查mongodb文檔存在的最快方法?
- 6. 檢查SQL Server可用性的最快方法是什麼?
- 7. 檢查號碼重複數字的最快方法是什麼?
- 8. 什麼方法會讓python算最快?
- 9. 最快的方法來檢查該集合是否包含Python中給定範圍內的數字
- 10. 什麼是兩個排序列表交集的最快算法?
- 11. ReadProcessMemory最快的方法是什麼?
- 12. 什麼是寫XML的最快方法
- 13. 用整數集合檢查存在的最高性能方法是什麼?
- 14. 檢查PHP中的值是否只包含數字的最快方法?
- 15. 什麼是最快的馬賽克圖像混合算法?
- 16. 檢查數據庫集中是否存在最快的方法
- 17. 什麼是最快的通用集合?
- 18. 檢查實例化視圖是否包含任何行的最快方法
- 19. Java - 檢查一個字符串是否包含double值的最快方法
- 20. 檢查圖像是否包含任何(半)透明像素的最快方法?
- 21. 什麼是計算32的冪對數的最快方法?
- 22. 計算ALAssetLibrary的最快方法是什麼?
- 23. 什麼是計算sigmoid的最快方法?
- 24. 什麼是計算Windows文件夾大小的最快方法?
- 25. 檢查兩個Tbitmap是否相同的最快方法是什麼?
- 26. 檢查一個類是否定義了函數的最快方法是什麼?
- 27. 檢查兩個給定數字是否互反的最快方法是什麼?
- 28. 什麼是檢查svn工作副本是否有變化的最快方法?
- 29. 什麼是在斯卡拉總結一個集合的最快方法
- 30. 計算集合中元素百分位數的最快方法
我相信如此。如果這些集合的大小相同,我們可以散列,但如果它們的大小几乎相同,那我平均無法看到O(元素數量)比較。只要我們知道包含不可能發生(我們可以儘快退出)(較小集合不匹配或者較大集合中有太多不匹配),但這無濟於事。 – deinst 2010-08-12 12:36:42
包含比較將花費多少錢?一個元素的比較操作?這是否讓我們用O(N^2 * A)算法? – banx 2010-08-12 12:37:07
我可能是錯的。我經常是。 – deinst 2010-08-12 12:37:09