c++ - 内存保守最大独立顶点集

标签 c++ algorithm graph graph-theory stl-algorithm

我想为无向图中的最大独立顶点集找到一种内存保守但高效的算法。

传统算法使用辅助数据结构(原始图的拷贝)来实现它。我想避免这种并行结构,因为内存分配对于实时实现来说很慢,而且我有一些内存边界。 我只想用 bool 标签标记 MIS 中的节点。 可能吗?

请注意,我不想要最大独立集,而是最大独立集。

附言 我知道这个问题与语言无关,但我使用 C++ 和 STL 进行编码。

最佳答案

如果您只有每个节点 i 的 bool 标签 (i),这是一个解决方案。它需要时间 O(|V|+|E|),其中 |V|是节点数,|E|是输入图中的边数。

For all nodes v
   set label(v)=false;
For all nodes v
   if (all neighbors w of v have label(w)=false)
      set label(v)=true

label(v)=true 的节点 v 是一个最大独立集。它们是独立的,因为根据构造,任何带标签的节点 v 都不能有带标签的邻居。它们是一个最大集合,因为您只激活标签,并且如果另一个已经标记的邻居 w 阻止它,则只留下一个节点 v 未标记。

优化说明:如果节点编号为 1...n,您只需检查邻居 w=1..v-1,因为任何其他 w 都不能具有 label(w)=true。

关于c++ - 内存保守最大独立顶点集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10811955/

相关文章:

python - 将图划分为完整子图的算法

javascript - 用鼠标悬停创建 map 的最佳方法是什么?

java - 我是否应该使用第 3 方股票图表 java 库?

c++ - 如何通过串行 w/Arduino 将动态文本写入 LED 显示屏

python - 在 Windows XP 中从 C++ 程序执行 Python 脚本

在流网络中处理时间的算法和数据结构

performance - 广度优先搜索分支因子

algorithm - 检查一棵二叉树是否是另一棵二叉树的子树

c++ - 请帮助我理解 Boost::Any

c++ - 如何在 bleeding edge linux 上编译程序以在旧 linux 上运行