2012-02-21 70 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