我是博士生,我正在研究我的项目,
如果我使用几何平均值作为枢轴将数组划分为近似两个相等的部分,我想知道最坏情况下的分区时间复杂度是多少?
结果: -
Vladimir Yaroslavskiy双枢轴快速选择分区: - 2307601193纳秒
几何平均枢轴快速选择分区: - 8661916394纳秒
我们知道它非常昂贵并且快速分区速度要慢得多。有许多算法比快速选择要快得多,但在我们的项目中我们不会直接使用它们。
几何平均枢轴的示例: -
/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////////
输入 - 789654123,700,10 ^ 20,588412,900,5,500
几何平均值:-( 789654123 * 700 * 10 ^ 20 * 588412 * 900 * 5 * 500)^(1/7)= 1846471
通过1- 500 700 5 588412 900 |< ---> | 10 ^ 20 789654123
几何平均值:-(500 * 700 * 5 * 588412 * 900)^(1/5)= 984
通过2-500,700,5,900,|< ---> | 588412,10 ^ 20,789654123
////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////
通过这种方式,我们可以将数组分成近似两个相等的部分。
我的问题是,如果我使用几何平均值作为枢轴将数组划分为大约两个相等的部分,那么最坏情况(最差的不平衡分区)时间复杂度会是什么?
注意: - 我们在数据集中没有使用-ve no。
答案 0 :(得分:1)
2 2 0 ,2 2 1 ,2 2 2 ,...,2 2 n - 1 具有几何平均值
(2 2 0 ·2 2 1 ·2 2 2 < / sup> ·...·2 2 n - 1 )(1 / n)
=(2 2 0 + 2 1 + ... 2 n )( 1 / n)
=(2 2 n + 1 - 1 )(1 / n)
= 2 (2 n + 1 - 1)/ n
= 2 (2 n + 1 - 1)2 -log n
= 2 (2 n + 1 - log n - log n)
请注意,此数字是(大约)2 2 n - log n 。这意味着您的分区只会将大约log n项分成数组的第二组,与整个数组大小相比,这是一个非常小的数字。因此,您期望对于这种数据集,您将更接近Θ(n 2 )性能而不是Θ(n log n)性能。但是,我无法得到一个确切的渐近值,因为我不知道究竟会有多少轮。
希望这有帮助!
答案 1 :(得分:1)
几何平均值等于对数的算术平均值,所以我们只需要找到算术平均值严重分解并取其指数的东西。一个例子是阶乘,如果你有一个列表
1!, 2!, 3!, 4!, ..., n!
取算术平均值将在最后一个元素之前准确分割。证明:此数组的总和大于最后一个元素:
s_n > n!
因此,算术平均值大于之前的元素:
av_n = s_n/n > (n-1)!
因此,快速选择需要n轮,其性能将为O(n ^ 2),而平均性能则为O(n)。要使用几何平均值获得相同的行为,您必须考虑此
的指数列表a^(1!), a^(2!), ..., a^(n!)
适用于任何a>1
或0<a<1
。基于几何平均值的快速选择的结果表现为O(n ^ 2)。