Яке «правильне» визначення верхньої та нижньої меж?


19

Нехай - найгірший час запуску проблеми при введенні розміру . Давайте зробимо задачу трохи дивною, фіксуючи для але для .f(n)nf(n)=n2n=2kf(n)=nn=2k+1

  1. Отже, яка нижня межа проблеми? Я зрозумів, що це лише нижня межа . Але ми знаємо, що означає, що існує константа , така, що для всіх , , що не відповідає дійсності. Таким чином, здається, що ми можемо сказати лише . Але зазвичай ми будемо називати, що проблема має нижню межу , правда?f ( n ) = Ω ( n 2 ) k n 0 n > n 0 f ( n ) > k n 2 f ( n ) = Ω ( n ) Ω ( n 2 )f(n)f(n)=Ω(n2)kn0n>n0f(n)>kn2f(n)=Ω(n)Ω(n2)

  2. Якщо припустити, що , це означає, що існує константа , така, що для всіх , . Припустимо також, що проблема має час роботи . Якщо ми можемо звести цю проблему для всіх праймерів до іншої проблеми (з однаковим розміром входу), чи можемо ми сказати, що час виконання іншої проблеми має нижню межу ?k n 0 n > n 0 g ( n ) > k n 2 g ( n ) n Ω ( n 2 )g(n)=Ω(n2)kn0n>n0g(n)>kn2g(n)nΩ(n2)


12
Ось чому математики використовують lim sup та lim inf.
Пітер Шор

1
Тому я думаю, що я розумію різницю. Я думаю, що люди з пошти просто зрозуміють Омегу як нескінченно часто. Але якщо я хочу зробити чітке розмежування, чи можу я використати якісь позначення, крім розширення?
Вей Ю

3
@Wei Yu: lim sup та lim inf. Ви кажете для деякої постійної якщо ви хочете сказати, що нескінченно часто, і якщо ви хочете сказати для всіх досить великих . Особливо, якщо ви розмовляєте з математиками. kg(n)kn2lim infg(n)
lim supg(n)n2k
kg(n)kn2g(n)kn2n
lim infg(n)n2k
g(n)kn2n
 
Пітер Шор

12
@Wei: Для більшості теоретиків складності (див. Ланс нижче), ваша функція θ (n ^ 2); для більшості алгоритмів (див. Knuth або CLRS) ваша функція is (n ^ 2) і Ω (n). Обидві позначення майже, але не повністю, є стандартними у своїх підспільнотах; щоб гірше було, ці дві підгрупи сильно перекриваються! Отже, якщо важливо, яку нотацію ви використовуєте, ви повинні чітко сказати, яку нотацію ви використовуєте. (На щастя, це рідко має значення.)
Jeffε

2
@Jeffe. Я вважаю, що ви повинні опублікувати свій коментар як відповідь.
chazisop

Відповіді:


13

Правильне визначення полягає в тому, що існує деякий такий, що для нескінченно багатьох , . Нескінченно часто визначення нижчих меж вирішує ваші проблеми і те, як ми використовуємо це на практиці.k > 0 n f ( n ) k n 2f(n)=Ω(n2)k>0nf(n)kn2

Я написав повідомлення про це ще в 2005 році.

Деякі підручники отримують таке визначення правильно, деякі - ні.


14
Кнут не погоджується з вами: portal.acm.org/citation.cfm?id=1008329
Jeffε

4
CLRS та Wikipedia також не згодні з вами. Визначення нескінченності часто є помітною альтернативою, але, здається, використовується менш широко.
Анонімний

Я думаю, що всі ці визначення погоджуються, коли набір винятків є мірою 0.
Картер Таціо Шенвальд

2
Проблема з визначеннями "нескінченно часто" полягає в тому, що вони зазвичай не виключають "нескінченно часто не". Таким чином, ми маємо жахливий наслідок, що з цим визначенням але також , де і означають строгі порядки в деяких сенс. Мені це дуже не подобається. Принаймні, пропозиція @ Картера щодо винятку міри 0 є трохи менш жахливою, але все ж дозволяє чіткіше замовлення, ніж звичайне. f ( n ) = o ( n + 1 ) Ω of(n)=Ω(n2) f(n)=o(n+1)Ωo
Андрас Саламон

2
@Jukka: Ні, я тут зловживаю . Як ви натякаєте, я повинен виправити міркування, щоб використовувати замість . Тому дозвольте мені викласти фактичне заперечення без використання або . З "нескінченно часто" є аномалія, що , , ще . Тож навіть не утворює попереднього замовлення. oOooOn=Ω(f(n))f(n)=Ω(n2)nΩ(n2)Ω
Андраш Саламон

4

З визначенням Кнута ви можете стверджувати лише . Як ви зауважуєте, це не інтуїтивно зрозуміло і трапляється для функцій, які Вітаній і Мертенс називають "дикими". Вони пропонують визначитисьf(n)Ω(n)

Ω(f(n))={gδ>0:n0>0:n>n0:g(n)δf(n)}.

(Це те саме, що визначення Ланса.) З цим визначенням .f(n)Ω(n2)


2

Я не знаю про найбільш широко використовувані, але я вважаю, що знаю про найдавніше використання (для комп’ютерної науки все одно).

У статті 1965 року Хартманіса та Стірнс "Про складність алгоритмів обчислювальної техніки" слідство 2.1:

Якщо і - часові функції, такі що тоUTSUSTinfnT(n)U(n)0SUST

де - клас складності всіх задач, які можна обчислити в . T (n) має відповідати для деякого цілого числа і всіх і , але це не повинно бути конструктивно сконструйованим. O ( K ( n ) ) T ( n ) n / k k n T ( n ) T ( n + 1 )SKO(K(n))T(n)n/kknT(n)T(n+1)

Ваша функція підкоряється першому правилу для але не виконує другого правила.k=1

Слідство 2.2 - це зворотне вищезазначене і використовує граничну супрему, але все ж має ці вимоги. Я здогадуюсь, що алгоритми стали складнішими за ці роки, можливо, вимоги були послаблені.


2

Я думаю, що ми повинні розрізняти дві речі:

  • нижня межа для функції
  • нижня межа для проблеми (алгоритм)

Для функцій, коли ми фіксуємо порядок, з нього випливає визначення нижньої / верхньої межі. Якщо відношення порядку є асимптотичним мажоризацією (ігнорування постійних факторів)

fg:c,nm>n. f(x)cg(x)

OΩ

Time(t(n))n2n2o(t(n))

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