Stable Matching - Gale Shapely Algorithm

Stable Matching - Gale Shapely Algorithm

基本定义

Matching: A matching S = { ( m , w ) ∣ m ∈ M  and  w ∈ W } S = \{(m, w) | m \in M \text{ and } w \in W\} S={(m,w)mM and wW}, where each m m m and w w w appears in at most one pair in S S S.

Perfect Matching: A perfect matching S ′ = { ( m , w ) ∣ m ∈ M  and  w ∈ W } S' = \{(m, w) | m \in M \text{ and } w \in W\} S={(m,w)mM and wW}, where each m m m and w w w appears in exactly one pair in S ′ S' S.

Preference: Each man m ∈ M m \in M mM ranks all the women. We say " m m m prefers w w w to w ′ w' w" if m m m ranks w w w higher than w ′ w' w. Similarly, each woman w ∈ W w \in W wW ranks all the men.

Instability: An instability with respect to S S S: ( m , w ′ ) ∉ S (m,w') \notin S (m,w)/S, but m m m prefers w ′ w' w to his partner and w ′ w' w prefers m m m to her partner.

Stable Matching: A matching S S S is stable if
\quad\quad\quad\quad\quad\quad 1. S S S is perfect
\quad\quad\quad\quad\quad\quad 2. no instability with respect to S S S

Valid Partner: A woman w w w is a valid partner of a man m m m if there is a stable matching that contains pair ( m , w ) (m,w) (m,w).

Best Valid Partner: w w w is the best valid partner of m m m if
\quad\quad\quad\quad\quad\quad 1. w w w is a valid of m m m
\quad\quad\quad\quad\quad\quad 2. ∀ w ′ > w \forall w'>w w>w, m m m and w ′ w' w is not a valid partner
Denote b e s t ( m ) best(m) best(m)

w ′ > w w'>w w>w indicates m m m ranks w ′ w' w higher than w w w.

伪代码

  1. Initially all m ∈ M m\in M mM and w ∈ W w \in W wW are free
  2. While ∃ m \exist m m who is free and hasn’t proposed to any woman
  3. \quad\quad Choose such a man m m m
  4. \quad\quad Let w w w be the highest-ranked woman in m m m's preference list to whom m m m has not yet proposed
  5. \quad\quad If w w w is free then
  6. \quad\quad\quad\quad ( m , w ) (m,w) (m,w) become engaged
  7. \quad\quad Else ( w w w is currently engaged to m ′ m' m)
  8. \quad\quad\quad\quad If w w w prefers m ′ m' m to m m m then
  9. \quad\quad\quad\quad\quad\quad m m m remains free
  10. \quad\quad\quad\quad Else ( w w w prefers m ′ m' m to m m m)
  11. \quad\quad\quad\quad\quad\quad ( m , w ) (m,w) (m,w) become engaged
  12. \quad\quad\quad\quad\quad\quad m ′ m' m becomes free
  13. \quad\quad\quad\quad Endif
  14. \quad\quad Endif
  15. Endwhile
  16. Return the set S S S of engaged pair

GS算法定理

定理1:在 w w w 获取第一个 proposal 之后, w w w 将一直有配偶。她得到的配偶会越来越好 (in terms of her preference list)。

定理2: m m m propose 的配偶越来越差 (in terms of his preference list)。

定理3:GS 算法在至多 n 2 n^2 n2 次 iterations 之后终止。
证明:
P ( t ) P(t) P(t) { ( m , w ) ∣ m  has proposed to  w } \{(m,w)| m \text{ has proposed to } w \} {(m,w)m has proposed to w}
∵ \because 每次循环男人向不同的女人求婚
∴ ∣ P ( t + 1 ) ∣ > ∣ P ( t ) ∣ \therefore |P(t+1)|>|P(t)| P(t+1)>P(t)
一共最多有 n 2 n^2 n2 个男女配对。

定理4:如果在算法运行过程中 m m m 是 free 的,那么存在一个 m m m 还没有propose 过的 w w w
证明:(反证法)
假设在一个时刻 m m m is free but has already proposed to every women. 由定理1可知每一个女人都有配偶。
∵ \because the engaged pairs form a matching n × n n \times n n×n
∴ \therefore there are n n n engaged men at this point
矛盾

定理5:程序终止时 return 的 set S S S 是一个 perfect matching。
证明:
The set of engaged pairs always forms a matching.
假设这个算法在终止的时候存在一个 free man m m m. 那么,这个男人 m m m 肯定向所有女人都求过婚,否则 while loop 不会结束。
定理4矛盾

定理6:GS 算法 return a set of pairs S S S. 这个集合 S S S 是 stable matching。
证明:(反证法)
假设集合 S S S 中存在 instability,即 ∃ ( m , w ) , ( m ′ , w ′ ) ∈ S \exist (m,w), (m', w') \in S (m,w),(m,w)S m m m 更喜欢 w ′ w' w w ′ w' w 更喜欢 m m m
由算法代码可知, m m m 最后 propose 的 w w w
m m m 在之前没有向 w ′ w' w propose 过,那么 m m m 更喜欢 w w w。(矛盾)
m m m 在之前有向 w ′ w' w propose 过,那么 m m m w ′ w' w 拒绝过,因为 w ′ w' w 更喜欢 m ′ ′ m'' m
∵ m ′ \because m' m w ′ w' w 最终的配偶
∴ m ′ ′ = m ′ \therefore m''=m' m=m m ′ > m ′ ′ > m m'>m''>m m>m>m (矛盾)
因此得出结论, S S S 是 stable matching。

定理7:令 S ∗ = { ( m , b e s t ( m ) ) : m ∈ M } S^* = \{ (m, best(m)) : m\in M\} S={(m,best(m)):mM} ,every execution of the GS Algorithm results in the set S ∗ S^* S【所有execution(choose free man的顺序不同)得到同一个配对】
证明:(反证法)
假设一个G-S算法的 execution ϵ \epsilon ϵ 得到一个 matching S S S
其中 ∃ m ∈ S \exist m \in S mS, m m m 的配偶不是 b e s t ( m ) best(m) best(m) [not best valid pair]。
这说明, m m m 在之前被一个 valid partner w w w 拒绝过。
假设 m m m 是第一个被 valid partner 拒绝的男人。
因为 m m m propose in decreasing order of preference, m m m w = b e s t ( m ) w=best(m) w=best(m) 拒绝。
w w w 拒绝 m m m 有两种可能:
(1) w w w 更喜欢现在的配偶
(2) w w w m m m 配对之后有更喜欢的配偶出现
均形成配对 ( w , m ′ ) (w, m') (w,m) ,其中 m ′ > m m'>m m>m
∵ \because ( m , w ) (m,w) (m,w)是 valid pair
∴ \therefore 存在一个 stable matching ( m , w ) ∈ S ′ (m,w)\in S' (m,w)S。假设在 S ′ S' S中, ( m ′ , w ′ ) (m', w') (m,w)
∵ m \because m m 是第一个被valid partner w w w 拒绝的男人
∴ m ′ \therefore m' m 在这之前没有被valid partner 拒绝过
m ′ m' m propose in decreasing order 且 w ′ w' w m ′ m' m 的一个valid partner。
因此对于 m ′ m' m w > w ′ w>w' w>w
但是前面我们已经证明:对于 w w w, m ′ > m m'>m m>m
∴ \therefore ( m ′ , w ′ ) (m', w') (m,w) 是一个 unstable pair
这与前面假设 S ′ S' S 矛盾

定理8:在一个 stable matching S ∗ S^* S 中,所有女人的配偶都是 worst valid partner。
证明:(反证法)
假设 ( m , w ) ∈ S ∗ (m,w) \in S^* (m,w)S 其中 m m m 不是 w w w 的 worst valid partner。
那么存在一个 stable matching ( m ′ , w ) ∈ S ′ (m', w) \in S' (m,w)S,其中 m ′ < m m'<m m<m
假设在 S ′ S' S ( m , w ′ ) (m, w') (m,w).
∵ w \because w w m m m 的best valid partner, w ′ w' w m m m 的 valid partner
∴ \therefore 对于 m m m, w > w ′ w>w' w>w
发现 ( m , w ) ∈ S ′ (m, w)\in S' (m,w)S 是一个unstable pair
与前面假设 S ′ S' S stable 矛盾

代码实现思路

算法时间复杂度 O ( n 2 ) O(n^2) O(n2),以下是代码思路:

parameter:
MenPref[m, i] denote i t h i^{th} ith woman on man m m m's preference list
WomenPref[w, i] denote i t h i^{th} ith man on woman w w w's preference list

以下四个操作 O ( 1 ) O(1) O(1):

  1. 找到一个 free man
  2. 对于一个男人 m m m,找到一个他没有求过婚的女人
  3. 知道一个女人 w w w 是否已经有配对,且这个配偶是谁
  4. 对于一个女人 w w w 和两个男人 m , m, m m ′ m' m,知道女人更喜欢谁

需要用到的数据结构:

  1. ∀ m \forall m m, an array Next[m] is the position of the next woman he will propose to on his list. (初始:Next[m]=1)

    *每次 propose MenPrefs[m, Next[m]]
    Next[m]++

  2. ∀ w \forall w w,an array Current[w] 是女人 w w w 现在的配偶。

  3. 生成一个 n × n n \times n n×n array Ranking[w, m]

    row 是女人(按序号),column 是男人(按序号),entry是此男 人在女人那里的 ranking。
    *每次只需要compare Rank[w, m] 与 Rank[w, m’]即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值