返回顶部
首页 > 资讯 > 后端开发 > Python >解析Ford-Fulkerson算法并通过Python实现
  • 190
分享到

解析Ford-Fulkerson算法并通过Python实现

贪心算法 2024-01-23 05:01:27 190人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Ford-Fulkerson算法是贪心算法,用于计算网络中的最大流量。其原理是找到剩余容量为正的增广路径,只要找到增广路径,就可以继续增加路径和计算流量。直到增广路径不再存在,这时就能得出最大流量。 Ford-Fulkerson算

Ford-Fulkerson算法是贪心算法,用于计算网络中的最大流量。其原理是找到剩余容量为正的增广路径,只要找到增广路径,就可以继续增加路径和计算流量。直到增广路径不再存在,这时就能得出最大流量。

Ford-Fulkerson算法的术语

剩余容量:就是将容量减去流量,在Ford-Fulkerson算法中剩余容量是正数,才能继续作为路径。

残差网络:是一个具有相同顶点和边的网络,使用残差容量作为容量。

增广路径:是残差图中从源点到接收点的路径,最终容量为0。

Ford-Fulkerson算法原理示例

可能概念不是很清晰,下面来看一个示例,流网络所有边的初始流量均为0,并有对应的容量上限,设起始点为S,接收点为T。

路径一,S-A-B-T路径剩余容量为8、9、2,最小值为2,因此路径一的流量为2,这时网络图的流量为2。

路径二,S-D-C-T路径剩余容量为3、4、5,最小值为3,因此我们可以将流量增加3,这时网络的流量为5。

路径三,S-A-B-D-C-T路径剩余容量为6、7、7、1、2,最小值为1,因此流量增加1,这时网络的流量为6。

至此,已经没有为正数的剩余容量,得出该流网络的最大流是6。

python实现Ford-Fulkerson算法

from collections import defaultdict

class Graph:

    def __init__(self, graph):
        self.graph = graph
        self. ROW = len(graph)

    def searching_alGo_BFS(self, s, t, parent):

        visited = [False] * (self.ROW)
        queue = []

        queue.append(s)
        visited[s] = True

        while queue:

            u = queue.pop(0)

            for ind, val in enumerate(self.graph[u]):
                if visited[ind] == False and val > 0:
                    queue.append(ind)
                    visited[ind] = True
                    parent[ind] = u

        return True if visited[t] else False

    def ford_fulkerson(self, source, sink):
        parent = [-1] * (self.ROW)
        max_flow = 0

        while self.searching_algo_BFS(source, sink, parent):

            path_flow = float("Inf")
            s = sink
            while(s != source):
                path_flow = min(path_flow, self.graph[parent[s]][s])
                s = parent[s]

            max_flow += path_flow

            v = sink
            while(v != source):
                u = parent[v]
                self.graph[u][v] -= path_flow
                self.graph[v][u] += path_flow
                v = parent[v]

        return max_flow

graph = [[0, 8, 0, 0, 3, 0],
         [0, 0, 9, 0, 0, 0],
         [0, 0, 0, 0, 7, 2],
         [0, 0, 0, 0, 0, 5],
         [0, 0, 7, 4, 0, 0],
         [0, 0, 0, 0, 0, 0]]

g = Graph(graph)

source = 0
sink = 5

print("Max Flow: %d " % g.ford_fulkerson(source, sink))

以上就是解析Ford-Fulkerson算法并通过Python实现的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 解析Ford-Fulkerson算法并通过Python实现

本文链接: https://lsjlt.com/news/556643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 解析Ford-Fulkerson算法并通过Python实现
    Ford-Fulkerson算法是贪心算法,用于计算网络中的最大流量。其原理是找到剩余容量为正的增广路径,只要找到增广路径,就可以继续增加路径和计算流量。直到增广路径不再存在,这时就能得出最大流量。 Ford-Fulkerson算...
    99+
    2024-01-23
    贪心算法
  • 详解JavaBellman-Ford算法原理及实现
    目录一 点睛二 算法步骤三 算法实现四 测试一 点睛 如果遇到负权边,则在没有负环(回路的权值之和为负)存在时,可以采用 Bellman-Ford 算法求解最短路径。该算法...
    99+
    2024-04-02
  • python通过socket实现多个连接并实现ssh功能详解
    一、前言   上一篇中我们已经知道了客户端通过socket来连接服务端,进行了一次数据传输,那如何实现客户端多次发生数据?而服务端接受多个客户端呢? 二、发送中文信息   在python3中,socket只...
    99+
    2022-06-04
    多个 详解 功能
  • Python Prim算法通过遍历墙实现迷宫的生成
    之前,我们在另外一篇文章中使用Prim算法生成了一个完美迷宫,利用的是遍历网格的方法,这一次,我们要教教大家用遍历墙的方法生成,上一篇文章链接:Python利用Prim算法生成迷宫 ...
    99+
    2023-01-06
    Python Prim生成迷宫 Python生成迷宫 Python Prim算法
  • TF-IDF算法解析与Python实现方法详解
    TF-IDF(term frequencyinverse document frequency)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权...
    99+
    2022-06-04
    算法 详解 方法
  • 深入解析BFS算法原理,带图解说明,并附带Python代码实现BFS算法
    BFS又名广度优先搜索,和DFS算法一样都是递归算法,不同的是,BFS算法通过队列,在避免循环的同时遍历目标所有节点。 BFS算法的工作原理图解 以具有5个节点的无向图为例,如下图: 从节点0开始,BFS算法首先将其放入Vis...
    99+
    2024-01-23
    算法的概念
  • 超详细解析C++实现归并排序算法
    目录一、前言分治算法分治算法解题方法二、归并排序1.问题分析2.算法设计3.算法分析三、AC代码一、前言 分治算法 归并排序,其实就是一种分治算法 ,那么在了解归并排序之前,我们先来...
    99+
    2024-04-02
  • 浅析Python实现DFA算法
    目录一、概述二、匹配关键词三、算法实现3.1、构建存储结构3.2、匹配关键词3.3、完整代码四、其他用法4.1、添加通配符一、概述 计算机操作系统中的进程状态与切换可以作为 DFA 算法的一种近似理解。如下图所示,其...
    99+
    2022-06-02
    Python DFA 算法 DFA
  • python通过SSH登陆linux并操作的实现
    用的昨天刚接触到的库,在windows下通过paramiko来登录linux系统并执行了几个命令,基本算是初试成功,后面会接着学习的。 代码: >>> import paramiko >&g...
    99+
    2022-06-04
    python SSH登陆linux python SSH linux
  • Python实现印章代码的算法解析
    目录1.题目2.代码3.代码解析1.题目 2.代码 #共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。 n,m=map(int,input(...
    99+
    2024-04-02
  • 详解贝尔曼福特算法并用Python实现
    贝尔曼福特算法(Bellman Ford)可以找到从目标节点到加权图其他节点的最短路径。这一点和Dijkstra算法很相似,贝尔曼福特算法可以处理负权重的图,从实现来看也相对简单。 贝尔曼福特算法原理详解 贝尔曼福特算法通过高估从...
    99+
    2024-01-22
    算法的概念
  • Python编程算法:如何实现并行计算?
    在计算机科学领域中,计算机的速度一直是一个瓶颈。为了克服这个瓶颈,现代计算机通常采用并行计算方法。并行计算是指通过同时执行多个计算任务来提高计算机的效率。 Python作为一种高级编程语言,也可以实现并行计算。在本篇文章中,我们将探讨如何...
    99+
    2023-06-27
    编程算法 开发技术 git
  • 如何通过Java编程实现高效的算法计算?
    Java是一种高效的编程语言,它可以帮助我们实现高效的算法计算。在本文中,我们将讨论如何通过Java编程实现高效的算法计算。我们将从算法的基础知识开始,然后介绍Java编程语言的一些核心概念,最后展示一些演示代码。 算法是解决问题的方法。在...
    99+
    2023-09-25
    编程算法 laravel 对象
  • 深入解析B树算法及其Python实现
    B树,和二叉搜索树很像,每个节点可以包含多个节点,但B树的子节点可以超过两个。 B树数据结构 B树可以在单个节点中存储许多键,并且可以有多个子节点。 B树搜索算法BtreeSearch(x,k) i=1 while i≤...
    99+
    2024-01-23
    B树的概念
  • 通过Python实现控制手机详解
    几天前我在考虑使用 python 从 whatsapp 发送消息。和你们一样,我开始潜伏在互联网上寻找一些解决方案并找到了关于twilio. 一开始,是一个不错的解决方案,但它不是...
    99+
    2024-04-02
  • Python如何通过手肘法实现k_means聚类详解
    目录1.导入matplotlib.pylab和numpy包2.定义实现需要用到的函数(1)计算两点距离(2)取集合的中心点(3)寻找下一个聚类中心点,其距离已找到的聚类中心点最远,用...
    99+
    2023-05-16
    python k_means聚类 手肘法代码 python kmeans聚类算法代码
  • Python通过内置函数和自写算法DFS实现排列组合
    目录调用内置函数自写算法DFS实现排列组合是数学中的一种常见的计算方法,用于求出从给定的元素中选取若干个元素的所有可能的排列或组合。在Python中,有多种方式可以实现排列组合的计算...
    99+
    2023-05-18
    Python 算法 Python 排列组合
  • Python实现KPM算法详解
    目录知识点说明:一、要获取KPM算法的next[]数组二、KMP函数知识点说明: 先说前缀,和后缀吧 比如有一个串:abab 则在下标为3处的(前缀和后缀都要比下标出的长度小1,此处...
    99+
    2024-04-02
  • Python实现冒泡排序算法的示例解析
    目录1. 算法描述2. 算法分析3. 动图展示4. 代码实现5. 算法升级6. 时间复杂度分析1. 算法描述 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排...
    99+
    2024-04-02
  • Python实现的归并排序算法示例
    本文实例讲述了Python实现的归并排序算法。分享给大家供大家参考,具体如下: 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用...
    99+
    2022-06-04
    示例 算法 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作