热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

“稳定婚姻算法”雨夜谈M/N资源匹配问题

连续数月的阴雨绵绵,江南烟雨似乎没有停止的迹象,近日又迎来了下半年目前为止最猛烈的寒潮,无论哪一个都是我超级期待和喜欢的,这

连续数月的阴雨绵绵,江南烟雨似乎没有停止的迹象,近日又迎来了下半年目前为止最猛烈的寒潮,无论哪一个都是我超级期待和喜欢的,这样的天气,不适合睡觉。

一个很不错的算法,稳定婚姻算法

先给出一个概念,来自百度百科:
稳定婚姻问题:https://baike.baidu.com/item/稳定婚姻问题/12760040

再给出一篇博客链接:
什么是算法:如何寻找稳定的婚姻搭配:http://www.matrix67.com/blog/archives/2976

这个话题起源于一次相亲活动,最终落实到了一个算法。算法简要记述如下:

初始:两个单身集合:男-M,女-F
算法过程:while M非空m = M取出一个f = 未拒绝过m的F集合中自己最心仪的if f是单身 f嫁给mm从M集合移除elseif f比现有丈夫m'更喜欢mf和m'离婚f重新嫁给mm'进入单身集合Melsem重新进入单身集合Mend-ifend-ifend-while

算法本身本文不再赘述,本文聊一些不那么技术的东西,来看看这个稳定婚姻匹配算法都用在什么场合。


名字说是 稳定婚姻算法,但实际上,这个算法 最不适用 的场景就是配婚的场景,或者说,真正的婚姻可能一辈子都在实施这个算法,而不是在配婚的当时。至少可以肯定的是,婚姻完全是一个超级复杂的话题,不可能用算术加加减减就能理清的…


这个算法有点名不符实了。


本质上,这个名不符实的算法是一个 m对n的资源/用户配对 算法。典型的场景就是房产中介,互联网公司猎头,GSLB,推荐系统等。

  • 房产中介
    如果M集合为一群要买房子的人,F集合为一堆房子资源,那么m对f的心仪程度要综合考虑是否学区方,价格是否够低,周边配套设施等。
    如果M集合是一堆房子资源,F集合是一群要买房子的人,那么m对f的心仪程度则变成了是否能承受高价,付款是否快,是否全款等。
    房产中介作为算法的实施者,最终需要将房子卖给最适合的人,同时为找房子的人找到合适的房子。

  • 互联网公司猎头
    为什么要加上定语“互联网公司”?因为这个行业存在大量的公司,同时存在大量时刻蠢蠢欲动的从业人员,每年都会有固定的几个月,海量的从业人员在海量的公司之间大洗牌,这个时候,猎头就要实施稳定婚姻算法了。具体就不描述了。

  • GSLB
    随着CDN的逐渐流行,当你访问一个站点的时候,为你提供服务的已经不再是那唯一的源站或者运行着反向代理负载均衡的源站了,而是离你最近的CDN节点!
    那么,如果和来自各地的访问不同资源的请求在分布于各地的CDN节点中分配一个最适合它的,就需要DNS服务去实施稳定婚姻算法了,当然这里面可能是一个双向实施的过程,即既要为用户请求分配一个最适合的CDN节点,也要为CDN节点受理一个最合适的请求。

  • 推荐系统
    这个比较有意思。以广告投放为例。
    大量的商品如何精准对应大量的人群的用户画像集合,这就需要推荐系统运行实施稳定婚姻算法了。
    当然,推荐系统本身复杂得很,不仅仅是一个稳定婚姻算法就能覆盖的

事实上,只要是m对n的匹配系统,均可以用稳定婚姻算法来求最优解,这个和1对n的系统是不同的。我来简单说明一下。

1对n系统,典型就是LVS负载均衡,当一个请求来到时,显而易见,需要在n个服务器中选择一个最适合的,算法就结束了。然而如果同时来了m个请求,就不能这么简单了,我们为这m个请求中的其中1个请求假设为c1,按照负载均衡算法分配了一台服务器k,但是k是不是更适合服务另一个请求c2呢?这就是一个问题,所以为c1这个请求分配服务器的过程并没有就此结束,c1只是 暂时 和k配成了对,搞不好最终的结果会推翻这个结论,让c2和k配成一对。

这里要解释的一点是,如果k已经许给了c1,那么k为什么不能再许给c2呢?并不是因为这可能会增加k的负载,构成一个非最优的匹配,而是因为 k许给了c1这件事会改变系统的稳定性

所以,m对n的匹配系统必须执行某种程度的 双向匹配 机制,但是匹配的过程必然是按照某种顺序在进行,每一轮的过程必然会沉淀下来一定的稳定组合,所以 必然存在匹配集合双方一方越来越高概率匹配到更好的,而另一方则越来越高概率匹配到更差的 。因此,没有什么所谓的双向选择机制是 完全对等 的!这可以很好的解释甲方和乙方的非对等性。


一直在下雨,非常爽!有几多皮鞋?进水湿,更有几多皮鞋进水胖?
浙江温州皮鞋湿,下雨进水不会胖!


推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有