问题描述
据说来源于苏格拉底。
穿过一片麦田且不能回头更换,如何使得捡到最大麦穗的可能性最大?
策略
假设总共有n个,先拒绝前k个,并记录前k个的最大值max_k,在k之后遇到比max_k更大的麦穗就接受,如果一直没有就选择最后一个麦穗。
程序实现
令n=100
from random import shuffle
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
def cal_prob(n, n_test):
candi = list(range(n)) # 候选麦穗编号0-999对应麦穗实际大小,0号最小
p = [n*[0.0] for i in range(n)] # 每个麦穗编号被选到的频率
for k in range(n): # 拒绝前k个
print('拒绝前' + str(k) + '个麦穗')
for i in