Чи вважається O (mn) "лінійним" або "квадратичним" зростанням?


24

Якщо у мене є якась функція, часова складність якої є O ( mn ), де m і n - розміри двох її входів, ми б називали її часову складність "лінійною" (оскільки вона лінійна як у m, так і в n ) або "квадратична" ( оскільки це виріб двох розмірів)? Або щось інше?

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


7
Важливо сказати лінійне в чому . Якщо, наприклад, маємо графік з ребрами і n вершинами, O (m + n) є лінійним за кількістю ребер, але (потенційно) квадратичним за кількістю вершин. n O ( m + n )mnO(m+n)
Рафаель

3
Я думаю, що коментар Рафаеля є місцевим. "Лінійна" повинна використовуватися відносно чогось, часто розміру вводу. Якщо ви транспонуєте m×n матриця O(mn) є "лінійною", оскільки вхід має розмір O(mn) . Якщо ви шукаєте входження рядків n символів у рядку m символів, O(mn) не є лінійним --- O(m+n) було б.
СамМ

3
Я погодився б із коментарем @ Рафаеля, але в той же час не рідко чути, як люди кажуть, що певна часова складність є "лінійною", не згадуючи відносно того, що. І в деяких випадках це не має значення, наприклад, O (m + n) є лінійним відносно всіх входів, тому я б не замислювався над тим, щоб називати його лінійним, як це робив SamM вище. Але це ставить питання: що, якщо що, робить O (mn) не лінійним?
Мехрдад

3
@Mehrdad: Я думаю, що базовий рівень "у розмірі введення, якщо припустити, що вхід кодується як двійковий рядок (на стрічці машини Тьюрінга)". Потім цей розмір вводу є функцією n і m . SamM наводить хороші приклади.
Рафаель

1
Дивіться також people.cis.ksu.edu/~rhowell/asymptotic.pdf про позначення landau у кількох змінних.
Jonas Kölker

Відповіді:


18

У математиці подібні функції називаються багатолінійними функціями. Але комп'ютерні фахівці, мабуть, взагалі не знають цієї термінології. Цю функцію, безумовно, не слід називати лінійною ні в математиці, ні в інформатиці, якщо ви не можете обґрунтовано вважати одну з і постійною.нmn


Що робить вважання одного з і постійним розумним? нmn
користувач2768

11

Для висвітлення обговорення в коментарях важливо, для чого ви вимірюєте зростання стосовно.

Як зазначав @Kaveh, не є лінійним в обох одночасно, але є лінійним, якщо одна є постійною, а інша зростає.O(mn)

З іншого боку, , ймовірно, вважатиметься лінійним. Інтуїтивно, якщо подвоюється, або якщо подвоюється, або навіть якщо обидва і подвійні, не може перевищувати подвійного. Це не вірно з ; якщо і обидва подвійні зростають на 4. Ось чому у багатьох контекстах цей час роботи вважатиметься квадратичним. Я наводжу приклад цього зі збігом рядків у параграфах.O(m+n)n m n m + n m n m n m nmnmnm+nmnmnmn

Але зазвичай, коли ви використовуєте нотацію Big- , ви використовуєте її посиланням на щось конкретне. Оскільки ми здебільшого теоретики, це загалом розмір входу до проблеми.O

Візьмемо, наприклад, Matrix Addition. Додавання двох матриць займає час . Але кожен елемент нашого введення торкається лише одного разу, тому це, як правило, можна назвати лінійним. Іншими словами, наш вхід має розмір , тому час роботи лінійний за розміром вхідного сигналу.O ( m n ) O ( m n ) O ( m n )m×nO(mn)O(mn)O(mn)

Тепер давайте розглянемо відповідність рядків - а саме нам дається рядок розміром і рядок розміром і ми хочемо перевірити, чи є зустріч меншої рядка в більшій рядку. Ми можемо перевірити це наївно в час; це, як правило, вважатиметься квадратичним. Чому? Якщо і можуть бути будь-якими, встановіть . Тоді наш час роботи - а наш вхід - розмір .n O ( m n ) m n m = n O ( m 2 ) 2 mmnO(mn)mnm=nO(m2)2m

З іншого боку, якщо використовувати алгоритм Рабіна-Карпа , ми отримуємо (в середньому) час . Наш вхід складався з обох рядків, тому наше введення також було розміром . Тому це, як правило, називається лінійним.O ( m + n )O(m+n)O(m+n)

Підводячи підсумок: як правило, називається лінійним для таких речей, як матричне множення, тому що він лінійний за розміром вхідного сигналу, але його зазвичай називають квадратичним для таких речей, як відповідність рядків через менший вхід. Який термін підходить, залежить від контексту, в якому ви його використовуєте.O(mn)


8

Якщо ви вимірюєте час роботи в , то є НЕ лінійною функцією в . Якщо між і немає зв’язку, ця функція в цілому може зростати квадратично .(m,n)O(mn)(m,n)mn

Однак це лінійна функція в кожній з них окремо, тобто якщо ви фіксуєте одну з них і дивитеся на зростання в іншій змінній, то це лінійна функція в іншій.


3

Для вимірювання складності задач з кількома входами , одним із способів є пошук домінуючої змінної, а потім пов'язані інші входи на основі цієї змінної. При такому підході ви могли б мати функцію складності на основі однієї змінної .


2
Можливо, не існує домінуючої змінної, наприклад, якщо у вас є кількість вузлів і ребер.
Рафаель

0

Враховуючи деяку мову та функцію таку, що для кожного ви можете оцінити час роботи алгоритму , який розпізнає як .L={w1#w2|wi(Σ{#}),}fmin{|w1|,|w2|}f(|w|)w=w1#w2LL O ( f ( | w | ) ( | w | - f ( | w | ) ) = O ( f ( | w | ) | w | - f ( | w | ) 2 ) = O ( f ( | w | ) | w | )O(|w1||w2|)LO(f(|w|)(|w|f(|w|))=O(f(|w|)|w|f(|w|)2)=O(f(|w|)|w|)

Це означає, що ви отримуєте лінійний час, якщо менша частина вашого вводу є постійною (відносно всього вводу), щось середнє (наприклад, ), якщо це підлінійне та квадратичне виконання, якщо воно лінійне.O(nlogn)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.