Skip to content
Ayas_Lan's Blog
Go back

稳定匹配

Edit page

基本定义

稳定匹配:

对于经过匹配之后的任意a, b满足以下条件:

稳定匹配问题算法:

给定n个男人和n个女人的偏好表,来找出对应的稳定匹配组合。

GS算法:

初始化所有人都是单身的
while(如果有男人是单身,同时没有向每一个女人求婚){
   选择这样一个男人m
   w = m的喜好列表中的第一位还没有被求婚的
   if (w is free)
      匹配m和w
   else if (w 比起现有的配对对象m',更偏好于m)
      匹配m和w,m'设置为单身
   else
      w 拒绝 m
}

该算法最多需要n2n^{2}次,即可终止

证明是否能够达到完美匹配:

性质:

典型例题

医生分配问题

不同男女数量的稳定匹配问题 假设:有m所医院,n个医生,要把n个医生分配到m个医院中。(m < n)医院岗位没有空余,但医生可能没有工作。 稳定条件:不存在以下条件之一:

核心思想:应该让医院反转过来获取主动选择的权利、 伪代码:

while (存在某所医院有空余岗位){
  h 给它期望清单上排名最高的医生发offer
  if (该医生处于free状态)
      让该医生就职
  else if (这个医生已在h'处就职)
       if(该医生更喜欢h’)
           继续在h‘任职
        else 
           转到h任职
}

船只停泊问题

(如何将其他问题转化为稳定匹配问题) 背景: 假设某家公司有n个港口和n条船,且存在一个表,标明了m天中,每一天里每条船的状态,且在这m天中,每条船访问每个港口恰好一天。但是船可能需要维修或者保养,公司现在对每条船,当它到达某个港口时,公司可能会让它停留在这个港口维护,直到m天过去。 那么是否总是存在某种方案使得不会有两条船停在同一个港口(一个港口只能停一条船)?

基本思想: 关键在于转化处港口和船只之间的喜好排名表。

可行性证明: 假设已经经过一次稳定匹配后,船只S停靠在港口P检修,但是出现了另一条船S’进港口P。 那么说明,对于港口P,其对于船只S‘的喜好程度大于S;对于S’,其应该更喜欢P,而不是其应该检修的港口P‘。存在不稳定因素,与假设相矛盾。

大O的定义:

上界:

若说f(n)是O(g(n))的,则存在c>0,n0n_{0} >= 0,对于所有的n >= n0n_{0},都有0 <= f(n) <= c * g(n)。 ![[Pasted image 20260302172000.png|245]]

O(g(n))实际上是函数的集合 大O的性质:

下界

若说f(n)是Ω(g(n))\Omega(g(n)),即存在常数c > 0和n0n_{0} >= 0,使得对于所有的n >= n0n_{0},都有f(n) >= c * g(n) >= 0 ![[Pasted image 20260302173315.png|249]]

紧邻边界

若说f(n)是θ(g(n))\theta(g(n)),即存在常数c1>0,c2>0n0>0c_{1} > 0, c_{2}>0, n_{0}> 0,满足: 0 <= c1c_{1} * g(n) <= c2c_{2} * g(n)对于所有n >= n0n_{0}成立 Ex: 对于f(n) = 32n2+17n+1n^{2} + 17n + 1,可以说f(n) = O(n3n^{3}),但不能说f(n) = θ(n3)\theta (n^{3})

从极限角度理解: ![[Pasted image 20260302174818.png]]

NOTE:n!的复杂度等同于2θ(nlogn)2^{\theta(nlog n)} 证明: 两边同时取对数,有 log(n!)=log2πn(ne)n=log2πn+nlognelog^{(n!)} = log^{\sqrt{2\pi n}(\frac{n}{e})^{n}} = log^{\sqrt{2\pi n}} + nlog^{\frac{n}{e}}


Edit page
Share this post on:

Previous Post
分治算法
Next Post
贪心算法