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


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


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 百度服务再次遭遇技术问题,疑似DNS解析故障
    近日晚间,百度多项在线服务出现加载异常,包括移动端搜索在内的多个功能受到影响。初步迹象表明,问题可能与DNS服务器解析有关。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 在维护公司项目时,发现按下手机的某个物理按键后会激活相应的服务,并在屏幕上模拟点击特定坐标点。本文详细介绍了如何使用ADB Shell Input命令来模拟各种输入事件,包括滑动、按键和点击等。 ... [详细]
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社区 版权所有