今天是图论的第二讲,有关Match Problem
以婚姻为例子:
假设男女数量相同,每个人有自己的倾向排名,排名不会重复,我们的目标是找到一个所有人稳定的婚姻关系。
什么是稳定?
形象来说就是不会出现rogue couples即姘头。
如果有这样两对夫妻,流落荒岛,而非常不幸的在于夫妻1的丈夫和夫妻2的妻子是老同学,相比爱自己的伴侣更爱对方,那么会导致他们会称为一对姘头而瞒着或光明正大地出轨。这是不好的。
我们的算法就是为了解决这种不好的事,要分配稳定的婚姻。
那么你或许会想到两个问题:
1.一定会存在稳定状态吗?
2.如果存在,那么唯一吗?
第一个问题,只能说看情况。什么情况?
如果没有同性恋,那么最终肯定会趋于稳定。
我们先来解释为什么同性恋不行:
考虑abc三个人形成三角恋(只有同性恋才会造成三角恋),a最爱b,其次是c,剩下两个人也类似。现在有一个d出现,d对abc来说,都是第三也就是最后优先级的。但是abc中肯定有人会和d组成夫妻,就当是a吧,那么这时,ac肯定会发展成姘头。
至于非同性恋,根据具体算法再来聊。
第二个问题:
不唯一,可以举这样一个简单的例子:
abcd四个人,a对b好感2(越小越好),a对d1,c对b1,c对d2那么就存在两种状态达到stable,ab,cd以及ac,bd。
现在正式介绍这样一种简单的算法:TMA。
男的根据自己的名单从上到下依次找女的,然后女的根据自己的名单挑最高的,剩下男的离开,从名单中删掉这个女的,然后重复操作直到每个人都找到自己伴侣。
为什么这个算法会稳定,其实很显然,不做证明。
这个算法最坏要多久可以搞定,答案是n^2天,就是说每天一个男的在自己名单上划掉一个,最终n^2就都划完了,必定会结束,但是其实很难达到这样坏。
再讲一个反直觉的:
这个算法对男的有利还是女的有利?或者是公平的?
如果不加思考,可能会觉得对女的有利。因为女的能选的男的越来越好,男的能选的女的越来越坏。
但是其实恰恰相反:
在不造成姘头的情况下,男的能找到的都是最好的,女的找到的都是最坏的。
其实不难想,男的从名单上划掉的都是会造成姘头的女的,从上往下自然能找到最好的。
而女的用反证法证明,如果女的伴侣不是最坏的,那么假设某个女的1和一个男的a结成伴侣,如果女1和男b也可以结合成稳定,且男b的优先级低于男a,如果女1去和男b结婚,那么女a可以和男a出轨,根据男的找到的都是最好的,此时男a的伴侣不如女1,那么男a可以和女1结成姘头,不再稳定。也就是说,不存在某个女的可以找到比当前配偶更烂的选择而保持稳定,也就是说,女的的当前配偶就是最烂的。
是不是很有趣,从这个方面我们可以学到,应该主动出击而不是等待,因为看似等来的越来越好,其实却是最烂的。
这样的算法是可以保证每个人都能找到配偶,而总体维持稳定。
可以回到一开始的问题,就是只要不是同性恋、三角恋,必定最后会趋于稳定。就算男女数量不相同也可以,只是最后会存在有人没能配对成功的情况。
很神奇吧。