2012-02-21 62 views
8

我想知道Python库/模块random中的shuffle function的时间复杂度。它是O(n)还是比它低?蟒蛇洗牌算法的性能

是否有一个网站显示属于Python库的函数的时间复杂性?

+1

对于第二个问题 - http://wiki.python.org/moin/TimeComplexity – 2012-02-21 02:11:37

+0

@Alex:考虑到该列表中唯一的库是'collections',我想它不是OP所要求的。 – geoffspear 2012-02-21 02:36:56

+0

@Wooble这是一个维基,因此未来可能不会仅限于“集合”。 (在重新阅读时,它看起来像是CPython,但至少有一个有趣的参考文献,它可能会激励某人为'随机'和其他库创建一个等同的wiki页面) – 2012-02-21 05:05:33

回答

13

您不能以小于O(n)的完全随机方式对列表进行整序。

implementation of random.shuffle()使用Fisher-Yates shuffle algorithm,这很容易看作是O(n)。

+0

谢谢!我想我需要我自己的随机函数(不完全是随机的,我猜) – 2012-02-21 02:09:38

+0

@Saher:你甚至可以设想一个方法来洗牌比O(n)更好的列表吗? – geoffspear 2012-02-21 02:39:02

+0

我没有想到通过,但我的意思是基本上为我的目的,我正在写的算法我可以只洗牌前4到5项,并选择第一个,这并不重要。 – 2012-02-21 03:39:49