我目前正在研究数学优化问题的算法,并且必须处理以下情况。
在很多情况下,算法需要决定在这种情况下哪个子集 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.27 GB 的内存占用,没有任何优化和将子集简单存储为字节数组。
在这种情况下,当算法需要知道哪些元素在索引为 i 的特定子集中时,只需要进行表查找。然而,巨大的内存需求是不可接受的。
所以我的问题基本上是,是否有人能想到一种算法来根据索引 i 有效地计算子集中的元素,而不是需要预先计算的数组。
编辑包括示例:
lookupTable[0] = {}
lookupTable[1] = {0}
...
lookupTable[127] = {126}
lookupTable[128] = {127}
lookupTable[129] = {0, 1}
lookupTable[ 130] = {0, 2}
...
查找表[265982832] = {123, 124, 125, 126, 127}