回答
我在topcoder的算法教程中看到了這一點。花了一些時間並瞭解它是如何工作的。
迭代通過所有的k元素子集{0,1,... N-1}
int s = (1 << k) - 1;
while (!(s & 1 << N))
{
// do stuff with s
int lo = s & ~(s - 1); // lowest one bit
int lz = (s + lo) & ~s; // lowest zero bit above lo
s |= lz; // add lz to the set
s &= ~(lz - 1); // reset bits below lz
s |= (lz/lo/2) - 1; // put back right number of bits at end
}
雖然它通常是非常高效的,但是位魔法是溝通算法思想的一種不好的方式。 –
@ G.Bach:可能比緩慢解決問題的算法更好地傳達快速解決問題的算法。特別是當你評論它,以便它是可理解的。沒有? – tmyklebu
@tmyklebu當然,更好的複雜算法是可取的,評論確實有幫助。但是當我知道這段代碼應該達到什麼時,我不明白它是如何工作的。 –
當我需要獲取Java中的字符串ArrayList的所有組合(或子集)時,我使用了這種方法。
public static List<List<String>> powerset(ArrayList<String> list) {
List<List<String>> ps = new ArrayList<List<String>>();
ps.add(new ArrayList<String>());
// for every item in the original list
for (String item : list) {
List<List<String>> newPs = new ArrayList<List<String>>();
for (List<String> subset : ps) {
// copy all of the current powerset's subsets
newPs.add(subset);
// plus the subsets appended with the current item
List<String> newSubset = new ArrayList<String>(subset);
newSubset.add(item);
newPs.add(newSubset);
}
// powerset is now powerset of list.subList(0, list.indexOf(item)+1)
ps = newPs;
}
return ps;
}
這是一個昂貴的操作,可能不是您的情況的完美解決方案。但是,如果我想盡快提出解決方案,我會按照這些方法做一些事情。您可以檢查newSubset
是否小於n
,即所需子集的大小,如果它小於n
,則只能將item
添加到該子集。這會阻止你生成大於n的子集。最後,您可以遍歷ps
並刪除任何小於n
的數組列表。再次,這個解決方案絕不是完美的......但它應該訣竅
我喜歡這種組合方法,並且考慮到它是你正在構建的一個權力集合,它對我來說並不壞。但是,如果工作僅僅是獲得具有固定數量元素的子集,構建功率集合的成本就會成倍地增加。 –
@ sunrize920謝謝! – user1315305
不幸的是,我用盡了子集大小= 21的內存,並設置大小= 60,所以我必須找到一些更好的解決方案。 – user1315305
句子: 集A被設定整數的小於10
寫爲:
A={0,1,2,3,4,5,6,7,8,9}
它被稱爲上市或名冊方法
- 1. 在一組中找出基數C的所有可能的子集0-N
- 2. 如何找到元素的所有ID與一個子元素是可見的
- 3. 我如何找到一個集合的所有子集,正好有n個元素?
- 4. 找到六個數組元素的所有可能組合
- 5. 找到n個元素的所有可能的分區與k大小的子集,其中兩個元素只共享相同的集合一次
- 6. 如何獲得一組可複製元素的所有獨特n長組合?
- 7. 找到所有可能的N套子集與Erlang之間的配對
- 8. 找到所有常見的N大小的元組的元組
- 9. 元素的所有可能組合
- 10. 給定一組n個整數,列出所有可能的子集sum> = k
- 11. 如何生成數組中所有n個元素的組合?
- 12. 在PHP中查找數組元素的所有可能的唯一組合
- 13. 找到一個multiset的所有子集
- 14. 如何在Java中遞歸地生成N元素集合中的所有k元素子集
- 15. 查找n個k個元素的所有組合
- 16. hasClass名稱的所有可能性使所有的子元素
- 17. 如何通過所有子元素找到特定的類,如果可用則隱藏該子元素?
- 18. 如何枚舉元素的所有可能組合
- 19. 如何找到第n個p元素?
- 20. 強制邊距:0px到所有子元素,是否有可能?
- 21. 在java中找到所有可能的組合集合
- 22. list找到所有元素
- 23. 如何從包含另一個數組的所有元素的數組中獲得所有可能的組合
- 24. Appium的iOS:如何找到一個元素的子元素
- 25. 我如何計算元素直到找到N個好元素?
- 26. 如何通過現有元素(而不是xpath)找到子元素(不是所有子元素)
- 27. 找到一個數組的元素的所有最大
- 28. 如何在R中迭代地找到所有可能的子集?
- 29. 找到一個數組的子集,使子集中的元素有一個共同的差異
- 30. 查找N組節點之間的所有可能路徑
'我應該如何處理這個problem.'筆和紙在思考算法時效果最佳。 –
@nickecarlo這真的很有幫助,謝謝... – user1315305
@ user1315305問題標記爲-ve,因爲錯誤標籤,問題對我來說也很典型 –