【问题标题】:python shuffle algorithm performancepython shuffle算法性能
【发布时间】:2012-03-11 09:08:31
【问题描述】:

我想知道random Python 库/模块中shuffle function 的时间复杂度。是 O(n) 还是小于那个?

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

【问题讨论】:

  • @Alex:考虑到该列表中唯一的库是 collections,我认为这不是 OP 所要求的。
  • @Wooble 这是一个 wiki,所以将来可能不限于collections。 (重读后,似乎这是针对 CPython 的,但至少是一个有趣的参考。它可能会启发某人为 random 和其他库创建一个等效的 wiki 页面)

标签: python performance time-complexity shuffle


【解决方案1】:

您不能在少于 O(n) 的时间内以完全随机的方式对列表进行洗牌。

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

【讨论】:

  • 谢谢!我想我需要自己的随机函数(我猜不是完全随机的)
  • @Saher:你能想出一种比 O(n) 更好的方法来改组列表吗?
  • 我没有想过,但我的意思基本上是为了我正在编写的算法的目的,我可以将前 4 到 5 个项目洗牌并选择第一个,这并不重要.
  • 现在我想多了。没有比 O(n) 更好的方法了,因为您最多只能遇到每个列表元素一次。
  • @Saher:如果你只选择第一个,也许你只需要random.choice()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多