动态图中的最大增量流量


12

我正在寻找一种快速算法来计算动态图中的最大流量。即给定的曲线图小号V我们有最大流量˚Fģ小号。然后,新的/旧的节点u加上/删除其相应边以形成图形G 1。新创建的图形中的最大流量是多少?有没有办法防止重新计算最大流量?G=(V,E)s,tVFGstuG1

任何不占用大量时间/内存的预处理都值得赞赏。

最简单的想法是重新计算流量。

另一个简单的想法是,保存所有先前在最大流量计算中使用的扩展路径,添加一个顶点,我们可以找到简单的路径(在上一步的更新的容量图中),该路径从源头开始,一直到v,然后转到到了目的地,但问题是,这条道路应该是简单的,我找不到比Ø ñ 的这种情况下,= | E | 。(还要注意,如果只是一条路径,可以在O n + m )中完成,但事实并非如此。)vvO(nm)m=|E|O(n+m)

同样对于删除节点以上想法是行不通的。

我也已经看过诸如渐进式边缘法之类的论文,但是在这种情况下它们似乎还不够好,每个边缘的多于O m ,并且在这种情况下似乎不合适(我们只是重新计算了流量)。另外,目前我正在使用Ford-Fulkerson最大流量算法。如果在线算法有更好的选择,那么很高兴知道这一点。O(m)


您能否澄清“但问题是,此路径应该很简单”部分?我没听懂
Dmytro Korduban

@ maldini.ua,实际上,我的意思是,从源到然后从v到目标的路径不应具有公共顶点(v除外)。假设v是新添加的节点。如果不是这样,我们可以跳过一些检查,并且可以拥有更快的算法(平均而言,或者可能是渐近的)。vvvv
2012年

知道了,但对我而言,没什么特别的。我认为最简单的重新计算思路如下:1)将带有边的新顶点添加到残差图中;2)使用您选择的最大流量算法在更新的残差图中找到最大流量。您建议的情况将由最大流量算法“自动”处理(例如,它将找不到任何增加路径等)。如果您有兴趣删除节点,可以在答案中写出来。PS要明确一点,您是否有向图或无向图?v
Dmytro Korduban

@ maldini.ua,正常重新计算会添加目前解决方案的复杂性,所以我不认为这很好(知道正常情况下太多的边缘是无用的,并且实际上不会导致非常高的性能问题,可能会很好),但是如果您有删除想法节点,我很想看看您的想法,还有图是有向的。PS,但我对这两种情况都感兴趣。|G|
2012年

请记住,您在残差图中运行它,此时应该有很多零容量的边。通常它的工作速度非常快,尤其是在稀疏图中(至少对我有用)。另一方面,“简单路径”方法对我来说听起来有点复杂。同样不要忘记,对于福特福克逊来说,在运行时间上有约束(其中| f |v的相邻边电容之和限制)。O(|f||E|)|f|v
Dmytro Korduban '02

Answers:


6

所描述的方法在理论上可能不是最佳的。这只是一个可能适用于作者的简单实用解决方案。我无法提供任何参考,因为我一直认为这是众所周知的民俗,但是奇怪的是没有人在答案中发布它。所以我做。

假设我们有一个无向网络。假设将其存储在允许轻松进行顶点/弧插入/删除的数据结构中。有时我们将使用剩余网络G f(即,更新后的容量c f = c - f)。G=(V,E,c)Gfcf=cf

第一部分是如何处理顶点插入/删除。插入或多或少是简单的:

  1. 将具有相应边的新顶点添加到残差网络。
  2. 使用您选择的maxflow算法在更新后的残差网络中找到最大流量。

对于删除,事情变得更加复杂。试想一下,我们分裂顶点我们要删除成两半v ñvvin,使得所有的弧点v ñ,所有出弧从进入v Ø ü 牛逼,这新的顶点连接无限的弧度 然后缺失v相当于之间的电弧的缺失v Ñv Ò ù 。在这种情况下会发生什么?用f v表示voutvinvoutvvinvoutfv通过顶点的流。这样一来,在删除后,v i n将经历过多的f v流单位,而v o u t将经历f v流单位的短缺(流约束显然会被破坏)。要再次保持流量约束,我们应该重新排列流量,但是我们也要保持原始流量值尽可能高。首先让我们看看是否可以在不减少总流量的情况下进行重新排列。要检查找到maxflow ˚F vv ñv Ø üvvinfvvoutfvfv~vin的“板缺”残余网络中(即,没有电弧连接 v Ñ v Ò ù )。我们显然应该用 f v约束它。如果碰巧等于 f v,那么我们很幸运:我们以不改变总流量的方式重新分配了通过v的流量。在另一种情况下的总流量必须由“无用”过量的降低Δ= ˚F v - ˚F v单元。为此,请临时连接stvoutvinvoutfvfvvΔ=fvfv~st通过无限容量的圆弧,并从再次运行maxflow算法v Õ û (我们应该通过结合流Δ)。这将修复剩余网络并再次保持流量约束,从而自动将总流量减少ΔvinvoutΔΔ

这种更新的时间复杂度可能取决于我们使用的maxflow算法。虽然最坏的情况可能很糟糕,但是它仍然比总重新计算要好。

O(|V|2|E|)O(|E|2logCmax)


阅读最后VZN的回答后,我发现在页面90中描述的类似的方法
Dmytro Korduban

正如我在删除节点,通过了解fv~fvfv~Δ

当将1个流量单位从推到u时,将c fv u 减少1并增加c fu v vucf(v,u)cf(u,v)f(v,u)=f(u,v)

如果您想更改边缘容量,您有什么想法吗?
切特

-1

好的,考虑到新信息,并避免了一些棘手的先前错误的开始/红鲱鱼裁判(me culpa),这里是一些新裁判。

通过扩展计算稳健的最小 割距,快速解决在线最大流量问题的序列 Doug Altner和ÖzlemErgun

该参考文献考虑了MFP的在线顺序和“热启动”,即基于对先前MFP的增量chg。“与使用黑匣子MFP求解器的类似代码相比,我们证明了我们的算法将运行时间减少了一个数量级。特别是,我们证明了用于鲁棒最小分割的算法可以在几秒钟内解决实例,而这些实例需要超过4个使用黑匣子最大流量求解器需要数小时。”


涉及最大流量的问题的改进 Altner,Douglas S.,佐治亚州技术

在此2008年博士学位论文(可下载pdf)中,作者考虑了逐步添加弧的问题,这似乎与添加新顶点(具有多个新弧)的问题“足够接近”。

正如本摘要第1部分所述,此参考书中的大部分内容都与删除网络的某些部分(剪切/“拦截”)有关

参见esp“ IV求解最大流量的在线序列........ p63”。

p 63“但是,本章的目的是说服读者,反复使用黑盒最大流量求解器来求解大量的MFP,可能会导致大量不必要的计算。”

p66“在上述应用中,MFP通常在拓扑上相似。也就是说,序列中的下一个MFP通过添加或删除少量电弧或通过可预测地更改局部电弧组的容量而不同于前一个。 ,在解决这些实例时,通常不需花费时间和空间来存储超出先前问题解决方案范围的任何内容。”

p67作者在此处还使用了“热启动”方法。“快速解决整个在线优化问题序列的有效策略是开发有效的重新优化启发式方法。为此,我们开发了一种改进的最大流量算法,该算法旨在进行有效的热启动。”

请参阅具有特定增量式新弧问题的esp p71:

新的电弧最大流量重新优化问题(NAMFRP)

作者考虑了更普遍的问题

最大流重新优化问题(MFROP)
最大流单弧重新优化问题(MFSAROP)


-3

通过一些快速搜索,似乎在线版本是一个活跃的研究领域。您没有提及可能有助于缩小文献搜索范围的应用领域。一种选择是寻找具有最新或最新创新的应用领域。因此,增量最大流量在视觉系统中有一些应用,并在那里有一些算法;在Microsoft研究实验室尝试按增量广度优先搜索的最大流。用这篇论文的引言来解释,显然对于视觉实例,Boykov和Kolmogorov算法效果很好,尽管在视觉应用之外它可能表现不佳,但没有已知的指数时间反例。因此可能值得尝试对数据进行B&K算法并查看其性能和

您似乎在说图形边缘数量线性的增量算法速度不够快?但是效率不是很高吗?您要处理多少条边?如果这是昂贵的或重要的因素,则可能是降低遍历图的成本(例如,存储在db中的图与存储在内存中的图)

这篇有趣的论文认为,尽管最大流量的非增量算法在P中,但增量版本却是NP完整的。“据我们所知,我们的结果是第一个发现增量版本为NP完整的P时间问题的人。”

Hartline,Sharp的增量流量


谢谢,我没有看过您参考的论文,我会看一看(以前看过几篇论文,发现它们无用),但是关于我的问题领域,这是股票营销中实际工作中的一个问题。当我发现我应该解决这个问题时,要说些什么就有点复杂了。实际上,乍一看我并不觉得很困难,但是尝试了一些代码后,我发现这并不容易。此算法将在手机上运行,​​但运行速度并不快(客户不喜欢我的算法:)。而且有时新节点会带来太多的边缘。这是瓶颈。
2012年

有趣。听起来您可能应该基于有限的处理能力和快速更新需求来进行启发式搜索。可以将处理从“客户端”(在您的情况下显然是电话)转移到服务器吗?每个客户都必须计算问题的不同版本(即不同数据)吗?
vzn 2012年

在伊朗,最大的问题是互联网连接速度,因此我无法将其移至服务器端。如果一切正常(速度不错),则可以肯定地重新计算不会太差。
Saeed

6
我看不出这是如何回答原始问题的,原始问题是关于随着节点和边的添加而随着时间变化的图。第一篇论文描述了一种用于标准单次最大流问题的增量算法。第二篇论文描述了针对不同的 “增量最大流”问题的论文,其中边的集合是固定的,但是其容量随时间增长。
Jeffε

1
@Jɛff E,是的,您是对的:)实际上,在此之前,我看到过与参考论文相似的论文,但是正如您所说的,这些论文与我的问题无关,我到目前为止所见的最接近的论文就是我所参考的论文。
2012年

-5

另一个可能性/方向是“ 推-重贴标签”最大流量算法,它是“ 最大流量的最有效算法之一”,根据数据的不同,可以具有更好的复杂度。例如,如Wikipedia页面所述

O(V3)O(V2EO(VElog(V2/E))


3
同样,我看不出此答案与发布的问题有何关系。Push-relabel是用于解决标准最大流量问题的著名教科书策略。
Jeffε

福特福克森(Ford-fulkerson)...对吗?&OP要求更好的东西。您是否知道某些事实证明推-重贴标要比福特-富克森逊?尚不清楚OP熟悉push-relabel。geez,教科书中出现的算法当然不是拒绝答案的直接标准,对吧?
vzn 2012年

3
其实,是; 在标准教科书(或维基百科)中回答的问题不是研究级的。但是,第一个发布的有关增量流的问题很有趣,而且范围很广。(缺少明确的答案表明正确答案可能是“好问题。没人知道。”)
Jeffε2012年

vzn,谢谢您的贡献,但是:“您知道证明推入-重贴标比福特-富克尔森更糟的东西”不是将其发布为答案的好理由,如果您知道为什么在线算法中的“推入-重贴标”更好比Ford-Falkerson讲得好。我个人很喜欢Ford-Falkerson,因为它简单,常数因子低,而且我从过去就知道。但是正如我说的,我不能说这在所有情况下都是不错的选择,而且这些算法并非简单可比,它们需要实际测试。
2012年

pt的意思是,如果您有一种最大流量算法不能很好地运行数据,请尝试另一种据说运行良好的算法,因为有很多针对不同数据配置文件的优化算法。不,它不是在线/“顶点增量”,但如果没有其他选择,则对于脱机情况可能会更好。在线版本,尽管它们如我在上面发现的那样存在,但很可能难以实现……
vzn 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.