【发布时间】:2019-07-18 00:40:29
【问题描述】:
我需要以特定的顺序迭代生成一个大集合的幂集。迭代地,我的意思是每次调用 getNext() (或类似的)我都会以特定顺序获得 powerset 的下一个元素。预先计算和存储整个 powerset 不是一个选项,因为它太大了;我说的是 200 项目集的 powerset。相反,当“无趣”的 powerset 元素出现时,特定的顺序将允许我进行优化和跳过。
指定的顺序是这样的,对于一个有序的五项集合,1表示将该项包含在powerset元素中(从左到右,从上到下):
00000 10000 11000 11100 11110 11111
01000 10100 11010 11101
00100 10010 11001 11011
00010 10001 10110 10111
00001 01100 10101 01111
01010 10011
01001 01110
00110 01101
00101 01011
00011 00111
“跳过”我的意思是,例如,如果我确定 10010 不满足某些标准,我知道以下带有两个 1 的 powerset 元素都不会满足该标准,所以我可以跳过检查三个 1 的幂集元素。
我已经通过移动部分 powerset 元素实现了一个部分可行的解决方案,但到目前为止还无法弄清楚如何正确处理所有这些问题的逻辑。显然,0 个 1 和 5 个 1 的集合,以及 1 个 1 和 4 个 1 的集合是各自的镜像,有趣的是上面的中间情况,两个 1 和三个 1。任何帮助,将不胜感激。
【问题讨论】:
-
您的“部分工作解决方案”在哪里?
-
它有192行长,这就是我没有发布它的原因。但是...这里是chalmersuniversity.box.com/shared/static/…
-
您是否考虑过使用标准回溯递归搜索而不将所有这些抽象分层?