我目前正在研究数学优化问题的算法,并且必须处理以下情况。有效枚举子集
在很多情况下,算法需要决定在这种情况下哪个子集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