当然,问题在于重复计算。对于某些类的DAG =树,甚至是串行并行树,这很容易做到。我发现唯一可以在合理的时间内在一般DAG上运行的算法是一种近似算法(摘要扩散),但是提高精度的位数是指数级的(我需要很多位)。
背景:此任务是在BBChop(http://github.com/ealdwulf/bbchop)概率计算中完成的(多次使用不同的“权重”),该程序用于查找间歇性错误(例如,贝叶斯版本的“ git bisect')。因此,有问题的DAG是修订历史。这意味着边的数量不太可能接近节点数量的平方,对于小于k的节点,它可能小于节点数量的k倍。不幸的是,我没有发现修订版DAG的任何其他有用属性。例如,我希望最大的三连接组件仅随着节点数的平方根增长,但可悲的是(至少在linux内核的历史上)它线性增长。