Сортування функцій за асимптотичним ростом


35

Припустимо, у мене є список функцій, наприклад

nloglog(n),2n,n!,n3,nlnn,

Як їх сортувати асимптотично, тобто за відношенням, визначеним

fOgfO(g) ,

якщо припустити, що вони справді попарно порівнянні (див. також тут )? Використання визначення O видається незручним, і часто важко довести існування придатних констант c і n0 .

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


4
Оскільки ОП ніколи не повертався, я виймаю локалізовані речі і виходжу із цього питання.
Рафаель

Відповіді:


48

Якщо ви хочете суворих доказів, наступна лема часто корисна відповідно. зручніше, ніж визначення.

c=limnf(n)g(n)

  • c=0 fo(g) ,
  • c(0,)fΘ(g) і
  • c=   fω(g) .

За допомогою цього ви зможете впорядкувати більшість функцій, що надходять у аналіз алгоритму¹. Як вправу, доведіть це!

Звичайно, ви повинні вміти відповідно обчислювати межі. Деякі корисні прийоми для розбиття складних функцій на основні:

  • Висловіть обидві функції як та порівняйте експоненти; якщо їх співвідношення має тенденцію до або , то і вихідний коефіцієнт. 0 e0
  • Більш загально: якщо у вас є опукла, постійно диференціюється і суворо зростаюча функція щоб ви могли переписати свій коефіцієнт якh

    f(n)g(n)=h(f(n))h(g(n)) ,

    з іgΩ(1)

    limnf(n)g(n)= ,

    потім

    limnf(n)g(n)= .

    Дивіться тут для суворого докази цього правила (німецькою мовою ).

  • Розгляньте продовження своїх функцій над питаннями. Тепер ви можете використовувати правило L'Hôpital ; пам'ятайте про його умови²!

  • Подивіться на дискретний еквівалент, Столц – Чезаро .
  • Коли з'являються фабрики, використовуйте формулу Стірлінга :

    n!2πn(ne)n

Також корисно зберігати пул основних відносин, які ви доводите один раз і використовуєте часто, наприклад:

  • логарифми ростуть повільніше, ніж поліноми, тобто

    α , β > 0(logn)αo(nβ) для всіх .α,β>0

  • порядок многочленів:

    α<βnαo(nβ) для всіх .α<β

  • поліноми ростуть повільніше, ніж експоненціали:

    αc>1nαo(cn) для всіх і .αc>1


Може статися, що вище лема не застосовується, оскільки межа не існує (наприклад, коли функції коливаються). У цьому випадку розглянемо наступну характеристику класів Ландау за допомогою limes superior / inferior :

З ми маємоcs:=lim supnf(n)g(n)

  • 0cs<fO(g) і
  • cs=0fo(g) .

З ми маємоci:=lim infnf(n)g(n)

  • 0<cifΩ(g) і
  • ci=fω(g) .

Крім того,

  • 0<ci,cs<fΘ(g)gΘ(f) та
  • ci=cs=1fg .

Перевірте тут і тут, якщо вас бентежить моє позначення.


¹ Nota bene: Мій колега написав функцію Mathematica, яка успішно виконує це для багатьох функцій, тому лемма дійсно зводить завдання до механічних обчислень.

² Дивіться також тут .


@Juho Не публічно, afaik, але елементарно писати самому; обчислити Limit[f[n]/g[n], n -> Infinity]та виконати відмінність справи.
Рафаель

20

Ще одна порада: іноді застосування монотонної функції (наприклад, журналу чи досвіду) до функцій робить речі зрозумілішими.


5
Це слід зробити обережно: , але . 2nO(n)22nO(2n)
Шауль

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

17

Скіна надає відсортований перелік домінуючих відносин між найпоширенішими функціями у своїй книзі «Посібник з дизайну алгоритму»:

n!cnn3n2n1+ϵnlgnnn1/2
lg2nlgnlgnlglgnlglgnα(n)1

Тут позначає зворотну функцію Акермана .α(n)


Це дивно специфічний список. Багато відносин (що б то не означало точно) можна звести до кількох більш загальних леммат.
Рафаель

Це його позначення відношення домінування.
Роберт С. Барнс

11

Порада: намалюйте графіки цих функцій, використовуючи щось на зразок Wolfram Alpha, щоб відчути, як вони ростуть. Зауважте, що це не дуже точно, але якщо ви спробуєте це для достатньо великої кількості, вам слід побачити порівняльні закономірності зростання. Це, звичайно, не замінює доказ.

Наприклад, спробуйте: графік журналу (log (n)) від 1 до 10000, щоб побачити окремий графік або журнал графіку (log (n)) та журнал сюжету (n) від 1 до 10000, щоб побачити порівняння.


9
Чи справді ми б рекомендували води ?
Рафаель

+1 за пропозицію намалювати графіки функцій, хоча пов'язані графіки досить заплутані, якщо ви не знаєте, що вони означають.
Цуйосі Іто

1
Візьміть графік як підказку, що ви хочете довести. Цей натяк, звичайно, може бути неправильним.
gnasher729

8

nloglogn2n

Ми використовуємо властивість, що щоб переписати перший вираз як . Потім ми могли б продовжити використання визначення, щоб показати, що , оскільки для будь-якої постійної , є такий, що для , .n=2lognnloglogn=(2logn)loglogn=2lognloglognnloglogn=2lognloglogno(2n)c>0n0nn0c(nloglogn)=c(2lognloglogn)<2n

Далі пробуємо . Ми порівнюємо його з , найбільшим елементом, який ми розмістили досі. Оскільки , ми аналогічно показуємо, що .3n2n3n=(2log3)n=2nlog32no(3n)=o(2nlog3)

І т.д.


2

Ось список з Вікіпедії : Чим нижче в таблиці більший клас складності;

NameRunning TimeConstant timeO(1)Inverse Ackermann timeO(a(n))Iterated logarithmic timeO(logn)Log-logarithmicO(nlogn)Logarithmic timeO(logn)Polylogarithmic timepoly(logn)Fractional powerO(nc),where 0<c<1Linear timeO(n)"n log star n" timeO(nlogn)Quasilinear timeO(nlogn)Quadratic timeO(n2)Cubic timeO(n3)Polynomial timepoly(n)=2O(logn)Quasi-polynomial time2O(poly(logn))Sub-exponential time (first definition)O(2nϵ),ϵ>0Sub-exponential time (second definition)2o(n)Exponential time(with linear exponent)2O(n)Exponential time2poly(n)Factorial timeO(n!)

Примітка:poly(x)=xO(1)


1
Також цікаво, як таблиця припускає, що . Хоча таблиця, на яку ви посилаєтеся , дещо точна, та, яку пов’язано там (і яку ви скопіювали), стосується класів складності, які тут не корисно змішувати. Позначення Ландау - це не про "час". 2nlogno(n!)
Рафаель

1
Я вкладаю це, щоб назву класів складності можна говорити прямо тут. Так, Ландау більше стосується конкретного типу алгоритму в криптографії.
келалака

1
Я заперечую проти деяких поглядів @ Рафаеля. Я багато років був математиком і інструктором. Я вважаю, що, окрім доказів цих речей, великий столик на кшталт цього збільшує інтуїцію людей легко і значно. А назви асимптотичних класів допомагають людям пам’ятати і багато спілкуватися.
Apass.Jack

1
@ Apass.Jack З мого досвіду викладання, коли дають таблицю, багато студентів вивчать її напам’ять і не зможуть замовити wrt будь-яку функцію, що не знаходиться в таблиці. Зверніть увагу, як виглядає цей ефект, пов'язаний з багатьма питаннями щодо асимптотичного зростання, які є на цьому сайті. Це сказало, звичайно, ми будемо використовувати леммати, на які посилається таблиця, якщо вони полегшують докази, але це відбувається після того, як навчимось перевіряти таблицю. (Щоб підкреслити цю думку, людям, які приїжджають сюди , не потрібна допомога з читанням матеріалів за столом. Їм потрібна допомога щодо доказування відносин.)
Рафаель

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