algorithm - 证明问题的NP完全性

标签 algorithm np-complete reduction

我们有一个集合 A = {a1,a2,...,an}

给定名为 B1,B2, ..., Bm 的子集。如果一个名为 H 的子集与所有给定的 B 有交集,我们称 H 为“覆盖子集”。对于给定的 A 和 B,是否存在任何大小为 K(H 的基数为 K)的“覆盖子集”?证明这个问题是NP完全的。

我们应该将一些已知问题简化为“覆盖子集”问题。

最佳答案

更新 这叫做hitting set .您可以在维基百科文章中阅读相同的答案。

这个问题在某种程度上是set cover problem 的双重问题。 .

我们将更改一些术语。设 {B1, B2, ...} 为元素,{a1, a2, ...} 为集合。如果集合 Bj 包含原始问题中的 ai,则“集合”ai 包含新问题中的“元素”Bj

现在,您只需要选择覆盖所有“元素”Bj 的最小数量的“集合”ai。该问题是 NP 完全问题,如上面的链接所示。

为了阐明转换,只需替换集合/元素和包含/包含,就可以从另一个问题定义生成一个问题定义。比较以下

每个集合 Bj 都包含一些选定的元素 ai
每个“元素”Bj 都包含在某些选定的“集合”ai

关于algorithm - 证明问题的NP完全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4841136/

相关文章:

java - 如何确定国际象棋中的路径是否没有障碍?

algorithm - 在 C 中计算 1000+ 位字的平方根

runtime - np 完成但不是 "hard"

graph - 求解最短哈密顿路径的扩展

lambda-calculus - 在 lambda 演算中按值调用

algorithm - 基于lambda的将向量拆分为多个较小向量的STL算法

algorithm - 逻辑集合运算的基数近似值——(AND/OR/XOR 的 "HyperLogLog")

algorithm - 哈密​​顿路径生成器算法

cuda - 求 CUDA 中矩阵的最大值

c - MPI_Reduce 未按预期工作