我最近在分析了第k个最小元素算法之后编写了一个程序,首先没有重复的情况。
然而,现在,我想分析预期的渐近运行时间,例如,当有完全j
个重复时,查找数组的中位数。我没有为此修改我的代码,因此由于j
重复,性能会有所下降。
我不知道该如何开始?有人能指出我这种复发关系吗?
我得到了以下内容,其中n是输入数组的大小
T(n) <= 1/2*T(3/4*n) + 1/2*T(n)
但我不清楚如何处理所涉及的重复密钥。
由于
答案 0 :(得分:0)
随机解决方案as demonstrated here是
T(n) <= T(3/4*n) + n-1 => T(n) <= 4n
算法的复杂性可能取决于j
,但不要指望它奇迹般地小于线性时间。为什么?取一个大小为n / 2的随机数组,完全复制它并运行重复问题的理想算法。你有
T(n) <= 4(n/2) => T(n) <= 2n
每个元素重复两次(完全n/2
重复)