我想找到包含整數值的集合的交集? 如果說你有4-5個2k-4k整數列表,最有效的方法是什麼?當集合不相交時,是否有任何與聯合查找相似的交集查找算法?
1
A
回答
0
如果你有記憶騰出:
- 創建一組,將持有的每個值的出現次數的數量。
- 對於每一個整數我在每個組,增加我
- 提取整數的出現次數的多少與一些OCCURENCES等於套數的
這是理論上的O(總和所有集合基數+檢索)
其中retrieveal
可以是您的整數範圍(如果您使用原始數組)或您的集合的聯合的基數(如果您使用散列表來枚舉定義發生的值)。
如果你的集合的邊界是已知的而且很小,你可以用一個足夠大的整數的簡單數組來實現它(通常是256位的8位字符)。
否則,你需要某種散列表,理論上它應該在o(n)中。
1
在許多語言中,例如C++集合被實現爲平衡二叉樹,因此您可以直接在O(NlogM)
中評估集合交集,只需查看O(logM)
中的其他集合即可。
優化: -
當你想爲多套,你可以做到這一點是huffman coding
使用的優化: -
- 使用的集的優先級隊列,其選擇最小的一套第一個
- 選擇兩個最小集合首先評估交集並將其添加到隊列中。
- 這樣做,直到你得到空的交集或剩下一組(交集)。
注:使用std ::設置如果用C++
相關問題
- 1. 查找不相交集合的數量
- 2. 不相交集查找和聯合操作的複雜性
- 3. 如何查找集合的交集
- 4. 查找集合交集,並排除
- 5. 尋找對相交集的任意集
- 6. 快速查找算法 - 聯合運算 - 與集合論中的聯合相同嗎?
- 7. 什麼是從一組集合中找到所有不相交集合的算法?
- 8. 查找交集
- 9. 查找相交
- 10. 查找具有巨大字典的巨大集合的交集
- 11. 查找集合中是否有任何元素有style.display!==「none」;
- 12. 查找兩個單維數組的聯合,相交和差異
- 13. 相交的有序集合在Redis的
- 14. 如何相交SphinxQuerySet與查詢集
- 15. apache spark上的不相交集合
- 16. 四合院交集算法
- 17. 查找兩個集合之間的交集MongoDB中
- 18. 查找集合的所有子集
- 19. 查找NSMutableArrays的交集
- 20. Redis:如何與一個有序集合的「正常」集合相交?
- 21. 當集合數量太多,例如2^n集合時,集合覆蓋中是否有任何appproximate算法?
- 22. 不相交集合數據結構
- 23. 查找相交的點
- 24. 用O(1)查找.NET集合集合?
- 25. 在Vertica中查找交集
- 26. 查找相似
- 27. 使用elasticsearch聚合找到桶的聯合或交集
- 28. 查找對象集合是否具有給定屬性的相同值
- 29. 兩個集合中的任何交集
- 30. 需要查找基本操作集合/相交/對稱差異JAVA
在Python中你可以使用'set'。 – embert
[線性時間計算集交集?]的可能的副本(http://stackoverflow.com/questions/4642172/computing-set-intersection-in-linear-time) – Dukeling