首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >扩展路径算法-最大匹配

扩展路径算法-最大匹配
EN

Stack Overflow用户
提问于 2014-08-27 05:53:32
回答 2查看 2K关注 0票数 2

我正在阅读扩充路径或Kuhn的算法,以便在未加权的二部图中找到最大匹配大小。

该算法试图找到一条交替的路径(由交替的未匹配和匹配的边组成),在未匹配的顶点开始和结束。如果找到备用路径,则增加该路径,并将匹配计数加1。

我可以理解算法,但我在理解它通常实现的方式方面存在问题。这里有一个参考实现-- https://sites.google.com/site/indy256/algo/kuhn_matching2

在每个阶段,我们应该尝试从左侧不匹配的顶点开始找到一条交替的路径。然而,在给定的实现中,在每次迭代中,我们不是尝试将所有不匹配的顶点作为可能的开始位置,而是仅从一个不匹配的顶点开始搜索,如以下代码所示:

代码语言:javascript
运行
AI代码解释
复制
for (int u = 0; u < n1; u++) {
      if (findPath(graph, u, matching, new boolean[n1]))
        ++matches;
    } 

这样,在迭代过程中不匹配的左侧顶点将永远不会再次尝试。我不明白为什么这是最优的?

EN

回答 2

Stack Overflow用户

发布于 2016-12-08 15:49:44

这足以证明算法结束后不会留下任何扩充路径。因为没有增加路径意味着最大流量。假设Ai是左边的i个顶点,Bi是右边的i个顶点。

如果Ai已经匹配,那么它将在任何扩充路径中保持匹配。

所以,我们唯一关心的是,当我们考虑了Ai,没有发现匹配,但在for循环中进行了一些迭代后,Ai突然有了新的增强路径。我们将证明这永远不会发生。

让我们考虑Ai之前没有增广路径,假设S是dfs(i)可以访问的顶点集。只有两种方法可以让新顶点(以前不在S中)在之后包含在S中。

  1. 对于S中的某些Ax,边Ax - By从匹配更改为不匹配(之后将包含在S中)

矛盾。因为我们应该通过- Ax - ... - Sink找到扩充路径,但是Sink不在S中,所以我们不能这样做。

  • 对于S中的某些By,边By - Ax从不匹配更改为匹配(之后Ax将包含在S中)

又是矛盾。这一次,我们应该找到扩展路径Ax - By - ... - Sink,但同样,我们无法到达Sink from By。

由于上述原因,不可能意外地向左增加意味着最大流量的路径。

票数 1
EN

Stack Overflow用户

发布于 2016-08-13 02:59:50

根据我的理解,该算法试图为每个左侧顶点u(从0到n1-1)找到一条增广路径。如果存在这样的路径,则可以将u添加到匹配中,使之前添加的所有顶点都保持在匹配中。如果不存在这样的路径,则不可能将u添加到匹配中。这源于扩充路径的特殊属性。

当我们为每个u检查这一点时,我们找到了可能添加到匹配中的最大顶点数,从而导致了最优性保证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25519832

复制
相关文章
nginx路径匹配_url路径匹配
一、前言 一般我们经常在访问网站时,通常会遇到输入某个页面的网址时,出现路由的转发,重定向等。可能访问的是一个网址,出来的时候就显示的是另外的地址。 这种情况下,通常属于nginx的页面跳转。
全栈程序员站长
2022/11/19
6.5K0
nginx路径匹配_url路径匹配
路径匹配之单向距离OWD算法
** OWD(One Way Distance)**算法也是一种描述两个路径之间相似度的方法,最早大概提出于06年左右。最朴素的OWD算法的思路也非常简单,就是把路径之间的距离转化为点到路径的距离再加以处理。这里只对这种算法做简要介绍,至于深层次的理论有空再研究论文。
mythsman
2022/11/14
1.4K0
路径匹配之编辑距离ED算法
编辑距离(Edit Distance),又称Levenshtein距离,原本是用来描述指两个字串之间,由一个转成另一个所需的最少编辑操作次数。这里的”编辑操作“是指“插入”、“删除”和“修改”。是由俄罗斯科学家Vladimir Levenshtein在1965年提出的概念。他通常就被用作一种相似度计算函数,尤其在自然语言处理方面。
mythsman
2022/11/14
1.5K0
路径匹配之编辑距离ED算法
中文分词算法:逆向最大匹配法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程裕强
2019/10/24
1.9K0
二分图最大匹配 —— 匈牙利算法
在图论中,一个「匹配」(matching)是一个边的集合,其中任意两条边都没有公共顶点。
为为为什么
2022/08/09
2.7K0
二分图最大匹配 —— 匈牙利算法
二分图最大匹配问题(匈牙利算法)
如果一个无向图的的顶点可以分为两个互不相交的子集A和B,那么它就是二分图。也就是说,A、B内部不存在连边,所有连边都一头连着A中的顶点,另一头连着B中的顶点。
灯珑LoGin
2022/10/31
9710
二分图最大匹配问题(匈牙利算法)
路径匹配之距离归并MD算法简析
距离归并算法(Merge Distance)也是一种计算路径相似度的算法(其实“路径归并”是我自己瞎翻译的,因为没有找到更加官方的中文翻译)。跟DTW,LCSS之类不同,他提出来时间不算长,但是思想也是十分简单的。计算方便理解容易,也是进行路径相似度匹配的不错的思路。
mythsman
2022/11/14
9430
路径匹配之距离归并MD算法简析
最全二分图总结(最大匹配、最大权匹配、点覆盖、独立集、路径覆盖,带证明和例题)
二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。(简单说就是把一个图的顶点分成两个集合,且集合内的点不邻接)
Here_SDUT
2022/06/29
4.9K0
最全二分图总结(最大匹配、最大权匹配、点覆盖、独立集、路径覆盖,带证明和例题)
匈牙利算法(二分图最大匹配问题)
匈牙利算法用于求解无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)问题
mathor
2019/12/30
1.4K0
匈牙利算法(二分图最大匹配问题)
路径匹配之动态时间规整DTW算法简析
DTW算法又叫动态时间规整(  Dynamic Time Warping),是一个比较简单的dp算法。常用于不等长的离散的路径点的匹配问题,在孤立词语音识别、手势识别、数据挖掘和信息检索等领域有着很不错的表现。
mythsman
2022/11/14
2K0
路径匹配之动态时间规整DTW算法简析
最大前驱路径
比如, 用户在页面中的访问路径是 1,2,3,4 但是,用户不会按照正常设定好的路径进行访问, 用户的访问路径可能是 1,2,5,2 这时候,我们就要从访问路径中提取出 1,2,5
烟草的香味
2019/07/26
6950
最大前驱路径
图论--二分图最大匹配(匈牙利算法)--模板
//二分图最大匹配数量 #include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<vector> #include<cmath> #include<algorithm> using namespace std; const int N=505; int line[N][N]; int girl[N],used[N]; int k,m,n; bool found(int x) { for(int i=1
风骨散人Chiam
2020/10/28
5110
最大匹配(简单版)
二分匹配——最大匹配 #include <cstdlib> #include <iostream> #include <cstdio> #include <vector> #include <cstring> using namespace std; const int maxn = 300; vector<int>E[maxn]; int used[maxn]; int match[maxn]; int n,m; void add_edge(int u,int v) { E[u].push_bac
Lokinli
2023/03/09
3050
堆栈扩展至最大
不知道什么原因,能扩展出的:栈顶 - 栈底 = sizeofStackReserve-16K(即:$4000),超出继续push就会导致stack_overflow。
战神伽罗
2019/07/24
4370
路径匹配之最长公共子序列LCSS算法简析
LCSS算法其实就是我们熟悉的LCS算法(Longest Common Subsequence 最长公共子序列),一个非常基础的dp。以前一直以为LCS算法没啥用,完全就是为了应付比赛用的,现在才发现原来LCS算法竟然在路径匹配上也能有很大作用。
mythsman
2022/11/14
2.7K0
路径匹配之最长公共子序列LCSS算法简析
算法——模式匹配算法
模式匹配算法: 定义一个主串字符串S="goodgoogle",再定义一个模式串字符串T="google",然后依次遍历主串中的字符,判断,模式串是否在主串中存在,这种模式串的定位操作通常称为串的模式匹配 代码: 1 /** 2 * 朴素的模式匹配算法 3 * @author wydream 4 * 5 */ 6 7 public class OrdinaryModel { 8 9 public static void main(String[] args) {
说故事的五公子
2022/05/09
8720
【学习】深度解析中文分词器算法(最大正向/逆向匹配)
中文分词算法概述: 1:非基于词典的分词(人工智能领域) 相当于人工智能领域计算。一般用于机器学习,特定领域等方法,这种在特定领域的分词可以让计算机在现有的规则模型中,推理如何分词。在某个领域(垂直领域)分词精度较高。但是实现比较复杂。 例:比较流行的语义网:基于本体的语义检索。 大致实现:用protege工具构建一个本体(在哲学中也叫概念,在80年代开始被人工智能),通过jena的推理机制和实现方法。 实现对Ontology的语义检索。 Ontology语义检索这块自己和一朋友也还在琢
小莹莹
2018/04/23
2.3K0
【学习】深度解析中文分词器算法(最大正向/逆向匹配)
Flask支持正则路径匹配
•default([^/].*?)•string•int•float•path•uuid 而当我们对路径匹配有更高要求的时候,就无法满足我们的需要的;比如:匹配以student_开头后面跟学号的路径。
上帝De助手
2019/10/12
2.3K0
点击加载更多

相似问题

Pebble - Detect Shake手势

15

Swift - Shake手势关闭子视图控制器

07

滑动手势取消IBAction的触发分段

11

将变量从手势识别器函数传递给IBAction

22

配置抽头手势识别器,以响应在点击位置的ibaction

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文