假设有n个女生喜欢你(做梦还是可以的哈)。你该如何选择出其中颜值最高的呢?当然,这你说的n个女生不是非诚勿扰那种n个女生同时出现在你面前,这样的话你一下子就能找出颜值最高的那个。
我们假设的有n个女生依次排着队向你表白()。
你有两种选择,你如果拒绝了当前向你表白的这个,她就和你无关了。你在之后可能遇到更好看的,也许再也遇不到更好看的了。另一种选择是你接受了这个女生的表白,那么之后的女生就和你没关系了,她们中间或许有更好看的,也许还有更好看的了。
一般人的想法是,n个女生里面有一个最好看的,那么只能随机选择啊,选择出最好看的女生的概率就是1/n啊。
(说到这里我想起了我之前做过的一个颜值打分器:
其实不然,学过概率论和数理统计的人就有了新的思路。
正确的方法是,先和前k个女生接触一下,不管漂亮与否,果断拒绝。记住她们中间颜值最高的那个。然后从k+1个女生开始,如果颜值比之前那个颜值最高的女生还高,就马上接收,否则就拒绝。
这样的话你选择的女生的颜值会比你盲目选择高很多。
那么这个k的值应该是多少呢?如果从k太小了,那么你记住的前k个女生中最漂亮的就没有啥比较意义了。如果k太大,那也不行啊。你记住的最好看的女生固然是颜值很高的,但是你之后的选择范围就很小了啊。
现在,我们就用python模拟的方法找出最合适的k的值。
首先,我们假设有1000个女生喜欢你()。
先用随机数生成器生成这1000个女生的颜值,颜值的范围在0--10000之间。然后添加在一个列表里面。
这些
random_list = []#随机数生成女生的颜值
for i in range(1000):
random_list.append(random.randint(1, 100))#添加女生的颜值1--1000
随后,我们定义一个函数,作用是找出前k个女生中颜值最高的那个。
def getMaxBase(number, random_list):
return max(random_list[:number])
接下来,就模拟之前设定好的选择方法。从第k+1个女生开始选择,里面有一个if条件判断程序,当当前这个女生的颜值高于前k个女生中最高的那个时。就返回,否则就判断下一个。知道判断到了最后一个女生。
def getMaxGuess(number):
max_guess = getMaxBase(number, random_list)#前面的Number个数中最大的数
for i in range(number,1000):
if (random_list[i] >= max_guess or i == 999):
max_guess1 = random_list[i]
break
return max_guess1
最后,需要做一个for循环,用来模拟当k从1--k时,在哪里选择的效果最好。
for j in range(1,girl_num):#从第j个女生开始选择
now_rank=getMaxGuess(j)
girls_rank.append(now_rank)
我们可以得出结论。如图所示,红线表示的是k取什么值的时候选择的女生颜值。起伏不定的蓝色的线表示我们用随机数生成器生成的女生颜值。在第37%开始正式选择,效果是最好的,当然,这只是我进行了一次模拟,效果没有想象中那么明显,如果是迭代很多次,然后把很多次模拟的数据综合到一起,我想肯定会明显很多。
最后,祝愿大家都能找到合适的另一半
图片来源:百度图片