検索
ホームページバックエンド開発Python チュートリアルFord-Fulkerson アルゴリズムを解析し、Python を介して実装する

Ford-Fulkerson アルゴリズムは、ネットワーク内の最大フローを計算するために使用される貪欲なアルゴリズムです。原則として、正の残存容量を持つ増強パスを見つけることです。増強パスが見つかる限り、パスの追加とトラフィックの計算を続行できます。増加経路が存在しなくなるまで、最大流量を得ることができます。

Ford-Fulkerson アルゴリズムの用語

残り容量: 容量から流量を差し引いた値です。Ford-Fulkerson アルゴリズムでは、使用を継続できるようになるまでの残り容量は正の数になります。パスとして。

残余ネットワーク: 残余容量を容量として使用する、同じ頂点と辺を持つネットワークです。

拡張パス: これは、残差グラフ内のソース ポイントから受信ポイントまでのパスであり、最終容量は 0 です。

Ford-Fulkerson アルゴリズムの原理の例

概念はあまり明確ではないかもしれません。例を見てみましょう。フロー ネットワークのすべてのエッジの初期トラフィックは 0 で、対応するトラフィックがあります。容量上限を設定します。開始点を S、受信点を T とします。

Ford-Fulkerson算法概念详解 Python实现Ford-Fulkerson算法

パス 1、S-A-B-T パスの残りの容量は 8、9、2、最小値は 2 であるため、パスのトラフィックは1 つは 2 です。この時点で、ネットワーク図の流量は 2 になります。

Ford-Fulkerson算法概念详解 Python实现Ford-Fulkerson算法

パス 2、S-D-C-T パスの残りの容量は 3、4、5、最小値は 3 であるため、容量を増やすことができます。この時点でネットワークのトラフィックは 5 になります。

Ford-Fulkerson算法概念详解 Python实现Ford-Fulkerson算法

パス 3、S-A-B-D-C-T パスの残りの容量は 6、7、7、1、2 で、最小値は 1 です。トラフィックは 1 増加し、この時点のネットワーク トラフィックは 6 になります。

Ford-Fulkerson算法概念详解 Python实现Ford-Fulkerson算法

#この時点では、正の残存容量はなく、フロー ネットワークの最大フローは 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 を介して実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は网易伏羲で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
如何实现C#中的贪心算法如何实现C#中的贪心算法Sep 19, 2023 am 11:48 AM

如何实现C#中的贪心算法贪心算法(Greedyalgorithm)是一种常用的问题求解方法,它每次选择当前最优的解决方案,希望能够获得全局最优解。在C#中,我们可以利用贪心算法解决许多实际问题。本文将介绍如何在C#中实现贪心算法,并提供具体的代码示例。一、贪心算法的基本原理贪心算法的基本思想是每次都选择当前最优的解决方案,而不考虑后续步骤可能的影响。这种思

如何使用贪心算法在PHP中实现最少硬币找零问题的高效解决方案?如何使用贪心算法在PHP中实现最少硬币找零问题的高效解决方案?Sep 19, 2023 am 10:22 AM

如何使用贪心算法在PHP中实现最少硬币找零问题的高效解决方案?引言:在日常生活中,我们经常需要找零,尤其是在购物或交易时。要尽可能少地使用硬币,找零金额应该使用尽可能少的硬币进行组合。在计算机编程中,我们可以使用贪心算法来解决这个问题,以得到一个高效的解决方案。本文将介绍如何在PHP中使用贪心算法实现最少硬币找零问题的高效解决方案,并提供相应的代码示

解析Ford-Fulkerson算法并通过Python实现解析Ford-Fulkerson算法并通过Python实现Jan 22, 2024 pm 08:09 PM

Ford-Fulkerson算法是贪心算法,用于计算网络中的最大流量。其原理是找到剩余容量为正的增广路径,只要找到增广路径,就可以继续增加路径和计算流量。直到增广路径不再存在,这时就能得出最大流量。Ford-Fulkerson算法的术语剩余容量:就是将容量减去流量,在Ford-Fulkerson算法中剩余容量是正数,才能继续作为路径。残差网络:是一个具有相同顶点和边的网络,使用残差容量作为容量。增广路径:是残差图中从源点到接收点的路径,最终容量为0。Ford-Fulkerson算法原理示例可能概

如何使用Python实现贪心算法?如何使用Python实现贪心算法?Sep 19, 2023 am 11:43 AM

如何使用Python实现贪心算法?贪心算法(GreedyAlgorithm)是一种简单而有效的算法,适用于解决那些具有最优子结构性质的问题。它在每一步选择中都采取当前状态下最优的选择,希望能够找到全局最优解。在本篇文章中,将介绍如何使用Python实现贪心算法,并附带具体的代码示例。一、贪心算法的基本思想贪心算法的基本思想是每一步选择当前状态下的最优解,然

如何使用PHP编写贪心算法如何使用PHP编写贪心算法Jul 07, 2023 pm 03:45 PM

如何使用PHP编写贪心算法贪心算法(Greedyalgorithm)是一种简单而有效的算法,用于解决一类最优化问题。它的基本思想是在每个步骤中都做出当前看起来最好的选择,而不考虑未来的后果。本文将介绍如何使用PHP编写贪心算法,并提供相关的代码示例。一、问题描述在讲解贪心算法之前,先来定义一个具体的问题,以便更好地理解。假设有一组任务,每个任务都有一个开始

C++中的贪心算法及其实现C++中的贪心算法及其实现Aug 22, 2023 am 10:04 AM

贪心算法是一种常用的算法思想,在许多问题中都有着广泛的应用。其核心思想是在做出每一步的决策时,只考虑眼前最优解,而不考虑长远的影响。在C++中,贪心算法的实现经常会涉及到排序、数据处理等基本操作。下面,我们将针对几个典型的问题,介绍贪心算法的思路及其在C++中的实现。1.活动安排问题给定一组活动,每个活动有其开始时间和结束时间,同时一个人一次只能参加一个活动

贪心算法的C/C++程序,用于找到最少硬币数量贪心算法的C/C++程序,用于找到最少硬币数量Sep 19, 2023 pm 11:01 PM

贪心算法是一种用于寻找给定问题的最优解决方案的算法。贪婪算法的工作原理是找到每个部分的局部最优解(问题的一部分的最优解),因此表明可以找到全局最优解。在这个问题中,我们将使用贪婪算法算法来找到可以组成给定总和的最小硬币/纸币数量。为此,我们将考虑所有有效的硬币或纸币,即面额为{1,2,5,10,20,50,100,200,500,2000}。我们需要返回需要补足总和的硬币/纸币的数量。让我们举几个例子来更好地理解上下文-示例1-Input:1231Output:7说明-我们需要两张500卢比纸币

如何使用贪心算法在PHP中实现最长公共子序列问题的最优解?如何使用贪心算法在PHP中实现最长公共子序列问题的最优解?Sep 19, 2023 am 08:33 AM

如何使用贪心算法在PHP中实现最长公共子序列问题的最优解?最长公共子序列问题(LongestCommonSubsequence,LCS)是一种经典的算法问题,用于寻找两个序列中最长的共同子序列的长度。贪心算法是一种常用于解决最长公共子序列问题的策略,它通过选择当前最优的局部解来构建全局最优解。在PHP中,我们可以使用动态规划的方法来实现贪心算法解决最长

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール