Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 算法:从集合中删除尽可能少的元素,以便不强制执行子集_Algorithm_Subset - Fatal编程技术网

Algorithm 算法:从集合中删除尽可能少的元素,以便不强制执行子集

Algorithm 算法:从集合中删除尽可能少的元素,以便不强制执行子集,algorithm,subset,Algorithm,Subset,我遇到了一个我不知道如何解决的问题: 我有一组集合a={a_1,a_2,…,a_n}和一组B 现在的目标是从B(创建B')中删除尽可能少的元素,这样,在删除所有1的元素后,听起来像是要从B中删除A中的最小元素(这与顶点覆盖问题密切相关) 某些集合A的命中集合本身就是一个集合,它包含A中每个集合中的至少一个元素(它“命中”每个集合)。最小打击集就是这种打击集的最小值。因此,如果您的集合A有一个MHS,那么A中的每个集合都有一个元素。从B中删除此项意味着A中的任何集合都不能是B的子集 您所需要做的就

我遇到了一个我不知道如何解决的问题:

我有一组集合
a={a_1,a_2,…,a_n}
和一组
B


现在的目标是从
B
(创建
B'
)中删除尽可能少的元素,这样,在删除所有
1的元素后,听起来像是要从
B
中删除
A
中的最小元素(这与顶点覆盖问题密切相关)

某些集合
A
的命中集合本身就是一个集合,它包含
A
中每个集合中的至少一个元素(它“命中”每个集合)。最小打击集就是这种打击集的最小值。因此,如果您的集合
A
有一个MHS,那么
A
中的每个集合都有一个元素。从
B
中删除此项意味着
A
中的任何集合都不能是
B
的子集

您所需要做的就是计算(A1,A2,…An)的MHS,然后将其从
B
中删除。不幸的是,找到MHS是一个NP完全问题。但要知道,您有几个选择:

  • 如果您的数据集很小,请使用显而易见的暴力解决方案
  • 使用概率算法快速获得近似答案(请参阅)
  • 朝相反的方向跑得很远很远

  • 我认为您应该从这些集合中找到最小长度,然后删除该集合中的这些元素。

    如果您只需要一些近似值,请从A中的最小集合开始,然后从B中删除一个元素。(您可以随机抓取一个元素,或者根据您需要的准确度和速度,检查一个元素中哪个元素的集合最多)

    现在,A中最小的集合不是B的子集。从那里继续,但首先检查您正在检查的集合是否是此时的子集


    这让我想起了顶点覆盖问题,我还记得一些类似于这个问题的近似算法。

    @davit datuashvili:Chris的答案很准确,我建议你读一下。