【发布时间】:2012-02-24 11:17:52
【问题描述】:
我正在阅读《算法简介》一书,第二版,关于中位数和阶数统计的章节。还有一些关于随机和非随机选择算法的问题。
问题: 给定一个无序整数数组,找出数组中的第 i 个最小元素
一个。 Randomized_Select 算法很简单。但我无法理解解释它的工作时间的数学。是否有可能在不进行深度数学的情况下以更直观的方式来解释这一点?至于我,我认为它应该适用于 O(nlog n),在最坏的情况下它应该是 O(n^2),就像快速排序一样。在avg randomPartition 中返回靠近数组中间的位置,并且每次调用都将数组分成两个,而下一次递归调用只处理数组的一半。 RandomizedPartition 成本 (p-r+1)
下一个(选择算法)比上一个更难理解:
b.和以前相比有什么不同。平均速度更快吗?
c。该算法由五个步骤组成。在第一个中,我们将数组分成 n/5 个部分,每个部分有 5 个元素(最后一个元素除外)。然后使用插入排序对每个部分进行排序,我们选择每个部分的第三个元素(中位数)。因为我们已经对这些元素进行了排序,所以我们可以确定前两个 = then it。然后我们需要在中位数中选择平均元素。在书中指出,我们递归地调用这些中位数的 Select 算法。我们怎么能做到这一点?在选择算法中,我们使用插入排序,如果我们交换两个中位数,我们需要交换每个中位数的所有四个(或者甚至更多,如果它更深一步)作为“孩子”的元素。或者我们是否创建仅包含先前选择的中位数的新数组,并在其中搜索中位数?如果是,我们如何将它们填充到原始数组中,因为我们之前更改了它们的顺序。
其他步骤非常简单,类似于 random_partition 算法。
【问题讨论】:
-
在 O(n) 中随机选择运行
-
我读到了,但我不明白为什么