Алгоритм немонотонной временной сложности

В качестве мыслительного упражнения я пытаюсь представить алгоритм, который имеет немонотонную кривую сложности. Единственное, о чем я мог подумать, это какой-то алгоритм с асимптотическим решением в конечностях.

Существует ли такой алгоритм, имеющий немонотонную кривую сложности, который не опирается на асимптотическое приближение?

3 ответа

На ум приходит дискретное преобразование Фурье; если бы он применялся следующим образом, он был бы немонотонным (и прерывистым):

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

поскольку dft работает в O(N**2), а fft работает в O (N log N).

При разработке алгоритма можно было бы найти способ дополнить входные данные, чтобы удалить немонотонное поведение (т. Е. Ускорить меньшие входные данные), как это обычно делается с fft.

Я не думаю, что есть много (каких-либо?) Реальных алгоритмов, подобных этому, но просто в голове, в псевдокоде:

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

Этот алгоритм не асимптотичен, так как n стремится к бесконечности.

Я не знаю, что вы подразумеваете под "асимптотическим приближением", но теоретически легко построить такой "алгоритм"...

var l = non_monotonic_function(input.size);
for (var i = 0; i < l; ++ i)
   do_some_O1_stuff(i);
Другие вопросы по тегам