非单调时间复杂度算法

时间:2010-09-03 21:06:34

标签: algorithm complexity-theory

作为一个思考练习,我试图想到一个具有非单调复杂性曲线的算法。我唯一能想到的是一些四肢渐近解的算法。

是否有这样的算法,它具有非单调复杂性曲线,不依赖于渐近逼近?

3 个答案:

答案 0 :(得分:2)

离心傅里叶变换浮现在脑海中;如果按如下方式应用,它将是非单调的(并且是不连续的):

if is_power_of_2(len(data)):
    return fft(data)
return dft(data)

因为dft在O(N ** 2)中运行而fft在O(N log N)中运行。

设计算法时,人们可能会找到一种方法来填充输入数据以消除非单调行为(即加速较小的输入),这通常用fft来完成。

答案 1 :(得分:0)

我不知道你的'渐近逼近'是什么意思,但从理论上讲,很容易构造出这样的'算法'......

var l = non_monotonic_function(input.size);
for (var i = 0; i < l; ++ i)
   do_some_O1_stuff(i);

答案 2 :(得分:0)

我不认为有很多(任何?)这样的真实算法,但在我的脑海中,用伪代码:

void non_monotonic_function(int n)
{
    System.wait( Math.sin(n) );
}

此算法不是渐近的,因为n进入无穷大。