找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: aimisiyou

[研讨] 匈牙利算法相关问题

[复制链接]

已领礼包: 1859个

财富等级: 堆金积玉

 楼主| 发表于 2020-2-16 01:51:55 | 显示全部楼层
wrf610051 发表于 2020-2-15 20:03
由大师7楼的数据(setq jzlst '((0 1 4 15 1)(4 1 12 27 0)(0 0 17 26 5)(2 0 14 12 0)(0 0 0 0 0)))
得到 ...

你这结果是配对关系吧。我那里得到的结果是覆盖所有0的四条线,不是最后的配对关系。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

发表于 2020-2-16 06:34:07 | 显示全部楼层
如图,已知最少要用5条直线才能覆盖所有的0,5条直线为((0,1)(0,3)(0,5)(4,0)(5,0)),如何得到三角形所在的坐标((0,0)(1,4)(2,2)(3,3)(4,1))?

我认为三角形所在的坐标正好是配对关系。我想问大师能否从配对关系,推出覆盖所有0的线条呢?

点评

是的,三角形所在的坐标正好就是最大匹配情况。你所指的配对关系是指已知的连线情况吧(要从中选取最大匹配问题吧)?  详情 回复 发表于 2020-2-16 10:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1859个

财富等级: 堆金积玉

 楼主| 发表于 2020-2-16 10:16:48 | 显示全部楼层
本帖最后由 aimisiyou 于 2020-2-16 10:26 编辑
wrf610051 发表于 2020-2-16 06:34
我认为三角形所在的坐标正好是配对关系。我想问大师能否从配对关系,推出覆盖所有0的线条呢?

是的,三角形所在的坐标正好就是最大匹配情况。你所指的配对关系是指已知的连线情况吧(要从中选取最大匹配问题吧)?如果你所指的是最终结果,即最大匹配结果,那么每个坐标在每行每列是唯一的,所以该坐标所在的行或列就是一条覆盖线。我们要找的就是最少的坐标(即最少的覆盖线条数)覆盖所有的0。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1859个

财富等级: 堆金积玉

 楼主| 发表于 2020-2-21 23:44:50 | 显示全部楼层
本帖最后由 aimisiyou 于 2020-2-22 00:01 编辑
aimisiyou 发表于 2020-2-9 22:09
对于《匈牙利算法质疑》中的反例(非0元素可取1),检测运行确实会出现死循环情况,因为选定c11为0*(正确 ...

针对特例情况,选取0作为0*的条件稍作修改:1、如果某行或某列只有一个0,则选取该0作为0*;若无此情况执行2:2、若某行或某列中的0即是行最小值也是列最小值,则选择该0作为0*(注意0之间也有大小之分,一行或一列中靠后的0比靠前的0小),若无此情况则执行3:3、一个0所在的行和列上的0个数之和最少的,则选择该0作为0*。如图,第一步选择0(6,6)作为0*;第二步,可得到0(3,2)和0(5,5)都是行和列中的最小值,任选一个作为0*;余下的仍按3条规则选取0*。



不知道是否还存在反例?




IMG_20200221_235549.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1859个

财富等级: 堆金积玉

 楼主| 发表于 2020-2-22 12:46:05 | 显示全部楼层
仔细想了下,若某个0处于独行独列,那么该0也是属于第2种情况,即是同时是该行和该列的最小值,另外每行每列都至少有1个0时,最后一个0一定是该行该列的最小值。即先用匈牙利算法得到最大覆盖线条数,然后按条件2规则选取0*。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1859个

财富等级: 堆金积玉

 楼主| 发表于 2020-2-22 12:55:42 | 显示全部楼层
另外一种算法,先将矩阵转换为每行每列都至少有1个0,选取最后一个0为0*,同时删除最后一个0所在的行和列,剩下的矩阵再转换为每行每列都至少有一个0,选取最后一个0为0*,同时删除该0*所在行和列;……直至选取最后一个0*。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1859个

财富等级: 堆金积玉

 楼主| 发表于 2020-2-22 18:02:40 | 显示全部楼层
不对,将特例倒过来,仍是一个反例。看来真是迈不过去啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-18 14:07 , Processed in 0.286128 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表