我正在学习随机快速排序算法。我意识到这个算法的运行时间总是表示为“期望运行时间”。
为什么要指定或使用“期望运行时间”?为什么不计算最坏情况或平均情况?
我正在学习随机快速排序算法。我意识到这个算法的运行时间总是表示为“期望运行时间”。
为什么要指定或使用“期望运行时间”?为什么不计算最坏情况或平均情况?
如果一个算法的行为不仅由输入决定,而且还受到随机数生成器产生的值的影响,那么这个算法就是随机化算法。因此,您需要分析预期结果。
最坏情况分析只针对输入进行。
有点晚了,这更像是一条长评论,但我认为这是很重要的补充。任何期望时间为T的算法都可以成为最坏情况下O(T)的算法,马尔可夫不等式告诉我们,如果期望时间为T,则至少有1/2的概率算法将在小于2T的操作次数内完成,因此我们只需运行算法,如果它需要超过2T的操作,我们就停止并重新运行,最多进行log(1/delta)次操作,将给我们一个最多为delta失败概率的时间复杂度O(T*log(1/delta))。但由于对数函数非常小,因此出于所有实际目的,这是一个具有0失败概率的O(T)算法。例如,如果我们选择delta为从可观测宇宙中随机选择2个原子是相同原子的概率,则我们得到log(1/delta)=260,因此我们可以说我们获得了具有0失败概率的O(T)。