我目前正在研究數學優化問題的算法,並且必須處理以下情況。有效枚舉子集
在很多情況下,算法需要決定在這種情況下哪個子集S⊂N最好。 N = {0,1,2,...,126,127}
| S | ∈{0,1,2,3,4,5}(子集的大小在0和5之間)
這給出了可能的子集總數265.982.833。 (binom(128,5)+ binom(128,4)+ ... + binom(128,0))
如果我預先計算所有可能的子集並將它們存儲在一個數組中,那麼這個數組將有265.982。 833個條目和大約1.27GB的存儲器佔用空間,沒有任何優化和子集作爲字節數組的天真存儲。
在這種情況下,當算法需要知道具有索引i的特定子集中的哪些元素時,只需要查找表。但是巨大的內存需求是不可接受的。
所以我的問題是,如果任何人都可以想到一個算法來有效地計算基於索引i的子集中的元素,而不是需要預先計算的數組。
EDIT包括樣品:
LookupTable中[0] = {}
LookupTable中[1] = {0}
...
LookupTable中[127] = {126}
LookupTable中[128 ] = {127}
LookupTable中[129] = {0,1}
LookupTable中[130] = {0,2}
...
LookupTable中[265982832] = {123,124,125,126, 127}
我認爲這將是很難回答這不知道用什麼標準來選擇a)基數S和b)S成員是否可以根據它們的索引來計算「N」的元素? – angelatlarge 2013-03-26 23:34:09
你只是想要一個快速和高效的內存循環(或迭代器),或者你真的需要對它們進行有效的編碼(爲什麼?) – 2013-03-27 02:55:05