博客
关于我
最大半连通子图
阅读量:578 次
发布时间:2019-03-11

本文共 596 字,大约阅读时间需要 1 分钟。

为了解决给定的有向无环图(DAG)中的最长路径问题,我们可以使用一种基于拓扑排序和动态规划的方法。以下是优化后的解释步骤:

  • 压缩强连通分量:使用tarjan算法对图进行压缩点,以将每个强连通分量(SCC)压缩为一个单一的点。这样处理后的图将不再包含环,可以丰富为DAG。

  • 构建新的DAG:对于每条原始边,如果它连接的两个点在不同的强连通分量中,则在新构建的DAG中添加这条边。这样确保新图中没有环,所有路径都是从一个点到另一点不通过自身。

  • 初始化数组:为每个点分配一个唯一的标识符,并初始化相关数组来记录大小、深度优先搜索时间dfn、最低点low,以及动态规划数组f和g。

  • 拓扑排序:根据tarjan算法的结果,按照拓扑顺序对点进行处理,从最后一个点逆序处理到第一个点。

  • 动态规划计算

    • 从后向前遍历每个点,计算每个点到终点的方案数(g数组),以及达到该点的最大方案数(f数组)。
    • 对每条出边,检查目标点。如果目标点的方案数小于当前点方案数加上目标点大小,则更新目标点的方案数和最大值。
    • 如果方案数相等,则方案数相加并取模,更新目标点的最大值。
  • 结果汇总:遍历所有点,找出最大方案数,并求和对应的方案数总和。

  • 这种方法有效地将最长路径问题转化为动态规划问题,利用了DAG的拓扑顺序,使得计算高效可靠。

    经过这一系列步骤,我们可以轻松地找到DAG中的最长路径及其对应的方案数,解决问题得以完成。

    转载地址:http://xritz.baihongyu.com/

    你可能感兴趣的文章
    设计模式(18)——中介者模式
    查看>>
    用JavaScript实现希尔排序
    查看>>
    error LNK2019:无法解析的外部符号_imp_CryptAcquireContextA@20
    查看>>
    推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
    查看>>
    ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED
    查看>>
    BUU-MISC-认真你就输了
    查看>>
    BUU-MISC-caesar
    查看>>
    【专题2:电子工程师 之 上位机】 之 【36.事件重载】
    查看>>
    【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
    查看>>
    一文理解设计模式--命令模式(Command)
    查看>>
    VTK:可视化之RandomProbe
    查看>>
    block多队列分析 - 2. block多队列的初始化
    查看>>
    Java时间
    查看>>
    不编译只打包system或者vendor image命令
    查看>>
    The wxWindows Library Licence (WXwindows)
    查看>>
    leetcode——第203题——虚拟头结点
    查看>>
    【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
    查看>>
    MySQL----基础及常用命令
    查看>>
    flink启动(二)
    查看>>
    前端开发进阶手册.pdf
    查看>>