最大的麦穗的两个解37和13
import numpy as np
# 数学证明k=n/e=n/2.7,也即是说k=0.37n,这里n=100,k=37
# 理论上来讲应该在37%作为分界线是最好的,本程序尝试验证这个数,使用正态分布的数据才能验证而平均分布数据不行
def f1(li,index):
# 输入数组和分界,返回这个策略能挑到的那颗麦穗高度
size=len(li)
best=li[0] # 暂存在心中的最大标准
# 拿index作为分界线,前面的只挑不选,后面的看到有超过的就选
for i in range(0,index):
if li[i]>best:
best=li[i]
for i in range(index,size):
if i==size-1:
return li[i]
else:
if li[i]>best:
return li[i]
if __name__ == '__main__':
# tries = 10000
# mydi = {i: 0 for i in range(1, 100)}#键是分界线,值是累计拿到的麦穗的高度之和
#
# for i in range(tries):
# li = np.random.randn(100)
# for index in range(1,100):
# mydi[index]+=f1(li,index)
#
# print(mydi)
# print(max(mydi, key=mydi.get))
# 令人惊讶的是得到13,这里是算能找到的值平均最大的,并不是算能找到最大值的概率最大的
tries = 10000
mydi = {i: 0 for i in range(1, 100)}# 键是分界线,值是最大的麦穗命中次数。拿这个来统计
for i in range(tries):
li = np.random.randn(100)#生成正太分布数组来模拟现实生活的麦穗,而不是平均分布
max_num = max(li)#最大的麦穗高度
for index in range(1, 100):
if f1(li,index)==max_num:#如果这个index分界能命中最大的麦穗,那么就增加一次命中记录
mydi[index]+=1
print(mydi)
key_name = max(mydi, key=mydi.get)
print(key_name)
# 某一次的最大麦穗命中的参考结果
# result={1: 5195, 2: 8362, 3: 11019, 4: 13393, 5: 15656, 6: 17588, 7: 19239, 8: 20816, 9: 22268, 10: 23662, 11: 24952,
# 12: 26041, 13: 27129, 14: 28072, 15: 29007, 16: 30005, 17: 30794, 18: 31487, 19: 32185, 20: 32833, 21: 33516,
# 22: 34024, 23: 34494, 24: 34940, 25: 35317, 26: 35692, 27: 36048, 28: 36324, 29: 36601, 30: 36931, 31: 37146,
# 32: 37286, 33: 37412, 34: 37462, 35: 37487, 36: 37516, 37: 37582, 38: 37522, 39: 37398, 40: 37289, 41: 37134,
# 42: 37001, 43: 36828, 44: 36625, 45: 36363, 46: 36079, 47: 35904, 48: 35646, 49: 35366, 50: 35064, 51: 34742,
# 52: 34388, 53: 34029, 54: 33648, 55: 33272, 56: 32875, 57: 32370, 58: 31898, 59: 31409, 60: 30899, 61: 30389,
# 62: 29891, 63: 29343, 64: 28737, 65: 28190, 66: 27595, 67: 27021, 68: 26410, 69: 25856, 70: 25241, 71: 24561,
# 72: 23834, 73: 23195, 74: 22497, 75: 21751, 76: 21002, 77: 20203, 78: 19504, 79: 18746, 80: 17914, 81: 17087,
# 82: 16339, 83: 15575, 84: 14786, 85: 13942, 86: 13060, 87: 12209, 88: 11296, 89: 10443, 90: 9620, 91: 8731,
# 92: 7788, 93: 6821, 94: 5882, 95: 4990, 96: 4004, 97: 3080, 98: 2097, 99: 1073}
算法中,如何确定分界才能有最大的概率拿到最大的麦穗呢?这时候是37,就是在37之前只看不拔,并且遇到大的就默默在心里记下这个标准。等到过了37之后,一旦遇到比标准大的就马上拔。
但是令人惊讶的是13这个数字。因为虽然37能最大概率得到最大的麦穗,但是13才是的得到麦穗的平均高度最大的那个分界。37就像是富贵险中求,得到最大值的概率是最高的。但是得到13才是稳扎稳打,13虽然得到最大麦穗的概率不高,但是13最有可能得到较大的麦穗,并且这个期望平均下来比37的要好
总结:稳扎稳打追求较大的麦穗选13分界。最有可能得到最大的麦穗选37但是相比13来说风险高容易两极分化。