Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 快速排序与中值渐近行为_Algorithm_Quicksort_Asymptotic Complexity - Fatal编程技术网

Algorithm 快速排序与中值渐近行为

Algorithm 快速排序与中值渐近行为,algorithm,quicksort,asymptotic-complexity,Algorithm,Quicksort,Asymptotic Complexity,快速排序和中值使用相同的方法(除法和震荡法),为什么它们具有不同的渐近行为 是因为快速排序可能没有使用正确的枢轴吗?如果使用霍尔的原始select算法,您可能会得到与快速排序相同的最坏情况性能 如果您使用中间值,那么您将限制最坏的情况,而在大多数典型情况下,您将以较慢的速度为代价 您可以使用中间值为快速排序找到一个轴心点,这将产生大致相同的效果——限制最坏的情况,但在大多数情况下会降低速度 当然,对于排序(一般而言),每个分区操作都是O(N),您希望对log(N)分区操作进行操作,因此您得到的总

快速排序和中值使用相同的方法(除法和震荡法),为什么它们具有不同的渐近行为


是因为快速排序可能没有使用正确的枢轴吗?

如果使用霍尔的原始
select
算法,您可能会得到与快速排序相同的最坏情况性能

如果您使用中间值,那么您将限制最坏的情况,而在大多数典型情况下,您将以较慢的速度为代价

您可以使用中间值为快速排序找到一个轴心点,这将产生大致相同的效果——限制最坏的情况,但在大多数情况下会降低速度

当然,对于排序(一般而言),每个分区操作都是O(N),您希望对log(N)分区操作进行操作,因此您得到的总体复杂度大约是O(N log N)

中位数发现,你也希望做大约O(log n)步骤,但是你只考虑上一步的分区,可以包括中值(或四分位数等等)。您希望这些分区的大小在每一步都被(大约)2除,而不是总是必须对整个输入进行分区,因此最终的复杂性大约是O(N)而不是O(N logn)


[请注意,在整个过程中,我有点滥用big-O表示法来表示预期的复杂度,而big-O实际上应该表示上界(即最坏情况)复杂度。]

如果使用霍尔最初的
选择算法,您可以得到与快速排序相同的糟糕情况性能

如果您使用中间值,那么您将限制最坏的情况,而在大多数典型情况下,您将以较慢的速度为代价

您可以使用中间值为快速排序找到一个轴心点,这将产生大致相同的效果——限制最坏的情况,但在大多数情况下会降低速度

当然,对于排序(一般而言),每个分区操作都是O(N),您希望对log(N)分区操作进行操作,因此您得到的总体复杂度大约是O(N log N)

中位数发现,你也希望做大约O(log n)步骤,但是你只考虑上一步的分区,可以包括中值(或四分位数等等)。您希望这些分区的大小在每一步都被(大约)2除,而不是总是必须对整个输入进行分区,因此最终的复杂性大约是O(N)而不是O(N logn)


[请注意,在整个过程中,我有点滥用big-O表示法来表示预期的复杂度,而big-O实际上应该表示上界(即最坏情况)复杂度。]

如果使用霍尔最初的
选择算法,您可以得到与快速排序相同的糟糕情况性能

如果您使用中间值,那么您将限制最坏的情况,而在大多数典型情况下,您将以较慢的速度为代价

您可以使用中间值为快速排序找到一个轴心点,这将产生大致相同的效果——限制最坏的情况,但在大多数情况下会降低速度

当然,对于排序(一般而言),每个分区操作都是O(N),您希望对log(N)分区操作进行操作,因此您得到的总体复杂度大约是O(N log N)

中位数发现,你也希望做大约O(log n)步骤,但是你只考虑上一步的分区,可以包括中值(或四分位数等等)。您希望这些分区的大小在每一步都被(大约)2除,而不是总是必须对整个输入进行分区,因此最终的复杂性大约是O(N)而不是O(N logn)


[请注意,在整个过程中,我有点滥用big-O表示法来表示预期的复杂度,而big-O实际上应该表示上界(即最坏情况)复杂度。]

如果使用霍尔最初的
选择算法,您可以得到与快速排序相同的糟糕情况性能

如果您使用中间值,那么您将限制最坏的情况,而在大多数典型情况下,您将以较慢的速度为代价

您可以使用中间值为快速排序找到一个轴心点,这将产生大致相同的效果——限制最坏的情况,但在大多数情况下会降低速度

当然,对于排序(一般而言),每个分区操作都是O(N),您希望对log(N)分区操作进行操作,因此您得到的总体复杂度大约是O(N log N)

中位数发现,你也希望做大约O(log n)步骤,但是你只考虑上一步的分区,可以包括中值(或四分位数等等)。您希望这些分区的大小在每一步都被(大约)2除,而不是总是必须对整个输入进行分区,因此最终的复杂性大约是O(N)而不是O(N logn)


[请注意,在整个过程中,我有点滥用big-O表示法来表示预期的复杂性,而big-O实际上应该表示上界(即最坏情况)复杂性。]

当您在(请参阅链接中的方法)中使用method
partition
来查找中位数时,具有正确位置的元素的方法返回索引,基于此位置,您只需检查包含中间值的选定零件


例如,数组长度是5,所以中位数是3。分区方法返回2,因此您只需检查数组的上部(从2到5),而不是整个数组作为快速排序。

当您在(请参阅链接中的方法)中使用方法
partition
查找中位数时,具有正确位置的元素的方法返回索引,基于此位置,您只需