python随机生成20个0~100范围的数字_如何在Python中随机生成递减数字?

8 个答案:

答案 0 :(得分:14)

我会生成一个n个随机数的列表,然后将它们从最高到最低排序。

答案 1 :(得分:3)

很少有事情需要注意。从X > 0开始并在每个步骤中开始的算法从(0,X)获取一个随机数,并用它替换X是不行的。为什么?因为(假设random表现正常)每个步骤中的预期值位于区间(0,X)的中间。这意味着这些数字的序列预计会以0的速度收敛到(1/2)^N。事实上,很容易看出大多数数字接近0,即使是巨大的初始价值。这意味着这些数字的分布并不均匀,这在大多数情况下都是理想的属性。

这是一个主要缺点,即使生成N数字的复杂性为O(N)且(更重要的)内存使用量为O(1)。

另一个解决方案是只取N个随机数并对它们进行排序。虽然这个算法的复杂性是O(N log(N))(或者与底层排序算法的复杂性相同),但是如果我们按顺序放置元素而不是排序,可以将其简化为O(N),这也不错。但内存使用量为O(N) - 我们必须记住所有元素。然而,这些数字将是均匀分布的,这是一个很大的优势!

根据Jon Louis Bentley撰写的论文“Generating sorted lists of random numbers”中的想法,这里的算法可能是最优的算法(至少我知道)并且产生均匀分布的数字:

import math

import random

def generate( min = 0, max = 10, number = 100 ):

start = 0

for i in xrange( number, 0, -1 ):

start = start + math.log( rand

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值