【问题标题】:What is the average time complexity of Bogosort?Bogosort 的平均时间复杂度是多少?
【发布时间】:2013-11-09 17:01:16
【问题描述】:

我听说 Bogosort 的行为没有上限。但是,我从未听过任何人谈论它的平均行为。这是一项愚蠢的任务,但不切实际的思想实验仍然是一种很好的实践,尽管它们可能不切实际。

我想说的是,每个词都是:

P(x==y)*P(x!=y)^(k-1)
    = 1/n * (1-1/n)^(k-1)
    = (n-1)^(k-1) / n^k

其中 k 为 0 或更大。我知道该系列是收敛的,因此我们可以找到复杂性的有限到有限关系(与最坏情况的行为不同,其他人出于挫败感试图将其写为 O(infinity))无限的功能。)

谁能解决这个问题?还是没有无限和就无法写出或逼近的复杂度?

【问题讨论】:

  • 它就在维基百科页面上...
  • 你是对的,当然,我不认为它会有一个广泛的页面,或者我只是用谷歌搜索它。

标签: sorting complexity-theory time-complexity


【解决方案1】:

有一种更直接的方法可以做到这一点。 Bogosort 通过随机排列元素并在结果排列被排序时终止。有n!数组元素的可能排列(假设它们都是不同的)并且只有其中一个被排序。因此,输入的均匀随机排列被排序的概率由 1 / n! 给出。使用概率的标准结果,这意味着,根据预期,在我们生成排序排列之前将发生的排列数是 n!。这意味着 Bogosort 的预期运行时间是 Θ(n · n!),因为我们执行 n!平均随机排列,每个排列都需要时间 Θ(n) 来完成(以及 Θ(n) 时间来检查)。

如果您想对此主题进行正式的数学阐述,请考虑查看文章 Sorting the Slow Way,该文章分析了 Bogosort 和其他相关排序。

希望这会有所帮助!

【讨论】:

  • 确定随机排列未排序平均需要 O(1) 时间。虽然排列本身仍然是 O(n),但如果你做一个 Fisher Yates,你可以在第一个反转出现在第 k 步时尽早放弃排列。这再次使您在 O(1) 生成和拒绝部分的、未排序的排列。
  • @rrenaud- 这是一个很好的观点。我假设我们没有尝试优化 bogosort,因为它是 bogosort。 :-)
  • 我只是在重温这个; “Sorting the Slow Way”链接已失效,但在 Google 上搜索 "sorting the slow way" filetype:pdf 会出现不少镜像。现在,this is the first result。再次感谢@templatetypedef!
猜你喜欢
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-24
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
相关资源
最近更新 更多