首先:不,这不是作业!这适合我正在为游戏编写的求解器。我只是将问题简化为这个简洁的陈述:
给定一组集合 S,找出并删除 S 的任何元素,这些元素是 S 的其他元素的子集。
领域
1 <= |S| <= C^K
1 <= |S i | <= ķ
2 <= C <= 10
10 <= K <= 500
细节
S i是 [0, K) 的子集
min(|S i |) >= log C (|S|)
我目前的方法是通过我所说的“NatSet”将每个集合保持在 S 中,这只是一个bool[K]
. 然后我按 |S i |对 S 进行排序 并进行 O(|S|^2) 搜索以查找作为其他元素子集的元素。不幸的是,这对于我的目标值 C=6 和 K=16*9 来说太慢了。