问题的描述
在这里就不赘述了,你能搜到这篇文章,那肯定知道只算法的背景是啥
解决思路
- 男生向还未拒绝其的女生中选出优先级最高的,并向其求婚
- 女生如果没有已经被优先级更高的男生求婚,则答应(女生以后可以反悔)。 如果反之,则拒绝
- 对此步骤进行loop,直到没有求婚发生
这篇文章,讲一个自己实现的GS算法的版本
看过一些博文,比如这篇文章 https://blog.youkuaiyun.com/lonfee88/article/details/6678190
文章使用的代码
上面那篇文章使用的代码是这样的,很清晰。
def find_stable_matching(man_preferences, woman_preferences):
"""
Gale-Shapely Algorithm
:param man_preferences:
:param woman_preferences:
:return:
"""
length = len(man_preferences)
is_man_free = [True] * length
is_woman_free = [True] * length
isManProposed = [[False for i in range(length)] for j in range(length)]
match = [(-1, -1)] * length
while True in is_man_free:
indexM = is_man_free.index(True)
if False in isManProposed[indexM]:
indexW = -1
for i in range(length):
w = man_preferences[indexM][i]
if isManProposed[indexM][w] is False:
indexW = w
break
isManProposed[indexM][indexW] = True
if is_woman_free[indexW] is True:
is_woman_free[indexW] = False
is_man_free[indexM] = False
match[indexM] = (indexM, indexW)
else:
indexM1 = -1
for j in range(length):
if match[j][1] == indexW:
indexM1 = j
break
if woman_preferences[indexW].index

本文对比并精简了Gale-Shapely算法的实现,通过更简洁的代码实现了同样的稳定匹配结果,减少了变量使用和数据交换,更贴近‘延迟接受’算法的精髓。
最低0.47元/天 解锁文章
433

被折叠的 条评论
为什么被折叠?



