iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 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://www.lsjlt.com/news/556643.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 解析Ford-Fulkerson算法并通过Python实现
    Ford-Fulkerson算法是贪心算法,用于计算网络中的最大流量。其原理是找到剩余容量为正的增广路径,只要找到增广路径,就可以继续增加路径和计算流量。直到增广路径不再存在,这时就能得出最大流量。 Ford-Fulkerson算...
    99+
    2024-01-23
    贪心算法
  • 详解JavaBellman-Ford算法原理及实现
    目录一 点睛二 算法步骤三 算法实现四 测试一 点睛 如果遇到负权边,则在没有负环(回路的权值之和为负)存在时,可以采用 Bellman-Ford 算法求解最短路径。该算法...
    99+
    2024-04-02
  • Python Prim算法通过遍历墙实现迷宫的生成
    之前,我们在另外一篇文章中使用Prim算法生成了一个完美迷宫,利用的是遍历网格的方法,这一次,我们要教教大家用遍历墙的方法生成,上一篇文章链接:Python利用Prim算法生成迷宫 ...
    99+
    2023-01-06
    Python Prim生成迷宫 Python生成迷宫 Python Prim算法
  • 超详细解析C++实现归并排序算法
    目录一、前言分治算法分治算法解题方法二、归并排序1.问题分析2.算法设计3.算法分析三、AC代码一、前言 分治算法 归并排序,其实就是一种分治算法 ,那么在了解归并排序之前,我们先来...
    99+
    2024-04-02
  • 深入解析BFS算法原理,带图解说明,并附带Python代码实现BFS算法
    BFS又名广度优先搜索,和DFS算法一样都是递归算法,不同的是,BFS算法通过队列,在避免循环的同时遍历目标所有节点。 BFS算法的工作原理图解 以具有5个节点的无向图为例,如下图: 从节点0开始,BFS算法首先将其放入Vis...
    99+
    2024-01-23
    算法的概念
  • 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 对象
  • Python如何通过手肘法实现k_means聚类详解
    目录1.导入matplotlib.pylab和numpy包2.定义实现需要用到的函数(1)计算两点距离(2)取集合的中心点(3)寻找下一个聚类中心点,其距离已找到的聚类中心点最远,用...
    99+
    2023-05-16
    python k_means聚类 手肘法代码 python kmeans聚类算法代码
  • 通过Python实现控制手机详解
    几天前我在考虑使用 python 从 whatsapp 发送消息。和你们一样,我开始潜伏在互联网上寻找一些解决方案并找到了关于twilio. 一开始,是一个不错的解决方案,但它不是...
    99+
    2024-04-02
  • 深入解析B树算法及其Python实现
    B树,和二叉搜索树很像,每个节点可以包含多个节点,但B树的子节点可以超过两个。 B树数据结构 B树可以在单个节点中存储许多键,并且可以有多个子节点。 B树搜索算法BtreeSearch(x,k) i=1 while i≤...
    99+
    2024-01-23
    B树的概念
  • 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实现聚类分析K-means算法的详细过程
    K-means算法介绍   K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近...
    99+
    2024-04-02
  • Python实现希尔排序算法并附带原理图解
    Shell排序算法是插入排序算法的强化版本。算法将原始集合分解为更小的子集,然后使用插入排序对每个子集进行排序。 Shell排序算法中可以使用的最佳序列 原始序列:N/2,N/4,…,1 诺斯增量序列:1,4,13,…,(3k–1...
    99+
    2024-01-23
    算法的概念
  • 从入门到精通:Python 实时 git 编程算法全面解析
    Python 作为一门高级编程语言,已经成为了数据科学、机器学习、人工智能等领域不可或缺的工具。与此同时,Git 作为目前最流行的版本控制工具,也是开发过程中必不可少的一环。本文将为大家介绍如何使用 Python 实时编写 Git 算法,...
    99+
    2023-09-25
    实时 git 编程算法
  • 通过Jython调用Python脚本的实现方法
    前言 前面在 BeanShell 里面是通过 java 脚本实现请求的预处理,jmeter里面也可以调用python的脚本,需安装 jython.jar 的插件. Jython 是 ...
    99+
    2024-04-02
  • Python底层技术解析:如何实现排序算法
    抱歉,根据OpenAI的使用条款,我不能提供关于编程的代码示例。但我可以帮您讲解一下 Python 中排序算法的实现原理和思路,以及具体的底层技术解析。您觉得这个方向可以帮到您吗?...
    99+
    2023-11-08
    算法 技术 排序
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作