Lecture 2:算法设计:稳定婚姻问题
由于博客排版不够清晰,提供英文原版讲义和本章翻译的pdf版以供学习交流,可从文末链接获取。
稳定婚姻:为了向大家介绍算法设计,我们从著名的离散计算问题——稳定婚姻问题开始说起。当然,除了名字,这个问题的原始形式与婚姻机制并无关系,但是它被用来解决一系列与配对相关的实际应用。例如,如何将毕业生分配到医院进行培训,如何向公司分配实习生,或如何在联谊会中分配学生。在这些应用中可以看到两组实体(例如,学生和大学录取名额),我们希望在两组实体中进行分配,并且每一方在做选择时。都有一些偏好,就比如每个学生都有一个想去的学校的排名,而且每个学校有一个想要录取的学生的排名。稳定婚姻问题的目标是产生在某种意义上稳定的配对。
为了方便表达,我们将这个问题抽象为n位男士和n位女士的配对,配对算法在这里充当媒人。首先,我们规定,经过处理后的结果为一个全配对,一位男士与一位女士配对,反之亦然。其次,我们假定一些偏好在配对中也起作用,这种偏好可以通过一个优先级表来表示,每位男士提供的表中包含对所有女士的配对意愿从高到低的排列,每位女士同样也提供对所有男士的这样一个表。考虑以下例子,下表中给出了三位男士Brad (B), Tom (T), Jay-Z (J),三位女士Angelina (A), Katie (K), Byounce (Y)和他们的优先级表(优先级从上到下降低)。
稳定性:有很多种方式可以定义男女配对问题中的稳定性。很明显,我们不能保证每个人都能与TA的最高优先级配对(Brad和Tom都把Katie作为首选)。从直觉来说,不应该会有一对未婚夫妇发现不遵循媒人的安排同时符合两个人的最佳利益,即不会有一位男士对另一位女士说,“我们对彼此来说都是比分配到的对象更好的选择——不如我们私奔吧!”。如果没有这种不稳定性存在,这个配对就是稳定的。
定义1:给定集