计算机网络 Relabel-to-front算法

Relabel-to-front算法

Relabel-to-front算法用于确定网络的最大流。相对于通用的推送-重贴标签方法,Relabel-to-front算法更加有效。在使用推送-重贴标签方法时,推送和重贴标签这两个基本操作可以按任意顺序进行。Relabel-to-front算法精心选择顺序并有效地控制网络数据结构。

首先,我们必须理解基本操作,如推送和重贴标签:

高度变量(h)和过剩流量是与网络中的每个顶点(e)相关联的2个变量。

  • 推送: 当一个顶点具有过剩流量且残余图中的邻接节点具有较低的高度时,我们将流量从顶点推送到高度较低的节点。
  • 重贴标签: 当一个顶点具有过多的流量且附近没有高度较低的节点时,我们使用重贴标签操作使顶点变得更高,以便它可以执行推送操作。

Relabel-to-front算法在一个列表中跟踪网络的顶点。它反复选择一个溢出的顶点u,并对其执行一个discharge操作,从列表的最开始开始。

在discharge操作期间进行推送和重贴标签操作,直到顶点u没有正的过剩流量(e)

如果一个顶点被重贴标签,算法会再次扫描,新顶点位于列表的最前面。

算法:

  • 为上述通用推送-重贴标签算法设置预流和高度的初始值。
  • 从头开始创建列表L,省略源和汇点。
  • 将每个顶点的当前指针设置为其邻居列表N中的第一个顶点。那些存在残余边的顶点被包括在邻居列表N中。
  • 当算法到达列表L的末尾时。
  • 从列表L中选择顶点u后,对其执行discharge操作。
  • 如果由于discharge而重贴标签,将你放在列表的顶部。
  • 如果u被移到列表的最前面,下一次迭代的顶点将是其在列表中的新位置中跟随u的顶点。

示例:

  • 将流网络作为示例。右侧显示了初始列表L =(B,C),初始值u = B。
    Relabel-to-front算法

  • 在初始化预流之后。列表L下的每个顶点下面都有一个具有当前邻居标记的邻居列表N。
    Relabel-to-front算法

  • 由于顶点B具有过剩流量3(e = 3),执行discharge操作。顶点B执行重贴标签操作(h = 1),将流量1推送到顶点C,因为它缺少一个高度较低的节点。
    Relabel-to-front算法

  • 顶点B执行重贴标签操作(h = 5),并将流量2推送到顶点A,因为它仍然有额外的流量2(e = 2)。尽管顶点B的标签已更改,但它仍位于列表的顶部。现在,顶点C具有过剩流量1(e = 1),它被排出。
    Relabel-to-front算法

  • 顶点C执行重贴标签操作(h = 1),将流量1推送到节点D。由于执行了重贴标签操作,顶点C被移动到列表的顶部。
    Relabel-to-front算法
  • 在列表L中,顶点B紧随顶点C,但B没有过剩流量。一旦到达列表L的末尾,RELABEL-TO-FRONT算法结束。由于没有溢出的顶点,预流已达到最高水平。在这里,最大流量为1。
  • 时间复杂度:在网络G上,运行时间为O(V3)(V,E)。因此,它比通用的推送-重贴标签算法表现更好,该算法需要O(V2E)的时间来完成。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程