【发布时间】:2015-01-24 02:33:15
【问题描述】:
首先:不,这不是作业!这适合我正在为游戏编写的求解器。我只是将问题简化为这个简洁的陈述:
给定一组集合 S,找出并删除 S 的任何元素,这些元素是 S 的其他元素的子集。
域
1
1 i|
2
10
详情
Si 是 [0, K)
的子集min(|Si|) >= logC(|S|)
我目前的方法是通过我所说的“NatSet”(即bool[K])将每个集合保持在 S 内。然后我按 |Si| 对 S 进行排序并进行 O(|S|^2) 搜索以查找作为其他元素子集的元素。不幸的是,这对于我的目标值 C=6 和 K=16*9 来说太慢了。
【问题讨论】:
-
嗯,好吧,如果您正在检查特定元素
A,那么S中唯一可能将A作为子集的元素是大小至少为 @987654325 的元素@。因此,这可能会稍微缩小您的搜索范围。您还可以从 S 中的最大集合(或集合列表,如果有多个具有最大大小的集合)开始,然后搜索 S 中的其余集合以查看哪些是所讨论的最大集合的子集。丢弃任何存在并继续使用第二小的集合(或具有第二小的集合的集合),等等。 -
你能按一些标准排列(排序)你的集合(内部的)的元素吗?
-
更大的,|S|还是 K?
-
你是怎么拿到这一套的?加
Si的时候可以过滤吗? -
@Tony 我正在考虑提出一个新问题,详细说明我正在尝试做什么。无论哪种方式,我都是通过对可能移动的 C-ary 树进行 DFS 来获得集合。 S 是树的整个级别。我在这里提出的问题是我修剪一些分支的策略。
标签: algorithm set-theory