Какова сложность (Big O) алгоритма правила Руффини

каким был бы правильный анализ сложности Руффини?

1 ответов


мое понимание правила Руффини заключается в том, что оно по существу дано этим псевдокодом:

let b = [];
let last = 0;

for (i from n - 1 to 0) {
    b.add(last + a[n]);
    last = (last + a[n]) * r;
}
let s = last;

если мы предположим, что все коэффициенты являются целыми числами и что все умножения могут быть выполнены за время O(1) Каждый, то время выполнения этого алгоритма будет O(n), так как существует n итераций цикла, выполняющих O(1) работу каждый.

на практике умножение занимает больше времени, чем это. В частности, умножение двух чисел A и B бит, соответственно, обычно требуется время O (log a log b), если вы не используете специализированные алгоритмы, которые работают немного быстрее, чем это.

Итак, предположим, что каждый коэффициент и число r не более U. на каждой итерации мы умножаем на r и добавляем в U, поэтому максимальное значение последнего после каждой итерации будет 0, O (U2), O (U3), O (U4), ..., O (Un+1). Это означает, что умножение займет время, пропорциональное 0, 2 log U, 3 log U, 4 log U,..., N log U. суммируя через умножения, это занимает время O (n2 log U), поэтому общая проделанная работа будет O (n2 log U).