首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyroot和Random随机数生成器的性能

pyroot和Random随机数生成器的性能
EN

Stack Overflow用户
提问于 2020-11-30 02:03:32
回答 1查看 54关注 0票数 1

我希望优化一个简单的给定代码,它生成一个不在给定列表中的随机数(0,1,2)。随机数生成器是从根开始的TRandom3。

代码语言:javascript
复制
def getNumber(noList, randomgen):
    #Fügen Sie hier Ihren Code ein!: ?
    i = randomgen.Integer(3)
    while i in noList:
        i = randomgen.Integer(3)
    return i

它非常基础,只会生成新的数字,直到达到一个允许的数字。

我自己的优化代码如下所示:

代码语言:javascript
复制
def bessereAuswahl(noList):
    return random.choice([elem for elem in [0,1,2] if elem not in noList])

我只是从我的列表0,1,2中删除了所有不允许的数字,并使用random.choice选择了一个元素。

在windows10上运行时,我的性能有所提高,而在linux上运行相同的代码时,我的性能有所下降。

为什么会这样呢?

在linux上有没有隐藏的随机性能损失,或者是在pyroot中的性能提升?

EN

回答 1

Stack Overflow用户

发布于 2020-11-30 02:22:16

因此,这是一个实现和复杂性问题:

random.choice的实现方式为:

代码语言:javascript
复制
The complexity of random.choice(list) is O(log n) where n is the number of elements in the list.

关于第二个答案的更多信息here

而使用Mersenne Twister算法的随机整数生成是O(1),源代码是here

所以答案的第一部分是,渐近的choice更慢。然而,问题是,如果你必须生成一定数量的数字。

因此,如果您必须创建n个数字,并且总集合中允许的数字集合相对较小,则重试的数量可能会比单个绘制运行时增长得更多

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65063363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档