Чи може часова складність Big-Oh містити більше однієї змінної?


11

Скажімо, наприклад, я роблю обробку рядків, яка вимагає певного аналізу двох рядків. Я не дав інформації про те, якою може бути їх тривалість, тому вони походять з двох різних сімей. Чи було б прийнятним назвати складність алгоритму або (залежно від того, чи будемо ми використовувати наївний або оптимізований алгоритм)?O ( n + m )O(nm)O(n+m)

Принаймні, припустимо, що алгоритм, який ми вибираємо, насправді вимагає двох етапів - фази налаштування на першій рядку, яка дозволяє обробляти будь-яку кількість інших рядків, не покладаючи на це початкову вартість. Чи вважатиметься доцільним сказати, що у нього є конструкція наступною будь-якою кількістю обчислень ?O ( м )O(n)O(m)

Чи було б доречно просто назвати їх оскільки обидва обчислення є лінійними?O(n)


Побачте коментарі до цієї відповіді за короткою справою - моя повага до @corsiKa за те, що він так сміливо задав таке суперечливе запитання.
OldCurmudgeon

@OldCurmudgeon, я бачу. Мені б не хотілося проникнути в цю тему коментарів. Олдкурмедж, ти сперечаєшся на позначенні великого O, не розуміючи нотації big-O? Справді незграбно. Також ви та corsiKa сперечаєтесь про час роботи, не визначаючи параметри і - рецепт неправильного спілкування. Підказка: одна спільна умова при роботі з рядками полягає в тому, щоб погодитись на використання для використання довжини однієї струни і для довжини іншої рядки - але в ідеалі, мабуть, найкраще зробити це явним, тому що в іншому випадку це може спричинити плутанину (як проілюстровано тут). m m nnmmn
DW

@DW Можливо, OldCurmudgeon просто навчився різному визначенню в школі ... як я зазначаю в коментарі нижче, можна уникнути декількох змінних, хоча я досі не думав про це. Може, це - чи щось подібне - раніше було стандартним?
Патрік87

2
Я думаю, що на це є достатньо відповідей тут і тут .
Рафаель

Відповіді:


14

Так, звісно. Це прекрасно і цілком прийнятно. Зазвичай і стандартно бачити алгоритми, час роботи яких залежить від двох параметрів.

Наприклад, ви часто бачите час виконання першого глибинного пошуку, вираженого як , де - кількість вершин, - кількість ребер у графіку. Це цілком справедливо. Сенс цього полягає в тому, що існує константа і числа така, що час роботи алгоритму становить не більше , для всіх . Іншими словами, якщо точний час роботи , ми говоримо, що якщо існують такі, що і мається на увазіn m c n 0 , m 0 c ( n + m ) n > n 0 , m > m 0 f ( n , m ) f ( n , m ) = O ( n + m ) c , n 0 , m 0 n > n 0 mO(n+m)nmcn0,m0c(n+m)n>n0,m>m0f(n,m)f(n,m)=O(n+m)c,n0,m0n>n0 f ( n , m ) c ( n + m )m>m0f(n,m)c(n+m) .

Так, цілком доречно і прийнятно сказати, що перша стадія займає час, а друга стадія займає час.O ( м )O(n)O(m)

Важливо: обов'язково визначте, що таке та . Ви не можете сказати «це алгоритм часу », не вказуючи, що таке . Якщо не вказано в заяві про проблему, потрібно вказати її. Наприклад, див. Алгоритми графіків, де ми зазвичай визначаємо # вершин і # ребер.m O ( n ) n n n = m =nmO(n)nnn=m=

Що стосується того, чи можете ви назвати їх час, ні, звичайно, ні, якщо тільки ви якось не знаєте, що . Звичайно, якщо ви знаєте, що , то випливає, що , тому алгоритм часу також є алгоритмом часу . Але якщо немає гарантії, що , то ви не можете назвати це алгоритмом часу .m = O ( n ) m = O ( n ) m + n = O ( n ) O ( m + n ) O ( n ) m = O ( n ) O ( n )O(n)m=O(n)m=O(n)m+n=O(n)O(m+n)O(n)m=O(n)O(n)

Це основні речі. Ви знайдете це в усіх підручниках алгоритмів.


1
@OldCurmudgeon, шанси на те, що ви знайдете приклади цього у багатьох підручниках із стандартними алгоритмами. Які ви подивилися? Чи спробували ви подивитись у розділ глибокого пошуку (приклад, який я згадував у своїй відповіді)?
DW

2
@OldCurmudgeon У моєму виданні CLRS вправі 3.1-8 представлено саме таке визначення примітки для функцій багатьох змінних. А його верхня межа часу виконання dfs становить для графа . O ( V + E ) ( V , E )OO(V+E)(V,E)
Кирило

2
@Kirill Моя думка полягала в тому, що це було можливо мислити, колись у минулому вважалося прийнятим вважати лише загальну довжину сукупності, настільки, наскільки це може бути визнано помилкою. Якщо ви оцінюєте іспит студента, і цей студент використовував загальну довжину введення як змінну за часовою складністю DFS, чи вважаєте ви помилкою не враховувати два виміри (V і E)? Що правда, і те, що люди готові поступитися, - це не завжди одне і те саме. n
Patrick87

1
Я згоден, якщо всі використовують позначення Ландау таким чином, але майже ніхто не знає, що це насправді (якщо ви не підключите параметри функціонально). Дивіться також статтю, зв'язану у відповіді А. Шульца, яка починається з того, що "основне" та "загальне" використання неправильне.
Рафаель

1
@ Patrick87 Теорія складності використовує, завдяки визначенню багатьох відомих класів, в основному довжину введення (з помітними винятками). Аналіз алгоритму - якщо це серйозно - зацікавлений дізнатися щось про фактичне використання ресурсів (наскільки це дозволяє модель), тож інші параметри стають цікавішими, як намалювати всю картину (точніше).
Рафаель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.