稳定匹配(邀请-拒绝算法 [Gale-Shapley 1962] )
一个匹配S是稳定的,如果匹配S是完美的且不存在相对于S的不稳定因素。
算法
初始,每个人都是自由的。一个自由的男人m选择他的优先表上排名高的女人w,发起邀请,那么(m,w)进入中间状态: 约会 。
如果又有另一个男人m’发起邀请,那么女人w决定,选择m,还是m’. 如果m优先, 那么约会状态不变。否则(m’,w)变成约会状态,m变成自由状态。
循环往复;当没有人处于自由状态,那么所有的约会被定为后的结果, 返回终的完美匹配
1 | Initialize each person to be free. |
至多n^2次While循环的迭代后终止。G-S算法的每次执行都得到男士对应的最佳有效伴侣集合。每个女士与她最差的有效伴侣配对。
trick:女士对自己的优先表做反向变换;1 | for i = 1 to n |
五类典型问题
Interval scheduling: n log n greedy algorithm.
Weighted interval scheduling: n log n dynamic programming algorithm.
Bipartite matching: nkmax-flow based algorithm.
Independent set: NP-complete.
Competitive facility location: PSPACEcomplete.
算法分析
亚线性时间(O(logn))-线性时间O(n)-O(nlogn)阶时间-平方时间-立方时间-O(n^k)时间-指数时间(Exponential time)-n!时间
我对不起葡萄