algorithm - 几何平均主元

标签 algorithm math time-complexity quicksort

我是博士生,我正在做我的项目,

我想知道如果我使用几何平均值作为将数组划分为大致相等的两部分的基准,最坏情况下的划分时间复杂度是多少?

结果:-

Vladimir Yaroslavskiy 双轴快速选择分区:- 2307601193 纳秒

几何平均枢轴快速选择分区:- 8661916394 纳秒

我们知道它非常昂贵并且使快速分区慢得多。有许多算法比快速选择查找中位数要快得多,但在我们的项目中我们不会直接使用它们。

几何平均基准示例:-

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Input- 789654123 , 700 , 10^20 , 588412 , 900 , 5 , 500

Geometric mean :-( 789654123*700*10^20*588412*900*5*500)^(1/7)= 1846471

Pass 1- 500 700 5 588412 900 |<---> | 10^20 789654123

Geometric mean :-(500*700*5*588412*900)^(1/5)=984

Pass 2- 500, 700, 5, 900, |<---> | 588412, 10^20, 789654123
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

通过这种方式我们可以将数组分成大致相等的两部分。

我的问题是,如果我使用几何平均值作为将数组划分为近似两等份的基准,那么最坏情况(最差不平衡划分)的时间复杂度是多少?

注意:- 我们没有在数据集中使用 -ve no。

最佳答案

几何平均数相当于对数的算术平均数,所以我们只需要找到算术平均数严重失效的地方并取其指数即可。一个例子是阶乘,如果你有一个列表

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>10<a<1 .基于几何平均值的快速选择 的结果性能为 O(n^2)。

关于algorithm - 几何平均主元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21656124/

相关文章:

algorithm - 需要有关如何使用霍夫曼代码对单词进行编码的帮助

algorithm - 从 “Physically Based Rendering"开始在 KD-Tree 构造中拆分边界框

算法:计算椭圆内的伪随机点

javascript - 根据用户输入验证数学公式

arrays - 是否有 O(n) 算法来查找数组中第一个缺失的数字?

c - 我如何计算这个函数的时间复杂度?

c - 乘法的算法复杂度

c++ - 如何有效地合并两个 BST?

c++ - 具有一定运动的 3D 三角形碰撞检测

javascript - 如何创建 nxm HTML5 canvas 对象网格(彩色方 block )?