Аналіз алгоритмів — це процес визначення обчислювальної складності алгоритмів, тобто кількості часу, пам'яті чи інших ресурсів, необхідних для виконання алгоритмів. Як правило, це передбачає визначення функції, яка пов'язує розмір вхідних даних алгоритму з кількістю кроків виконання (його часовою складністю) або кількістю місця, що він використовує (його просторовою складністю). Алгоритм вважається ефективним, якщо значення цієї функції малі або зростають повільно у порівнянні зі збільшенням розміру вхідних даних. Різні входи однакової довжини можуть призводити до різної поведінки алгоритму, тому [en] описи цих випадків можуть мати практичний інтерес. Якщо не вказано інше, функція, що описує складність алгоритму, зазвичай є верхньою межею, тобто, визначає його складність для найгірших випадків вхідних даних.
Термін «аналіз алгоритмів» був введений Дональдом Кнутом. Аналіз алгоритмів є важливою частиною більш загальної теорії обчислювальної складності, яка встановлює теоретичні оцінки ресурсів, необхідних будь-якому алгоритму, що вирішує задану [en]. Ці оцінки надають дослідникам розумні припущення щодо напрямків пошуку ефективних алгоритмів.
У теоретичному аналізі алгоритмів їх часто оцінюють в асимптотично, тобто, оцінкою функції складності для довільно великих вхідних даних. Для цього використовуються нотації «О» великого, (великих Омега і Тета). Наприклад, бінарний пошук виконується за кількість кроків, пропорційну логарифму довжини відсортованого списку, в якому ведеться пошук, або за O(log(n)), відоме як («логарифмічний час»). Звичайно асимптотичні оцінки використовуються тому, що різні рішення однієї і тієї ж задачі можуть мати різну ефективність. Звичною є ситуація коли ефективність двох «розумних» реалізацій одного алгоритму можуть відрізнятися сталим множником, який називається прихованою сталою.
Точні (не асимптотичні) вимірювання ефективності можуть бути обчислені, але потребують деяких припущень стосовно реалізації алгоритму, відомі як модель обчислення. Модель обчислення може бути визначена в термінах абстрактного комп'ютера, такого як машина Тюрінга, також в ній визначається час виконання кожної операції або робиться припущення, що всі операції виконуються за однаковий час. Наприклад, якщо відсортований список, до якого застосовується бінарний пошук, має n елементів, а також вважаємо, що кожна операція зчитування елемента списку виконується за якусь сталу одиницю часу, тоді, для отримання результату потрібно максимум log2 n + 1 одиниць часу.
Вагові моделі
Оцінки ефективності часу залежать від того, що ми визначаємо як крок алгоритму. Щоб аналіз відповідав дійсному часу виконання, час, необхідний для виконання кроку, повинен гарантовано бути обмеженим константою. Тут слід бути обережним; наприклад, деякі моделі аналізу підраховують суму двох чисел як один крок. В деяких випадках це припущення може сильно вплинути на результат аналізу. Наприклад, якщо числа, що беруть участь у обчисленні, можуть бути довільно великими, тоді час, необхідний для операції додавання, вже не можна вважати сталим.
В основному використовуються наступні дві моделі визначення вартості операції:
- модель рівномірної ваги, приписує константну вагу (час) для кожної машинної операції незалежно від розміру даних, які оброблюються кожною з цих операцій
- логарифмічна модель, приписує вагу для операції пропорційну кількості біт в їх операндах
Остання модель є більш обтяжливою у використанні, тому її використовують тільки тоді, коли це дійсно необхідно, наприклад, при аналізі арифметичних алгоритмів з довільною точністю, в тому числі тих, що використовуються в криптографії.
Ключовим моментом, який часто пропускається, є те, що загально відомі оцінки алгоритмічної складності задач часто призначені для більш обмеженої моделі обчислення, ніж набір операцій, які можна використовувати на практиці, тому в реальності існують швидші версії алгоритмів.
Аналіз часу виконання
Аналіз часу виконання є теоретичною класифікацією, що оцінює, а тому і передбачає, збільшення часу виконання алгоритму при збільшенні розміру його вхідних параметрів (зазвичай позначається як n). Ефективність виконання є цікавою з точки зору комп'ютерних наук: програма може виконуватись секунди, години або навіть роки, залежно від того, який алгоритм вона реалізує. Попри те, що методики профілювання програмного забезпечення використовуються для вимірювання часу виконання алгоритму на практиці, вони не можуть забезпечити дані часу для всієї безлічі можливих входів; останнє може бути досягнуто лише теоретичними методами аналізу.
Недоліки емпіричних метрик
Оскільки алгоритми є незалежними від платформи (тобто даний алгоритм може бути реалізований довільною мовою програмування на довільному комп'ютері, на якому працює довільна операційна система), існують додаткові істотні недоліки використання емпіричного підходу для порівняльної оцінки продуктивності даного набору алгоритмів.
Візьмемо як приклад програму, яка шукає певний запис у відсортованому списку розміру n. Припустимо, що ця програма була реалізована на комп'ютері A, найсучаснішій машині, використовуючи лінійний алгоритм пошуку, і на комп'ютері B, набагато повільнішій машині, використовуючи алгоритм бінарного пошуку. Тестування продуктивності відповідних програм на цих двох комп'ютерах може виглядати приблизно так:
n (довжина списку) | Час виконання на комп'ютері A (в наносекундах) | Час виконання на комп'ютері В (в наносекундах) |
---|---|---|
16 | 8 | 100 000 |
63 | 32 | 150 000 |
250 | 125 | 200 000 |
1 000 | 500 | 250 000 |
Виходячи з цих показників, було б легко дійти до висновку, що комп'ютер A виконує алгоритм, який набагато кращий за ефективністю від комп'ютера B. Однак, якщо розмір вхідного списку збільшити до достатньої кількості, становиться очевидним те, що це твердження помилкове:
n (довжина списку) | Час виконання на комп'ютері A (в наносекундах) | Час виконання на комп'ютері В (в наносекундах) |
---|---|---|
16 | 8 | 100 000 |
63 | 32 | 150 000 |
250 | 125 | 200 000 |
1 000 | 500 | 250 000 |
… | … | … |
1,000,000 | 500,000 | 500,000 |
4,000,000 | 2,000,000 | 550,000 |
16,000,000 | 8,000,000 | 600,000 |
… | … | … |
63,072 × 1012 | 31,536 × 1012 наносекунд, або 1 рік | 1,375,000 наносекунд, або 1.375 мілісекунд |
Комп'ютер A, який виконує програму лінійного пошуку, має [en] швидкість росту: це значить, що час виконання програми прямо пропорційний його вхідному розміру. Подвоєння вхідного розміру подвоює час виконання, чотирикратний вхідний розмір вчетверо збільшує час виконання і так далі. З іншого боку, комп'ютер B, який виконує програму бінарного пошуку, має логарифмічну швидкість росту. Чотирикратне збільшення вхідного розміру збільшує час виконання на постійну величину (в даному прикладі на 50000 нс). Попри те, що комп'ютер A нібито є швидшим, комп'ютер B неминуче перевершить комп'ютер А у часі виконання надалі, оскільки він виконує алгоритм з набагато меншою швидкістю зростання.
Порядки росту
Неформально можна сказати, що алгоритм демонструє швидкість росту порядку математичної функції, якщо за певним вхідним розміром n, функція помножена на позитивну константу забезпечує верхню межу або границю часу виконання цього алгоритму. Іншими словами, для заданого вхідного розміру n, що більше ніж деяка n0, і константи c, час роботи цього алгоритму ніколи не буде більше ніж . Ця концепція часто виражається за допомогою позначення «О» великого. Наприклад, при виконанні сортування включенням, коли розмір вхідних даних збільшується, час виконання [en], сортування включенням можна віднести до порядку .
Нотація «О» великого — це зручний спосіб виразити найгірший варіант даного алгоритму, хоча вона також може бути використана для вираження помірного випадку: наприклад, найгіршим сценарієм для швидкого сортування є , але час виконання в середньому дорівнює .
Актуальність
Аналіз алгоритмів є важливим на практиці, оскільки випадкове або ненавмисне використання неефективного алгоритму може суттєво вплинути на продуктивність системи. У чутливих до часу додатках, алгоритм, який займає занадто багато часу, може зробити його результати застарілими або непотрібними. Неефективними алгоритми можуть полягати у неекономному використанні обсягу обчислювальної потужності або пам'яті, що може робити його непотрібним в практичному сенсі.
Найбільш вибагливими у цьому сенсі є системи реального часу: алгоритми, що використовуються в них, повинні бути детермінованими, економними до ресурсів та швидкими, бо від них часто залежать людські життя або критична інфраструктура. Наприклад, автопілот літака чи автоматизована система керування ядерного реактора на АЕС.
Константні множники
Аналіз алгоритмів, як правило, зосереджується на асимптотичній продуктивності, особливо на елементарному рівні, але в реальних програмах постійні множники є дуже важливими, бо дані реального світу завжди обмежені за розмірами. Обмежені, як правило, розміром адресної пам'яті, тому на 32-бітних машинах це 232 = 4 ГБ (більше, якщо використовується сегментована пам'ять), і 264 = 16 EiB на 64-бітних машинах. Таким чином, з огляду на обмежений розмір, порядок росту (часу або простору) може бути замінений на постійний коефіцієнт, і в цьому сенсі всі реальні алгоритми є для достатньо великої константи або для досить малих даних.
Така інтерпретація в першу чергу корисна для функцій, які ростуть надзвичайно повільно: двійковий повторний логарифм () менше ніж 5 для всіх практичних даних (265536 біт); двійковий логарифм логарифма () менше ніж 6 для практично всіх даних (264 біт); і двійковий логарифм () менше ніж 64 для практично всіх реальних даних (264 біт). Алгоритм з нестійкою складністю може, тим не менш, бути більш ефективним на реальних даних, ніж алгоритм з постійною складністю, якщо накладні витрати на алгоритм постійного часу дають більший постійний коефіцієнт: наприклад, один з них може мати поки та .
Для великих даних лінійні або квадратичні множники не можуть бути проігноровані, але для малих даних асимптотично неефективний алгоритм може бути більш ефективним. Цей факт застосовується в [en], таких як Timsort, які використовують асимптотично ефективний алгоритм (у випадку Timsort — сортування злиттям, з часовою складністю ), але перемикаються на асимптотично неефективний (сортування включенням, з часовою складністю ) для малих даних, бо простіший алгоритм швидше на малих даних.
Див. також
Примітки
- . web.archive.org. 28 серпня 2016. Архів оригіналу за 28 серпня 2016. Процитовано 16 лютого 2019.
- Issel, W. (1979). Aho, A. V. / Hopcroft, J. E. / Ullman, J. D., The Design and Analysis of Computer Algorithms. London-Amsterdam-Don Mills-Sydney. Addison-Wesley Publ. Comp. 1974 X, 470 S., $ 24,–. ZAMM - Zeitschrift für Angewandte Mathematik und Mechanik (нім.). Т. 59, № 2. с. 141—141. doi:10.1002/zamm.19790590233. Процитовано 16 лютого 2019.
- 1958-, Hromkovič, Juraj, (2004). Theoretical computer science : introduction to Automata, computability, complexity, algorithmics, randomization, communication, and cryptography. Berlin: Springer. ISBN . OCLC 53007120.
- 1941-, Ausiello, G. (Giorgio), (1999). Complexity and approximation : combinatorial optimization problems and their approximability properties. New York: Springer. ISBN . OCLC 41967185.
- Ingo., Wegener, (2005). Complexity theory : exploring the limits of efficient algorithms. Berlin: Springer. ISBN . OCLC 262677781.
- 1948-, Tarjan, Robert E. (Robert Endre),. . Т. no:44. Philadelphia, Pa. ISBN . OCLC 10120539. Архів оригіналу за 4 вересня 2008. Процитовано 16 лютого 2019.
- . Theoretical Computer Science Stack Exchange. Архів оригіналу за 17 лютого 2019. Процитовано 17 лютого 2019.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Analiz algoritmiv ce proces viznachennya obchislyuvalnoyi skladnosti algoritmiv tobto kilkosti chasu pam yati chi inshih resursiv neobhidnih dlya vikonannya algoritmiv Yak pravilo ce peredbachaye viznachennya funkciyi yaka pov yazuye rozmir vhidnih danih algoritmu z kilkistyu krokiv vikonannya jogo chasovoyu skladnistyu abo kilkistyu miscya sho vin vikoristovuye jogo prostorovoyu skladnistyu Algoritm vvazhayetsya efektivnim yaksho znachennya ciyeyi funkciyi mali abo zrostayut povilno u porivnyanni zi zbilshennyam rozmiru vhidnih danih Rizni vhodi odnakovoyi dovzhini mozhut prizvoditi do riznoyi povedinki algoritmu tomu en opisi cih vipadkiv mozhut mati praktichnij interes Yaksho ne vkazano inshe funkciya sho opisuye skladnist algoritmu zazvichaj ye verhnoyu mezheyu tobto viznachaye jogo skladnist dlya najgirshih vipadkiv vhidnih danih Dlya poshuku zapisu mozhut vikoristovuvatisya algoritmi yak binarnogo tak i linijnogo poshuku V danomu prikladi poshuk ryadka Motin Athur u spisku dovzhinoyu 33 elementi dlya binarnogo poshuku vikonuyetsya za 5 krokiv poznacheno cianovim kolorom i za 28 krokiv dlya linijnogo madzhentovij kolir Grafiki funkcij sho chasto vikoristovuyutsya v algoritmichnomu analizi viznachayut kilkist operacij N v zalezhnosti vid rozmiru vhidnih danih n Termin analiz algoritmiv buv vvedenij Donaldom Knutom Analiz algoritmiv ye vazhlivoyu chastinoyu bilsh zagalnoyi teoriyi obchislyuvalnoyi skladnosti yaka vstanovlyuye teoretichni ocinki resursiv neobhidnih bud yakomu algoritmu sho virishuye zadanu en Ci ocinki nadayut doslidnikam rozumni pripushennya shodo napryamkiv poshuku efektivnih algoritmiv U teoretichnomu analizi algoritmiv yih chasto ocinyuyut v asimptotichno tobto ocinkoyu funkciyi skladnosti dlya dovilno velikih vhidnih danih Dlya cogo vikoristovuyutsya notaciyi O velikogo velikih Omega i Teta Napriklad binarnij poshuk vikonuyetsya za kilkist krokiv proporcijnu logarifmu dovzhini vidsortovanogo spisku v yakomu vedetsya poshuk abo za O log n vidome yak logarifmichnij chas Zvichajno asimptotichni ocinki vikoristovuyutsya tomu sho rizni rishennya odniyeyi i tiyeyi zh zadachi mozhut mati riznu efektivnist Zvichnoyu ye situaciya koli efektivnist dvoh rozumnih realizacij odnogo algoritmu mozhut vidriznyatisya stalim mnozhnikom yakij nazivayetsya prihovanoyu staloyu Tochni ne asimptotichni vimiryuvannya efektivnosti mozhut buti obchisleni ale potrebuyut deyakih pripushen stosovno realizaciyi algoritmu vidomi yak model obchislennya Model obchislennya mozhe buti viznachena v terminah abstraktnogo komp yutera takogo yak mashina Tyuringa takozh v nij viznachayetsya chas vikonannya kozhnoyi operaciyi abo robitsya pripushennya sho vsi operaciyi vikonuyutsya za odnakovij chas Napriklad yaksho vidsortovanij spisok do yakogo zastosovuyetsya binarnij poshuk maye n elementiv a takozh vvazhayemo sho kozhna operaciya zchituvannya elementa spisku vikonuyetsya za yakus stalu odinicyu chasu todi dlya otrimannya rezultatu potribno maksimum log2 n 1 odinic chasu Vagovi modeliOcinki efektivnosti chasu zalezhat vid togo sho mi viznachayemo yak krok algoritmu Shob analiz vidpovidav dijsnomu chasu vikonannya chas neobhidnij dlya vikonannya kroku povinen garantovano buti obmezhenim konstantoyu Tut slid buti oberezhnim napriklad deyaki modeli analizu pidrahovuyut sumu dvoh chisel yak odin krok V deyakih vipadkah ce pripushennya mozhe silno vplinuti na rezultat analizu Napriklad yaksho chisla sho berut uchast u obchislenni mozhut buti dovilno velikimi todi chas neobhidnij dlya operaciyi dodavannya vzhe ne mozhna vvazhati stalim V osnovnomu vikoristovuyutsya nastupni dvi modeli viznachennya vartosti operaciyi model rivnomirnoyi vagi pripisuye konstantnu vagu chas dlya kozhnoyi mashinnoyi operaciyi nezalezhno vid rozmiru danih yaki obroblyuyutsya kozhnoyu z cih operacij logarifmichna model pripisuye vagu dlya operaciyi proporcijnu kilkosti bit v yih operandah Ostannya model ye bilsh obtyazhlivoyu u vikoristanni tomu yiyi vikoristovuyut tilki todi koli ce dijsno neobhidno napriklad pri analizi arifmetichnih algoritmiv z dovilnoyu tochnistyu v tomu chisli tih sho vikoristovuyutsya v kriptografiyi Klyuchovim momentom yakij chasto propuskayetsya ye te sho zagalno vidomi ocinki algoritmichnoyi skladnosti zadach chasto priznacheni dlya bilsh obmezhenoyi modeli obchislennya nizh nabir operacij yaki mozhna vikoristovuvati na praktici tomu v realnosti isnuyut shvidshi versiyi algoritmiv Analiz chasu vikonannyaAnaliz chasu vikonannya ye teoretichnoyu klasifikaciyeyu sho ocinyuye a tomu i peredbachaye zbilshennya chasu vikonannya algoritmu pri zbilshenni rozmiru jogo vhidnih parametriv zazvichaj poznachayetsya yak n Efektivnist vikonannya ye cikavoyu z tochki zoru komp yuternih nauk programa mozhe vikonuvatis sekundi godini abo navit roki zalezhno vid togo yakij algoritm vona realizuye Popri te sho metodiki profilyuvannya programnogo zabezpechennya vikoristovuyutsya dlya vimiryuvannya chasu vikonannya algoritmu na praktici voni ne mozhut zabezpechiti dani chasu dlya vsiyeyi bezlichi mozhlivih vhodiv ostannye mozhe buti dosyagnuto lishe teoretichnimi metodami analizu Nedoliki empirichnih metrik Oskilki algoritmi ye nezalezhnimi vid platformi tobto danij algoritm mozhe buti realizovanij dovilnoyu movoyu programuvannya na dovilnomu komp yuteri na yakomu pracyuye dovilna operacijna sistema isnuyut dodatkovi istotni nedoliki vikoristannya empirichnogo pidhodu dlya porivnyalnoyi ocinki produktivnosti danogo naboru algoritmiv Vizmemo yak priklad programu yaka shukaye pevnij zapis u vidsortovanomu spisku rozmiru n Pripustimo sho cya programa bula realizovana na komp yuteri A najsuchasnishij mashini vikoristovuyuchi linijnij algoritm poshuku i na komp yuteri B nabagato povilnishij mashini vikoristovuyuchi algoritm binarnogo poshuku Testuvannya produktivnosti vidpovidnih program na cih dvoh komp yuterah mozhe viglyadati priblizno tak n dovzhina spisku Chas vikonannya na komp yuteri A v nanosekundah Chas vikonannya na komp yuteri V v nanosekundah 16 8 100 000 63 32 150 000 250 125 200 000 1 000 500 250 000 Vihodyachi z cih pokaznikiv bulo b legko dijti do visnovku sho komp yuter A vikonuye algoritm yakij nabagato krashij za efektivnistyu vid komp yutera B Odnak yaksho rozmir vhidnogo spisku zbilshiti do dostatnoyi kilkosti stanovitsya ochevidnim te sho ce tverdzhennya pomilkove n dovzhina spisku Chas vikonannya na komp yuteri A v nanosekundah Chas vikonannya na komp yuteri V v nanosekundah 16 8 100 000 63 32 150 000 250 125 200 000 1 000 500 250 000 1 000 000 500 000 500 000 4 000 000 2 000 000 550 000 16 000 000 8 000 000 600 000 63 072 1012 31 536 1012 nanosekund abo 1 rik 1 375 000 nanosekund abo 1 375 milisekund Komp yuter A yakij vikonuye programu linijnogo poshuku maye en shvidkist rostu ce znachit sho chas vikonannya programi pryamo proporcijnij jogo vhidnomu rozmiru Podvoyennya vhidnogo rozmiru podvoyuye chas vikonannya chotirikratnij vhidnij rozmir vchetvero zbilshuye chas vikonannya i tak dali Z inshogo boku komp yuter B yakij vikonuye programu binarnogo poshuku maye logarifmichnu shvidkist rostu Chotirikratne zbilshennya vhidnogo rozmiru zbilshuye chas vikonannya na postijnu velichinu v danomu prikladi na 50000 ns Popri te sho komp yuter A nibito ye shvidshim komp yuter B neminuche perevershit komp yuter A u chasi vikonannya nadali oskilki vin vikonuye algoritm z nabagato menshoyu shvidkistyu zrostannya Poryadki rostu Neformalno mozhna skazati sho algoritm demonstruye shvidkist rostu poryadku matematichnoyi funkciyi yaksho za pevnim vhidnim rozmirom n funkciya f n displaystyle f n pomnozhena na pozitivnu konstantu zabezpechuye verhnyu mezhu abo granicyu chasu vikonannya cogo algoritmu Inshimi slovami dlya zadanogo vhidnogo rozmiru n sho bilshe nizh deyaka n0 i konstanti c chas roboti cogo algoritmu nikoli ne bude bilshe nizh c f n displaystyle c times f n Cya koncepciya chasto virazhayetsya za dopomogoyu poznachennya O velikogo Napriklad pri vikonanni sortuvannya vklyuchennyam koli rozmir vhidnih danih zbilshuyetsya chas vikonannya en sortuvannya vklyuchennyam mozhna vidnesti do poryadku O n 2 displaystyle O n 2 Notaciya O velikogo ce zruchnij sposib viraziti najgirshij variant danogo algoritmu hocha vona takozh mozhe buti vikoristana dlya virazhennya pomirnogo vipadku napriklad najgirshim scenariyem dlya shvidkogo sortuvannya ye O n 2 displaystyle O n 2 ale chas vikonannya v serednomu dorivnyuye O n log n displaystyle O n log n AktualnistAnaliz algoritmiv ye vazhlivim na praktici oskilki vipadkove abo nenavmisne vikoristannya neefektivnogo algoritmu mozhe suttyevo vplinuti na produktivnist sistemi U chutlivih do chasu dodatkah algoritm yakij zajmaye zanadto bagato chasu mozhe zrobiti jogo rezultati zastarilimi abo nepotribnimi Neefektivnimi algoritmi mozhut polyagati u neekonomnomu vikoristanni obsyagu obchislyuvalnoyi potuzhnosti abo pam yati sho mozhe robiti jogo nepotribnim v praktichnomu sensi Najbilsh vibaglivimi u comu sensi ye sistemi realnogo chasu algoritmi sho vikoristovuyutsya v nih povinni buti determinovanimi ekonomnimi do resursiv ta shvidkimi bo vid nih chasto zalezhat lyudski zhittya abo kritichna infrastruktura Napriklad avtopilot litaka chi avtomatizovana sistema keruvannya yadernogo reaktora na AES Konstantni mnozhnikiAnaliz algoritmiv yak pravilo zoseredzhuyetsya na asimptotichnij produktivnosti osoblivo na elementarnomu rivni ale v realnih programah postijni mnozhniki ye duzhe vazhlivimi bo dani realnogo svitu zavzhdi obmezheni za rozmirami Obmezheni yak pravilo rozmirom adresnoyi pam yati tomu na 32 bitnih mashinah ce 232 4 GB bilshe yaksho vikoristovuyetsya segmentovana pam yat i 264 16 EiB na 64 bitnih mashinah Takim chinom z oglyadu na obmezhenij rozmir poryadok rostu chasu abo prostoru mozhe buti zaminenij na postijnij koeficiyent i v comu sensi vsi realni algoritmi ye O 1 displaystyle O 1 dlya dostatno velikoyi konstanti abo dlya dosit malih danih Taka interpretaciya v pershu chergu korisna dlya funkcij yaki rostut nadzvichajno povilno dvijkovij povtornij logarifm log 2 displaystyle log 2 menshe nizh 5 dlya vsih praktichnih danih 265536 bit dvijkovij logarifm logarifma log 2 log 2 n displaystyle log 2 log 2 n menshe nizh 6 dlya praktichno vsih danih 264 bit i dvijkovij logarifm log 2 n displaystyle log 2 n menshe nizh 64 dlya praktichno vsih realnih danih 264 bit Algoritm z nestijkoyu skladnistyu mozhe tim ne mensh buti bilsh efektivnim na realnih danih nizh algoritm z postijnoyu skladnistyu yaksho nakladni vitrati na algoritm postijnogo chasu dayut bilshij postijnij koeficiyent napriklad odin z nih mozhe mati K gt k log log n displaystyle K gt k log log n poki K k gt 6 displaystyle K k gt 6 ta n lt 2 2 6 2 64 displaystyle n lt 2 2 6 2 64 Dlya velikih danih linijni abo kvadratichni mnozhniki ne mozhut buti proignorovani ale dlya malih danih asimptotichno neefektivnij algoritm mozhe buti bilsh efektivnim Cej fakt zastosovuyetsya v en takih yak Timsort yaki vikoristovuyut asimptotichno efektivnij algoritm u vipadku Timsort sortuvannya zlittyam z chasovoyu skladnistyu n log n displaystyle n log n ale peremikayutsya na asimptotichno neefektivnij sortuvannya vklyuchennyam z chasovoyu skladnistyu n 2 displaystyle n 2 dlya malih danih bo prostishij algoritm shvidshe na malih danih Div takozhAnaliz paralelnih algoritmiv Amortizacijnij analiz Chasova skladnist algoritmu Chiselni metodi NP povna zadacha Majster metod Teoriya skladnosti obchislen Optimizaciya Profilyuvannya Masshtabovnist Chiselni metodi optimizaciyiPrimitki web archive org 28 serpnya 2016 Arhiv originalu za 28 serpnya 2016 Procitovano 16 lyutogo 2019 Issel W 1979 Aho A V Hopcroft J E Ullman J D The Design and Analysis of Computer Algorithms London Amsterdam Don Mills Sydney Addison Wesley Publ Comp 1974 X 470 S 24 ZAMM Zeitschrift fur Angewandte Mathematik und Mechanik nim T 59 2 s 141 141 doi 10 1002 zamm 19790590233 Procitovano 16 lyutogo 2019 1958 Hromkovic Juraj 2004 Theoretical computer science introduction to Automata computability complexity algorithmics randomization communication and cryptography Berlin Springer ISBN 3540140158 OCLC 53007120 1941 Ausiello G Giorgio 1999 Complexity and approximation combinatorial optimization problems and their approximability properties New York Springer ISBN 3540654313 OCLC 41967185 Ingo Wegener 2005 Complexity theory exploring the limits of efficient algorithms Berlin Springer ISBN 9783540274773 OCLC 262677781 1948 Tarjan Robert E Robert Endre T no 44 Philadelphia Pa ISBN 0898711878 OCLC 10120539 Arhiv originalu za 4 veresnya 2008 Procitovano 16 lyutogo 2019 Theoretical Computer Science Stack Exchange Arhiv originalu za 17 lyutogo 2019 Procitovano 17 lyutogo 2019