模型假设:
一个女生愿意在一段时间中和一个男生开始一段感情
N个男生追求这个女生,需要女生根据自己条件判断
在追求者中,男生有好有坏,任何两个男生都可以比较,且没有相等情况
1 2 3 … . N (编号数字越大越表明这个男生越适合这个女生)。
N种
在什么情况之下开始答应男孩子的追求。
实际复杂的问题,建模要简单化,做出合理建议:
N个男生以不同的随机顺序向女生依次表白
面对表白的男生,女生只能做两种选择:接受 拒绝
任一时刻,女生最多只能跟一位男生交往
已经被拒绝的男生不会再次追求女生
女生什么时候愿意接受。
建立模型:
1、有男生像女生进行表白,这个女孩接受 1/N
2、聪明的女生想办法:
先和前面几位男生玩一玩,试试水深,打指模请男生们的底细,在进行考虑
最先表白的m个人都会拒绝,——最好的男生是哪位,他的底细
以后遇到男生表白,男生的底细超过前m个人中最好的那一个,女生接受表白
(先拒绝前m个,不管这些人的好坏,从m+1开始,一旦有比前面m个人好,就选择)
P时最好的男生(m小于P小于N)
前P-1个人中最好的人在m中,m/(P-1)
当数字N出现在第P个位置,(m<=N),如果使上述的第一选择接受
遇到的是N,排列的方式要满足的条件:
N在第P个位置
从m+1到P+1的位置数字要比前m个位置的最大数字要小
m=N/e(e=2.718) 1/e=37%
拒绝前m=N/e或N/e+1个追求者
当气候的追求者比前面m个追求者更适合则接受,否则拒绝
import random
import math
person = 30
married = {}
for i in range(1,person+1):
married[i] = 0
top = int(round(person/math.e))
for i in range(1,10001):
white_horse = list(range(1,person+1))
random.shuffle(white_horse)
best_in_k = max(white_horse[1:top_k])
for n in white_horse[top_k]:
if n>best_in_k:
married[n] = married[n]+1
break
else:
married[n] = married[n]+1
print(married)
white_horse = list(range(1,person+1))
print(white_horse)
random.shuffle(white_horse)
print(random.shuffle)