随机数 如何用确定性的计算机模拟非确定性? 确定性的计算机:底层执行的是确定的指令序列 (f语句中有条件,但也是确定的,是分支) 一用函数生成随机数(实际上是伪随机数) ■从种子值开始,计算出一个“随机”数; ■如果还需要,就用上一个随机数反馈给生成函数,生成 下一个随机数 ■种子值和随机数产生器决定了所产生的随机数的数值 11
11
随机数 如何用确定性的计算机模拟非确定性? 一用函数生成随机数(实际上是伪随机数) Python库random提供了一些伪随机数生成函 数: 库被加载时的日期和时间用以导出种子值; 所以,程序每次运行时种子值都是不同的 ■ randrange():生成指定范围(类似range)内的一个 整数(在足够多的尝试下,可以看到每个数出现的频率 是相当的,即均匀分布) random():生成[0,1)间的一个浮点数 12
12
确定实现随机 ■投飞镖 x randrange(0,10) [0,10] 0.7
0 0.7 1
用random模拟输赢 设发球人获胜概率是prob(在[0,1]区间) 程序中显然需要这样的代码: if发球者胜了本回合: score score 1 并且要使该条件为真的情况,使用概率prob -用random函数模拟: if random()prob: #用”<“是因为随机数产生器可以产生0,但无法产生 1 score score 1 14
14
自顶向下设计 对复杂问题常采用自顶向下设计: 将对一般问题的解决方案用若干个较小问 题来表达 一再对较小问题用同样的方法分解 - 直至小问题很容易求解 将所有小问题的解合并,就得到大问题的 解 15
15