algorithm - Stack-AVL传输算法

标签 algorithm analysis

假设我有一个算法可以从堆栈中弹出每个元素并将它们插入到 AVL 树中。

If pop () is a O (1) method and insert () is an O(log n) method,  
my algorithm is O(log n), O (n) or O(n log n)?

为什么?

最佳答案

您的算法是 O(nlogn),或者准确地说是 Theta(nlogn),假设插入是 Theta(logn )

i 步骤花费 c1 + c2*log(i) (c1 pop() 的常量>,c2 是保证插入 AVL 的常量),所以你得到:

c1 + c2*log(1) + c1 + c2*log(2) + .... + c1 + c2*log(n) = 
= c1*n + c2*log(1*2*...*n) = c1*n + c2*log(n!) <= (for large enough n) (c2+1)*log(n!)

如果我们“忽略”这些常量,它的可读性会更高(当然不太准确,必须小心操作,但这有利于直觉):

log(1) + log(2) + ... + log(n) = log(1*2*...*n) = log(n!)
and log(n!) is in O(nlogn)

众所周知,log(n!)Theta(nlogn) 中 - 因此这就是您的总复杂度。

关于algorithm - Stack-AVL传输算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16353132/

相关文章:

javascript - 对字符串中的所有字符进行排序

javascript - 在使用匈牙利算法解决非对称 AP 之前减少搜索空间

python - 如何在不完成的情况下分析python的性能?

python频率分析,

algorithm - 有没有办法让 StoogeSort 更像曲线?

c++ - 是否有任何 O(n^2) 算法来生成数组的所有子序列?

algorithm - 最平衡二分的排列

python - 这种单调算法的空间复杂度?

analysis - 系统用例 Vs。业务用例

java - 1772 加勒比在线判断超时错误。请帮我找出为什么我的算法花了这么长时间