[英]Find number of pairs of disjoint sets in a list of sets
問題陳述如下:給定n個集合的列表,每個集合包含k個整數,找到不相交集合的對數。 假設集合中可能的元素為正,且在上方被c> n限制,並假設k << n。
我試圖提出一種比O(kn ^ 2)更快的有效算法來解決此問題,這是天真的解決方案的運行時間。
我能想到的最佳策略包括遍歷列表中的每個集合,並對集合的元素進行哈希處理,以使集合中的每個元素都映射到包含它的集合的一組索引。 然后,對於迭代中的當前集合,將其c個元素用作鍵,並考慮由哈希表作為值給出的c個索引集的並集。 這個結果索引集表示到目前為止遇到的與當前集不脫節的集數,我們可以使用它來查找不相交集的數。 在整個迭代過程中求和該值可得出正確答案。 但是,由於聯合運算為O(n),因此此策略沒有比單純的解決方案更好的方法。
解決此問題的最有效解決方案是什么?
由於k << n,您可以通過以下方法降低復雜度:
現在比較需要n *(n-1)個操作,它們是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.