【算法题】素数伴侣-用匈牙利算法解决二分图匹配问题

描述

输入一个字符串,内容是一个不重复的整数数组。

若数组中两个数相加为素数,那么这两个数可以配对,即素数伴侣。

一个数字只能配对一次。

输出最大配对数。

示例

输入:
4
2 5 6 13

输出:
2

说明:
输入第一行为数组长度,第二行为数组字符串
此时当2和13配对,5和6配对时,得到最大配对数2

匈牙利算法介绍

匈牙利算法用于解决二分图最大匹配问题。

二分图是指一个图的节点可以分为两部分A和B,A中的节点只和B中的节点有连接,B中的节点只和A中的节点有连接,例如下图:

image.png

匈牙利算法可以找出一种方案使得在一个节点只能至多拥有一次匹配的情况下,匹配数最大。

匈牙利算法的策略是“先到先得”和“请求让出”。

对于“先到先得”,例如检查A1的匹配,A1可以和B2匹配,那么就先让A1和B2匹配上。

对于“请求让出”,例如检查A2的匹配,此时B2已经被A1匹配了,那么就向A1请求让出。此时A1还可以和B3匹配,那么就让A1让出B2,使得A1和B3匹配,A2和B2匹配。假如A1在B2后没有更多匹配了,那么A1就不让A2,A2往后寻找到B4进行匹配。假如B3已经被其他A节点匹配了,那么A1就请求其他节点让出B3,形成递归的逻辑。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值