《计算机科学中的数学》学习笔记(06 状态机)

书本信息:

作者: [美] Eric Lehman / [美] F. Thomson Leighton / [美] Albert R. Meyer
出版社: 电子工业出版社
出品方: 博文视点
副标题: 信息与智能时代的必修课
原作名: Mathematics for Computer Science

06 状态机


状态机(State Machines)是一种用于模拟系统行为的抽象模型。由于计算机程序可以看作是逐步的计算过程,因此状态机在计算机科学中经常出现。

1、状态和转移

状态机由以下几个主要部分组成:

  1. 状态(States):状态是状态机的基本组成部分。每个状态代表系统的一个特定条件或配置。
  2. 转移(Transitions):转换描述了状态机从一个状态移动到另一个状态的过程。转换可以由某些条件触发,也可以由输入值触发。
  3. 开始状态(Start State):状态机的运行通常从一个特定的开始状态开始。
  4. 终止状态(Terminating States):有些状态机会有一个或多个特定的状态,当状态机达到这些状态时,它将停止运行。

有限状态机(Finite State Machine,简称FSM)是一种特殊类型的状态机,它的状态数量是有限的。FSM在计算机科学、数学、物理学等领域都有广泛的应用。它们常常被用来模拟和控制系统的行为。

无限状态机,或称为无界状态机(Infinite State Machine),是一种状态数量无限的状态机。这种状态机的状态数量不受限制,可以是无限的。这种状态机的一个常见例子就是计数器,它可以从一个初始值开始,不断地增加或减少,理论上可以达到无限大或无限小。

例如,交通灯就是一个简单的无限状态机:

状态:
1. 红灯
2. 绿灯
3. 黄灯
转移:
[初始状态] 红灯
计时器达到预设时间 -> [转移] -> 绿灯
[状态] 绿灯
计时器达到预设时间 -> [转移] -> 黄灯
[状态] 黄灯
计时器达到预设时间 -> [转移] -> 红灯

在这个例子中,每个状态都有一个转移,触发条件是“计时器达到预设时间”。这个状态机会无限循环,没有终止状态。

状态机可以是确定性(deterministic)或非确定性(nondeterministic)的。在确定性状态机中,给定当前状态和输入,下一个状态是唯一确定的,上面的交通灯例子就是一个确定性状态机。而在非确定性状态机中,给定当前状态和输入,下一个状态可能有多个。

2、不变性原理

执行(execution):一个状态机的执行描述了状态机可能采取的一系列步骤。一个执行是一个(可能无限的)状态序列,它具有以下属性:

  • 它从初始状态开始;
  • 如果q和r是序列中的两个连续状态,那么存在从q到r的转换。

一个状态如果出现在某个执行中,就称该状态为可达的(reachable)。

保持不变性(Preserved Invariant):在状态机的运行过程中始终保持的某种属性或条件。换句话说,无论状态机如何从一个状态转移到另一个状态,这个属性或条件都不会改变。可以采用形式化的语言描述如下:

一个状态机的保持不变性是一个关于状态的谓词P
如果P(q)对某个状态q为真,并且存在从状态q到状态r的转换,那么P(r)也为真。

不变性原理(Invariant Principle):如果一个状态机的保持不变性对初始状态为真,那么它对所有可达状态皆为真。

通常使用归纳法来证明保持不变性。具体来说,首先证明在开始状态下,保持不变性是成立的,然后,证明如果在某个状态下保持不变性成立,那么在所有可能的下一个状态下,保持不变性也会成立。

不变性原理实际上就是归纳原理的一种为状态机方便使用的形式。证明一个谓词在开始状态为真是归纳的基础情况,而证明一个谓词是保持不变性则对应于归纳的步骤。

保持不变性在证明状态机的正确性和稳定性时非常有用。通过证明某个属性或条件是保持不变的,可以确保状态机在所有可能的状态转换中都能正确地工作。

3、偏序正确性和终止性(Partial Correctness & Termination)

本书在没有对偏序(Partial Order)进行任何介绍的情况下,提到了程序验证中的偏序正确性,我觉得还是应该补充一些说明。

3.1 集合论中的偏序与全序(扩展)

偏序(Partial Order):偏序是某种二元关系,首先,偏序是针对某个集合,然后,它是对集合中元素之间的某种顺序的描述。偏序扩展了我们对“小于”或“等于”的普通理解,并可以应用于许多不同类型的数学对象。一个偏序通常表示为符号“≤”(特别注意,该符号在这里并不是“小于或等于”的意思),满足以下三个性质:

  1. 自反性(Reflexivity): 对于集合中的每个元素a,都有a ≤ a。
  2. 反对称性(Antisymmetry): 如果a ≤ b且b ≤ a,那么a = b。
  3. 传递性(Transitivity): 如果a ≤ b且b ≤ c,那么a ≤ c。

在偏序关系中,并不是集合中的每一对元素都必须是可比较的。如果集合中的每一对元素都是可比较的,那么这个关系就是一个全序关系。

全序(Total Order):也称为线性序(Linear Order),是偏序的一种特殊情况,其中集合中的任意两个元素都是可比较的。这意味着对于任何两个元素a和b,要么 a ≤ b,要么b ≤ a,这就是全序性(Totality)。全序关系满足偏序的所有性质,并增加了全序性。

偏序的例子:幂集中的包含关系

假设集合S = {a, b} ,其幂集(即所有可能的子集的集合):P(S)={∅,{a},{b},{a,b}}

对于P(S)的任意子集A和子集B,当且仅当A是B的子集时,A与B之间的包含关系A ⊆ B就是一个偏序。

可以看到这个关系满足偏序的三个性质:

1. **自反性**: 对于任何子集A,A ⊆ A。
2. **反对称性**: 如果A ⊆ B且B ⊆ A,那么A = B。
3. **传递性**: 如果A ⊆ B且B ⊆ C,那么A ⊆ C。

这个关系是偏序但不是全序,因为并不是集合中的每一对元素都是可比较的。例如,对于P(S)的子集{a}和{b},它们之间就没有这种包含关系。

全序的例子:整数集合中的自然顺序关系

在整数集合中,对于任何整数a和b,要么a ≤ b,要么b ≤ a,这里的“≤”表示“小于或等于”
这里的“小于或等于”关系就是一个全序关系的例子

3.2 程序验证中的偏序正确性和终止性(扩展)

集合论中的偏序关系可以扩展到计算机程序验证之中,计算机程序可以抽象为状态机模型,偏序关系可以用来描述程序状态之间的顺序关系,而程序算法就是计算偏序关系的过程。

偏序正确性(Partial Order Correctness):即过程(process)如果有最终结果的话,这些结果必须满足系统要求。换句话说,如果算法终止,则其输出是正确的。偏序正确性是一种程序验证的方法,它的目标就是要证明在所有可能的执行顺序下,程序都能正确地执行。但是,偏序正确性并不保证算法一定会终止。一个偏序正确的算法可能会陷入无限循环。

偏序正确性通常涉及到以下两个步骤:

  1. 偏序建模:首先,需要将程序的行为建模为一种偏序关系。在这个模型中,每个事件都被表示为一个点,如果事件A在事件B之前发生,那么就有一条从A到B的边。这种模型通常被称为“偏序图”或“事件图”。不难发现,偏序建模可以用来建立程序的状态机模型。
  2. 偏序验证:然后,我们需要验证在所有可能的执行顺序下,程序都能满足它的要求。

偏序正确性通常使用不变性原理来证明。

终止性(Termination):终止性是指过程总是会产生最终的结果。换句话说,算法总是在有限的步骤内结束。它并不关心算法的输出是否正确,只关心算法是否终止。

终止性一般使用良序原理证明。

将偏序正确性和终止性结合起来,就可以得到算法的完全正确性(Total Correctness)。一个完全正确的算法不仅在终止时给出正确的结果,而且总是在有限的步骤内终止。

3.1 快速求幂

本书以快速求幂算法为例,介绍了使用不变性原理来证明偏序正确性的证明过程。

计算一个数的幂,例如计算a的b次方,最直接的方法是将a乘以自己(b-1)次。但有一种更高效的方法叫做“快速求幂”,它可以用更少的乘法操作来得到结果。

这个算法的基本思路是这样的:

  1. 使用三个寄存器(可以想象为三个存储空间):x, y, 和 z。开始时,x存储数值a,y存储数值1,z存储数值b。其中,a为实数,b为非负整数。即
  2. 然后开始不断地检查z的值。如果z为0,算法结束,此时y的值就是我们要的答案。
  3. 如果z是偶数,更新x为x的平方,并将z减半。
  4. 如果z是奇数,将y更新为y乘以x,然后再更新x为x的平方,并将z减去1后再减半。
  5. 重复上述步骤,直到z为0。

建立快速求幂的状态机模型如下:

  1. 状态: 这个机器的每个状态都是由三个数值组成的:x, y, 和 z。即(x,y,z),其中x∈ℝ,y∈ℝ,z∈ℕ。
  2. 初始状态: 当我们开始时,x是a,y是1,z是b。即(x,y,z)=(a,1,b)。
  3. 状态转移规则: 这个机器会根据z的值来决定下一步怎么做。
    • 如果z是偶数,x会变成x的平方,而z会减半。即
      ( x , y , z ) → ( x 2 , y ,求商( z , 2 )) (x,y,z)→(x^2,y,求商(z,2)) xyzx2y,求商(z2))
    • 如果z是奇数,y会变成y乘以x,x会变成x的平方,而z会减1后再减半。即
      ( x , y , z ) → ( x 2 , x y ,求商( z , 2 )) (x,y,z)→(x^2,xy,求商(z,2)) xyzx2xy,求商(z2))

保持不变式P((x,y,z))可以描述为:z为非负整数,且y乘以x的z次方始终等于a的b次方。即
z ∈ N    A N D    y x z = a b z ∈ ℕ \ \ AND \ \ yx^z = a^b zN  AND  yxz=ab

书中采用了归纳法来证明该保持不变式P成立,然后使用不变性原理推导出偏序正确性(z=0时,程序终止,其结果是正确的)。

这个算法的优势在于它的速度。每一步的计算都伴随着寄存器z中所保存的数值的变化(减半),z的初始值为b,不难发现该算法的操作次数大约是b的二进制长度。

3.2 派生变量

通常,为了进行状态机分析,方便理解算法的行为,往往会引入一些与状态相关的变量,这一类变量被称为“派生变量”(Derived Variables)。

在快速求幂算法中,寄存器z中所保存的数值随着状态的转移不断减小,直到变为0,可以将寄存器z所保存的数值看作是状态机的规模,这就是一个派生变量。

派生变量可以定义为:f: 状态 → ℝ,即派生变量f 是一个将状态机的每个状态映射到一个实数的函数。
如果q和r是序列中的两个连续状态,可以定义4种性质的派生变量如下:

  1. 严格递减( strictly decreasing):随着状态的转移,派生变量小于在上一个状态中的值。即
    q → r    I M P L I E S    f ( r ) < f ( q ) q→r \ \ IMPLIES \ \ f(r) < f(q) qr  IMPLIES  f(r)f(q)
  2. 弱递减( weakly decreasing):随着状态的转移,派生变量小于等于在上一个状态中的值。即
    q → r    I M P L I E S    f ( r ) ≤ f ( q ) q→r \ \ IMPLIES \ \ f(r) ≤ f(q) qr  IMPLIES  f(r)f(q)
  3. 严格递增( Strictly increasing):随着状态的转移,派生变量大于于在上一个状态中的值。即
    q → r    I M P L I E S    f ( r ) > f ( q ) q→r \ \ IMPLIES \ \ f(r) > f(q) qr  IMPLIES  f(r)f(q)
  4. 弱递增( weakly increasing):随着状态的转移,派生变量大于等于在上一个状态中的值。即
    q → r    I M P L I E S    f ( r ) ≥ f ( q ) q→r \ \ IMPLIES \ \ f(r) ≥ f(q) qr  IMPLIES  f(r)f(q)

如果状态机的派生变量f的取值范围是ℕ且严格递减,那么从状态q开始的任何执行的长度最多为f(q)。
书中翻译有误,这里的状态q并不一定的初始状态。
这个定理提供了一个工具来证明状态机的终止性。如果可以为状态机定义一个严格递减的派生变量,其值域为非负整数,那么就可以确定状态机在有限的步骤内终止。

3.3 基于良序集合的终止性

上一节的结论可以直接推广到派生变量取值为良序集合的情况。
如果状态机存在严格递减的派生变量,其值域是一个良序集合,那么就可以确定状态机在有限的步骤内终止。

3.4 东南方向跳跃的机器人

考虑一个在非负整数象限中移动的机器人,如果机器人位于与原点(0, 0)不同的某个位置(x, y),机器人必须移动,并且只能采用下面两种移动方式:

  • 向西移动一个单位距离,即从(x, y)移动到(x-1, y),其中x > 0,或
  • 向南移动一个单位距离并向东任意跳跃,即从(x, y)移动到(z, y-1),其中z ≥ x。

其中x、y、z均为非负整数;
可以将这个机器人看作一个非确定性状态机,需要证明终止性断言:机器人最终总会停在原点。

这个断言可能看起来很明显,但它实际上与基于非负整数值变量的终止性有所不同。这是因为,即使知道机器人在位置(0, 1),也无法确定机器人被困住的时间。它可以通过下一步移动到远东的一个遥远点来延迟被困的时间。这排除了使用定理 6.3.2 来证明终止性。

可以引入了一个派生变量v,定义
v ( x , y ) = y + x x + 1 v(x, y) = y + \frac{x}{x + 1} v(x,y)=y+x+1x

可以证明,v的值域℣是一个良序集合,无论机器人如何移动,派生变量v的值都会逐渐减少,即v是严格递减的派生变量,所以可以断定机器人一定会停止移动,当x=0且y=0时,z取最小值0,故机器人一定会停在原点(0,0)。

3.5 证明v的值域℣是一个良序集合(扩展)

本书的第2.4节有证明v的值域℣是一个良序集合的证明过程,之前做笔记时觉得不太重要就没有记录,这里再补充一下这个证明过程:

回顾一下良序集合的概念,一个集合如果满足以下两个条件,就被称为良序集合:

  1. 集合中的任何两个元素都可以比较大小,即对于集合中的任意两个元素a和b,要么a小于等于b,要么b小于等于a。
  2. 集合中的任何非空子集都有最小元素。

首先
令 f ( x ) = x x + 1 , 其中 x ∈ N 令f(x) = \frac{x}{x+1},其中x∈ℕ f(x)=x+1x,其中xN
定义集合ℱ为f的值域,ℱ中的元素如下:
0 1 , 1 2 , 2 3 , 3 4 , . . . , x x + 1 , . . . \frac{0}{1}, \frac{1}{2}, \frac{2}{3}, \frac{3}{4}, ..., \frac{x}{x+1}, ... 10,21,32,43,...,x+1x,...

显然,集合ℱ是良序集合,对于ℱ的任何非空子集,其最小元素就是分子最小的那个x/(x+1)。

根据v的定义
v ( x , y ) = y + x x + 1 v(x, y) = y + \frac{x}{x + 1} v(x,y)=y+x+1x
v的值域℣可以由集合ℱ中的元素f加上任意非负整数y来构建得到。
显然,集合℣中的任何两个元素都可以比较大小。

给定℣的任意非空子集V,查看使(y+f)∈V,f∈ℱ成立的所有非负整数y所构成的集合Y。Y是一个非空的非负整数集合,根据良序原理(Well Ordering Principle),集合Y存在最小元素,设该最小元素为y0=min(Y)。

根据y0的定义,存在某个f∈ℱ,使得(y0+f)∈V。
令所有使得(y0+f)∈V成立的分数f所构成的集合为F,显然,F是ℱ的一个非空子集,而且由于ℱ是良序的,集合F同样存在最小元素,设该最小元素为f0=min(F)。
显然,y0+f0就是V的最小元素。

所以,v的值域℣是一个良序集合。

4、稳定的婚姻

4.1 Gale-Shapley 算法

Lloyd Shapley 和 David Gale 在1962年提出了一种被广泛引用的算法,通常被称为“Gale-Shapley 算法”或“稳定婚姻问题算法”(Stable Marriage Problem Algorithm)。

本书的作者将这个算法的过程进行了仪式化的改编,试图表现得更为生动形象,并将该算法称为“配对仪式”(The Mating Ritual)。

问题定义
假设有一个男性集合M和一个女性集合W,两个集合中的人数相同,都为n。
集合M中每个男性都各自有一张对集合W中所有女性的偏好列表(按照心仪程度从高到低排列),同样,集合W中的每个女性也都各自有一张对集合M中所有男性的偏好列表。
现在需要达成一个目标,为集合M中所有男性和集合W中的所有女性创建稳定婚姻关系,最终使得没有任何不是配偶的两个人(一个男性和一个女性)更喜欢彼此而不是他们配偶。

稳定婚姻定义
对于男性集合M与女性集合W,如果建立的婚姻关系中不存在以下情况:某个男性m和某个女性w不是配偶,但是男性m更喜欢女性w而不是他当前的配偶,并且女性w也更喜欢男性m而不是她当前的配偶;
则认为建立了在M与W上的婚姻稳定(stable matching)。

Gale-Shapley 算法

  1. 每个男性都向他们各自的偏好列表中排名最靠前的女性求婚。
  2. 每个女性根据各自偏好列表的排名情况,在所有求婚者中选择排名最靠前的那个男性,并暂时与那个男性“订婚”。然后,拒绝所有其他求婚者。
  3. 被拒绝的男性将拒绝他们的女性从自己的偏好列表中删除,然后向新偏好列表中排名最靠前的女性求婚。
  4. 每个女性依然根据各自偏好列表的排名情况,在她现在的“订婚”对象和新的求婚者中选择她最喜欢的那个男性,并与他订婚,并拒绝其他所有求婚,包括之前与她订婚的男性(如果该男性被超过的话)。
  5. 重复这个过程重复,直到每一个男性都有了一个“订婚”。

性质

  1. Gale-Shapley 算法总是会终止;
  2. Gale-Shapley 算法总是会产生稳定婚姻;
  3. 当Gale-Shapley 算法以男性开始时,每个男性都会得到他可能得到的最佳配偶,而每个女性都会得到她可能得到的最差配偶。反之亦然,如果以女性开始,那么每个女性都会得到她可能得到的最佳匹配。

状态机模型

  1. 状态(States):全部男性和全部女性的订婚状态,以及全部男性偏好列表上的名单剩余状态。
  2. 转移(Transitions):算法中的步骤1~4。
  3. 开始状态(Start State):状态机的运行通常从一个特定的开始状态开始。
  4. 终止状态(Terminating States):每一个男性都有了一个“订婚”。

4.2 Gale-Shapley 算法总是会终止

如果所有的男性都已经与他们当前名单上的第一个女性“订婚”,那么算法就已经结束了。

如果没有结束,那么当前至少有一个女性被多于一个的男性求婚,这意味着至少有一个男人会被拒绝,并且他将从自己的偏好列表中划掉这个的女性的名字。

也就是说,如果算法没有结束,则每天都有女性从偏好列表上被划掉,每个男性的偏好列表都是有限的,总共只有n²个名单条目(n个男性,每个偏好列表上n个女性),那么这个过程最多只能持续n²天。之后,所有的名单条目都会被划掉,仪式必然会结束。

4.3 Gale-Shapley 算法总是会产生稳定婚姻

假设存在一个不稳定的配对,其中男性A更喜欢女性B而不是他当前的配偶C,并且女性B也更喜欢男性A而不是她当前的配偶D。

但是,这种情况是不可能的,因为:

  • 如果男性A更喜欢女性B,那么男性A会在向他的配偶C求婚之前向女性B求婚。
  • 而女性B的配偶是D,说明女性B一定拒绝了男性A的求婚,那么这意味着女性B更喜欢她的当前配偶D。

这与我们的假设矛盾,即男性A和女性B互相更喜欢。因此,假设不成立,不存在这样的不稳定配对,Gale-Shapley 算法总是会产生稳定婚姻。

书中通过构造出保持不变式来给出证明,这个保持不变式也能用于前面的反证法,书中给出的后续证明过程比较繁琐,不再赘述。
定义以下命题 P:对于任意女性w和任意男性m,如果w被m从他的偏好列表中划掉,那么比起m来,w一定有一个她更喜欢的追求者。

P是“配对仪式”中的一个保持不变式。

4.4 求婚的一方更有利

4.4.1 稳定婚姻的配对方案并不唯一

首先,Gale-Shapley 算法最终产生了稳定婚姻,但是稳定婚姻的配对方案并不是唯一的,要证明这一点,可以通过构造一个例子来说明:

有两名男性:A和B,以及两名女性:X和Y。

他们的偏好列表如下:

  • A的偏好:X > Y
  • B的偏好:X > Y
  • X的偏好:B > A
  • Y的偏好:A > B

如果按照Gale-Shapley算法,以男性为主导(男性向女性求婚)进行匹配:

  1. A和B都首先向X提议,因为X是他们的首选。
  2. X更喜欢B,所以她接受了B的提议并拒绝了A的提议。
  3. A随后向Y提议,Y接受了。

所以,以男性为主导的Gale-Shapley算法得到的稳定婚姻是:B-X 和 A-Y。

但是,不难发现A-Y和B-X也是一个稳定的匹配。因为没有男性和女性都更喜欢彼此超过他们当前的配偶。

事实上,A-Y和B-X这个配对方案可以通过以女性主导(女性向男性求婚)的Gale-Shapley算法来得到。

因此,这样就找到了两种不同的稳定婚姻配对方案:A-X和B-Y,以及A-Y和B-X。

这个例子证明了稳定婚姻的配对方案并不是唯一的,基于这个结论,可以进行如下定义:

  • 可行配偶( feasible spouse):如果两个人能够在某个稳定婚姻中成为配偶,那么其中一个人就是另一个人的可行配偶。
  • 最佳配偶( optimal spouse):某人在所有可行配偶中最喜欢的那个。
  • 最差配偶( pessimal spouse):某人在所有可行配偶中最不喜欢的那个。
4.4.2 “配对仪式”中的一个保持不变式

稍微改写了一下书中的证明过程:
定义命题 Q:对于任意女性w和任意男性m,如果w被m从他的偏好列表中划掉,那么w一定不是m的可行配偶。

证明Q是Gale-Shapley 算法中的一个保持不变式:

  1. 在开始状态时,没有任何女性被任何男性从偏好列表中划掉,此时Q为真。
  2. 假设Q在状态q时成立,并且在q的下一个状态r中,某个女性A将被某个男性B从他的偏好列表中划掉,如果能够证明当A被B划掉后Q仍然为真,那么Q就是一个保持不变式。
  3. 在状态r中,当A被B从偏好列表中划掉时,说明A有一个她更喜欢的求婚者,假设该求婚者为T。
  4. 在状态q中,即在A被B从偏好列表中划掉前,由于命题Q成立,被T划掉的女性都不是T的可行配偶,那么T的所有可行配偶仍然在他的偏好列表上,并且A位于T当时的偏好列表的最顶部。
  5. 所以,无论A是不是T的可行配偶,比起T的所有其他的可行配偶来,T都更喜欢A。
  6. 假设存在某个稳定婚姻配对,在该配对方案中A可以与B结婚,那么T必须与另一个可行配偶(一个在他的偏好列表中排在A之后的女性)结婚,这使得A和T更喜欢彼此而不是他们配偶,与稳定婚姻的定义矛盾,假设不成立。
  7. 所以,A不能与B结婚,也就是说,A一定不是B的可行配偶。
  8. 所以,Q在状态r中依然成立,Q是Gale-Shapley 算法中的一个保持不变式得证。

另一种证明:

假设在Gale-Shapley 算法中的某个时刻,某个女性A即将被某个男性B从他的偏好列表中划掉,说明A有一个她更喜欢的求婚者,假设该求婚者为T,说明A位于T当前的偏好列表最顶部。
所以无论A是不是T的可行配偶,比起T的所有其他的可行配偶来,T都更喜欢A。

假设存在某个稳定婚姻配对,在该配对方案中A可以与B结婚,那么T只能与一个A以外的女性S结婚,此处分为两种情况:

  1. A是T的完整偏好列表中的第1人,那么T只能与一个在他的偏好列表中排在A之后的女性结婚,这使得A和T更喜欢彼此而不是他们配偶,与稳定婚姻的定义矛盾,假设不成立。
  2. A不是T的完整偏好列表中的第1人,那么T必须与一个在他的偏好列表中排在A之前的的女性结婚(假设为女性S),否则将使得A和T更喜欢彼此而不是他们配偶,与稳定婚姻的定义矛盾,导致假设不成立。显然,女性S的经历和女性A是一样的,在这个假定的稳定婚姻配对方案中,女性S成为了一个在“配对仪式”中将她划掉的人(男性T)的配偶。由于每个人的偏好列表都是有限的,以此类推,最终一定会出现一个女性A’和一个男性T’,A’是T’的完整偏好列表中的第1人,而T’只能与一个在他的偏好列表中排在A’之后的女性结婚,而A’成为了一个在“配对仪式”中将她划掉的人(在A’的偏好列表中排在T’之后,假设为男性B’)的配偶,使得A’和T’更喜欢彼此而不是他们配偶,与稳定婚姻的定义矛盾,导致假设不成立。

所以,A不能与B结婚,也就是说,A一定不是B的可行配偶,Q在Gale-Shapley 算法中一直为真。

4.4.3 证明求婚的一方更有利

证明

  1. 前面已经证明当一个女性从一个男性的偏好列表中被划掉时,这意味着她不是这个男性的可行配偶。
  2. 如果在Gale-Shapley 算法结束时,男性A与女性B匹配,那么在男性A的偏好列表中,排名高于B的所有女性都被划掉了。因此,B是A所有可行配偶中的最佳选择,即B是A的最佳配偶。
  3. 同样,由于A比其他所有可行配偶都更喜欢B,如果B与她更不喜欢的其他男性匹配,与稳定婚姻的定义矛盾,因此,A必须是B所有可行配偶中的最差选择,即A是B的最差配偶。

结论:以男性为主导的Gale-Shapley 算法确保每个男性都与他的最佳配偶匹配,而每个女性都与她的最差配偶匹配,求婚的一方更有利。

4.5 应用

Gale-Shapley 算法在许多实际应用场景中都有广泛的应用。例如,它被可以用于为毕业的医学生分配他们的第一份医院实习工作,也可以被应用于为学生分配学校,还可以被应用于大型分布式互联网服务中为用户分配服务器,此外,Gale-Shapley 算法确实被用在了很多相亲网站之中。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机科学导论是计算机科学专业的入门课程,它涵盖了计算机科学及其相关领域的基本概念、基本理论和基本技术。以下是一些学习笔记,希望对您有所帮助: 1. 计算机科学的定义: 计算机科学是研究计算机及其在信息处理的应用的学科,它涉及计算机硬件、软件、算法、数据结构、数据库、网络、人工智能等方面的知识。 2. 计算机科学的历史: 计算机科学的发展经历了多个阶段,从最初的机械计算器到现代的超级计算机,计算机科学的发展一直在推动着人类社会的进步。 3. 计算机科学的基本概念: 计算机科学的基本概念包括:二进制、位、字节、字符、编码、算法、数据结构、程序、操作系统、编译器等。 4. 计算机科学的基本理论: 计算机科学的基本理论包括:图灵机、计算复杂性理论、自动机理论、信息论等。 5. 计算机科学的基本技术: 计算机科学的基本技术包括:计算机网络、数据库、人工智能、图形学、软件工程、计算机安全等。 6. 计算机科学的研究方法: 计算机科学的研究方法包括:实验研究、理论研究、模拟研究、仿真研究等。 7. 计算机科学的应用领域: 计算机科学的应用领域包括:信息技术、通信技术、金融、医疗、教育、交通、娱乐等。 以上是一些计算机科学导论的学习笔记,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值