【发布时间】:2015-01-02 08:49:29
【问题描述】:
我需要一些帮助来解决我在教科书中发现的以下问题。
sort (array[], nr_of_item)
{
while(true)
i:=value from an n-sided fair dice roll
j:=value from an n-sided fair dice roll
if (i > j)
swap i and j
if (array[i] > array [j])
swap array[i] and array[j]
end while
}
现在,它说它没有描述正确的算法。 但后来他们说:
一段时间后,应该对数组进行排序,并证明如果输入未排序,则对数组进行排序的比较次数为 O(n^3)。
另一个问题是:
验证算法是否会在 O(n) 时间内对数组进行排序
由于 i 和 j 的随机性,我真的无法理解您如何证明这一点。
【问题讨论】:
-
我猜这是一个概率事件。随着迭代次数的增加,数组未排序的概率降低,可能存在渐近关系。
-
但是在这里你的循环运行了无限时间,我的意思是什么会停止或破坏你的 while() ?
-
这并不是要停止。教科书中给出的算法是错误的,因为它永远不会停止。但这两个问题应该还是可以回答的。