Ефективність алгоритму — це властивість алгоритму, пов'язана з обчислювальними ресурсами, використовуваними алгоритмом. Алгоритм повинен бути проаналізований з метою визначення необхідних йому ресурсів. Ефективність алгоритму можна розглядати як аналог виробничої продуктивності повторюваних або безперервних процесів.
Для досягнення максимальної ефективності бажано зменшити використання ресурсів. Однак різні ресурси (такі як час і пам'ять) не можна порівняти безпосередньо, тому який із двох алгоритмів вважати більш ефективним часто залежить від того, який фактор важливіший, наприклад, вимога високої швидкості, мінімального використання пам'яті чи інша міра ефективності.
- Зауважимо, що дана стаття НЕ про оптимізацію алгоритму, яка обговорюється в статтях оптимізація програми, оптимізувальний компілятор, оптимізація циклів, [en] тощо. Термін «оптимізація» сам по собі вводить в оману, оскільки все, що може бути зроблено, потрапляє під визначення «покращення».
Історія питання
Важливість ефективності у плані часу виконання підкреслювала Ада Лавлейс у 1843 році з приводу механічної аналітичної машини Чарлза Беббіджа:
Майже у всіх обчисленнях можливий великий вибір конфігурацій для успішного завершення процесу і різні угоди повинні впливати на вибір з метою виконання обчислень. Істотна річ - вибір конфігурації, яка приведе до мінімізації часу, необхідного для виконання обчислення.» | ||
— |
Ранні електронні комп'ютери були дуже обмежені як за швидкістю, так і за пам'яттю. У деяких випадках було усвідомлено, що існує компроміс часу і пам'яті, за якого задача повинна або використовувати велику кількість пам'яті для досягнення високої швидкості, або застосовувати більш повільний алгоритм, який використовує невелику кількість робочої пам'яті. В цьому випадку використовувався найбільш швидкий алгоритм, для якого вистачало наявної пам'яті.
Сучасні комп'ютери набагато швидші від тих ранніх комп'ютерів і мають значно більше пам'яті (гігабайти замість кілобайт). Проте, Дональд Кнут підкреслює, що ефективність залишається важливим фактором:
В усталених технічних дисциплінах поліпшення на 12% легко досяжне, ніколи не вважалося позамежним і я вірю, що так само повинно бути у програмуванні» | ||
— |
Огляд
Алгоритм вважається ефективним, якщо споживаний ним ресурс (або вартість ресурсу) на рівні або нижче деякого прийнятного рівня. Грубо кажучи, «прийнятний» тут означає «алгоритм буде працювати помірний час на доступному комп'ютері». Оскільки з 1950-х років спостерігалося значне збільшення обчислювальної потужності і доступної пам'яті комп'ютерів, сучасний «прийнятний рівень» не був прийнятним навіть 10 років тому.
Виробники комп'ютерів періодично випускають нові моделі, часто більш потужні. Вартість програмного забезпечення може бути досить велика, так що в деяких випадках простіше і дешевше для досягнення кращої продуктивності купити швидший комп'ютер, що забезпечує сумісність з наявним комп'ютером.
Існує багато шляхів вимірювання використовуваних алгоритмом ресурсів. Два найбільш використовуваних вимірювання — швидкість і використовувана пам'ять. Інші вимірювання можуть включати швидкість, тимчасове використання диска, тривале використання диска, споживання енергії, сукупна вартість володіння, час відгуку на зовнішні сигнали тощо. Багато з цих вимірювань залежать від обсягу вхідних даних алгоритму (тобто від кількостей даних, що вимагають обробки). Вимірювання можуть також залежати від того, як подані дані (наприклад, деякі алгоритми сортування погано працюють на вже відсортованих даних або коли дані відсортовані в зворотному порядку).
На практиці існують й інші чинники, що впливають на ефективність алгоритму, такі як необхідна точність і/або надійність. Як пояснено нижче, спосіб реалізації алгоритму може також істотно вплинути на фактичну ефективність, хоча багато аспектів реалізації відносяться до питань оптимізації.
Теоретичний аналіз
У теоретичному аналізі алгоритмів звичайною практикою є оцінювання складності алгоритму в його асимптотичній поведінці, тобто для відображення складності алгоритму як функції від розміру входу n використовується нотація «O» велике. Ця оцінка, переважно, досить точна при великому n, але може привести до неправильних висновків при малих значеннях n (так, сортування бульбашкою, яке вважається повільним, може виявитися швидшим, ніж «швидке сортування», якщо потрібно впорядкувати лише кілька елементів).
Деякі приклади нотації «O» велике :
позначення | Назва | приклади |
---|---|---|
постійне | Визначення, парне чи непарне число. Використання таблиці пошуку постійного розміру. Використання підхожої хеш-функції для вибору елемента. | |
логарифмічне | Знаходження елемента у відсортованому масиві за допомогою двійкового пошуку або збалансованого дерева, як і операції в біноміальній купі. | |
лінійне | Пошук елемента в несортованому списку або незбалансованому дереві (найгірший випадок). Додавання двох n-бітних чисел з використанням наскрізного переносу. | |
квазілінійне, логарифмічно лінійне | Обчислення швидкого перетворення Фур'є, пірамідальне сортування, швидке сортування (кращий і середній випадок), сортування злиттям | |
квадратне | Множення двох n-значних чисел за допомогою простого алгоритму, сортування бульбашкою (найгірший випадок), сортування Шелла, швидке сортування (найгірший випадок), сортування вибором, сортування вставками | |
експоненціальне | Знаходження (точного) розв'язку задачі комівояжера за допомогою динамічного програмування. Визначення, чи є два логічних твердження еквівалентними за допомогою повного перебору |
Перевірні випробування: вимірювання продуктивності
Для нових версій програмного забезпечення або для забезпечення порівняння з конкурентними системами іноді використовуються тести, що дозволяють порівняти відносну продуктивність алгоритмів. Якщо, наприклад, випускається новий алгоритм сортування, його можна порівняти з попередниками, щоб переконатися, що алгоритм щонайменше настільки ж ефективний на відомих даних, як і інші. Тести продуктивності можуть бути використані користувачами для порівняння продуктів від різних виробників для оцінки, який продукт буде більше підходити під їхні вимоги в термінах функціональності і продуктивності.
Деякі тести продуктивності дають можливість проведення порівняльного аналізу різних компільованих і інтерпретованих мов, як, наприклад, Roy Longbottom's PC Benchmark Collection, а [en] порівнює продуктивність реалізацій типових задач в деяких мовах програмування.
Досить легко створити «саморобні» тести продуктивності для отримання уявлення про відносну ефективність різних мов програмування, використовуючи набір користувацьких критеріїв, як це зробив Хрістофер Коувел-Шаг у статті «Nine language Performance roundup»).
Питання реалізації
Питання реалізації можуть також вплинути на фактичну ефективність. Це стосується вибору мови програмування і способу, яким алгоритм фактично закодований, вибору транслятора для вибраної мови або використовуваних опцій компілятора, і навіть операційної системи. У деяких випадках мова, реалізована у вигляді інтерпретатора, може виявитися істотно повільнішою, ніж мова, реалізована у вигляді компілятора.
Є й інші чинники, які можуть вплинути на час або використовувану пам'ять, але які виявляються поза контролем програміста. Сюди потрапляють вирівнювання даних, [en][], прибирання сміття, паралелізм на рівні команд і виклик підпрограм.
Деякі процесори мають здатність виконувати векторні операції, що дозволяє однією операцією опрацювати кілька операндів. Може виявитися просто або непросто використовувати такі можливості на рівні програмування або компіляції. Алгоритми, розроблені для послідовних обчислень, можуть зажадати повної переробки для використання паралельних обчислень .
Інша проблема може виникнути з сумісністю процесорів, в яких команди можна реалізувати по іншому, так що команди на одних моделях можуть бути відносно повільнішими на інших моделях. Це може виявитися проблемою для оптимізувального компілятора.
Вимірювання використання ресурсів
Вимірювання зазвичай виражаються як функція від розміру входу n.
Два найважливіших вимірювання:
- Час: як довго алгоритм займає процесор.
- Пам'ять: як багато робочої пам'яті (зазвичай RAM) потрібно для алгоритму. Тут є два аспекти: кількість пам'яті для коду і кількість пам'яті для даних, з якими код працює.
Для комп'ютерів, які живляться від батарей (наприклад, лептопів) або для дуже довгих/великих обчислень (наприклад, на суперкомп'ютерах), становлять інтерес вимірювання іншого роду:
- Пряме споживання енергії: енергія, необхідна для роботи комп'ютера.
- Непряме споживання енергії: енергія, необхідна для охолодження, освітлення тощо.
У деяких випадках потрібні інші, менш поширені вимірювання:
- Розмір передачі: пропускна здатність каналу може виявитися обмежувальним фактором. Для зменшення кількості переданих даних можна використовувати стиснення. Показ малюнка або зображення (як, наприклад, Google logo) може передбачати передавання десятків тисяч байт (232K в даному випадку). Порівняйте це з передачею шести байт у слові «Google».
- Зовнішня пам'ять: пам'ять, необхідна на диску або іншому пристрої зовнішньої пам'яті. Ця пам'ять може використовуватися для тимчасового зберігання або для майбутнього використання.
- Час відгуку: параметр особливо важливий для застосунків, що працюють у реальному часі, коли комп'ютер повинен швидко відповідати на зовнішні події.
- Загальна вартість володіння: параметр важливий, коли призначений для виконання одного алгоритму.
Час
Теорія
Для аналізу алгоритму зазвичай використовується аналіз часової складності алгоритму, щоб оцінити час роботи як функцію від розміру вхідних даних. Результат зазвичай виражається в термінах «O» велике . Це корисно для порівняння алгоритмів, особливо в разі обробки великої кількості даних. Більш детальні оцінки потрібні для порівняння алгоритмів, коли обсяг даних малий (хоча така ситуація навряд чи викличе проблеми). Алгоритми, які включають паралельні обчислення, можуть виявитися важчими для аналізу.
Практика
Використовуються порівняльні тести часу роботи алгоритму. Багато мов програмування містять функції, що відображають час використання процесора. Для алгоритмів, що працюють довго, витрачений час також може являти інтерес. Результати в загальному випадку потрібно усереднювати за серією тестів.
Цей вид тестів може бути дуже чутливим до зміни обладнання і можливості роботи інших програм у той самий час у багатопроцесорному і багатозадачному середовищі.
Цей вид тестів істотно залежить також від вибору мови програмування, компілятора і його опцій, так що порівнювані алгоритми повинні бути реалізовані в однакових умовах.
Пам'ять
Цей розділ стосується використання основної пам'яті (найчастіше, RAM) потрібної алгоритму. Як і для часового аналізу вище, для аналізу алгоритму зазвичай використовується аналіз [en], щоб оцінити необхідну пам'ять часу виконання як функцію від розміру входу. Результат зазвичай виражається в термінах «O» велике.
Існує чотири аспекти використання пам'яті:
- Кількість пам'яті, необхідна для зберігання коду алгоритму.
- Кількість пам'яті, необхідна для вхідних даних.
- Кількість пам'яті, необхідна для будь-яких вихідних даних (деякі алгоритми, такі як сортування, часто переставляють вхідні дані і не вимагають додаткової пам'яті для вихідних даних).
- Кількість пам'яті, необхідна для обчислювального процесу під час обчислень (сюди входять іменовані змінні і будь-який стековий простір, необхідний для виклику підпрограм, який може бути суттєвим при використанні рекурсії).
Ранні електронні комп'ютери і домашні комп'ютери мали відносно малий обсяг робочої пам'яті. Так, в 1949 EDSAC мав найбільшу робочу пам'ять 1024 17-бітних слів, а в 1980 Sinclair ZX80 випускався з 1024 байтами робочої пам'яті.
Сучасні комп'ютери можуть мати відносно велику кількість пам'яті (можливо, гігабайти), так що вміщення використовуваної алгоритмом пам'яті в деякий заданий обсяг потрібно менше, ніж раніше. Однак існування трьох різних категорій пам'яті істотне:
- Кеш (часто, статична RAM) — працює на швидкостях, порівнянних з ЦПУ
- Основна фізична пам'ять (часто, динамічна RAM) — працює трохи повільніше, ніж ЦПУ
- Віртуальна пам'ять (найчастіше, на диску) — дає ілюзію величезної пам'яті, але працює в тисячі разів повільніше, ніж RAM.
Алгоритм, необхідна пам'ять якого укладається в кеш комп'ютера, працює значно швидше, ніж алгоритм, що уміщається в основну пам'ять, який, в свою чергу, буде значно швидшим від алгоритму, який використовує віртуальний простір. Ускладнює ситуацію факт, що деякі системи мають до трьох рівнів кешу. Різні системи мають різні обсяги цих типів пам'яті, так що ефект пам'яті для алгоритму може істотно відрізнятися при переході від однієї системи до іншої.
У ранні дні електронних обчислень, якщо алгоритм і його дані не вміщалися в основну пам'ять, він не міг використовуватися. В наші дні використання віртуальної пам'яті забезпечує величезну пам'ять, але за рахунок продуктивності. Якщо алгоритм і його дані вміщаються в кеш, можна отримати дуже високу швидкість, так що мінімізація необхідної пам'яті допомагає мінімізувати час. Алгоритм, який не поміщається повністю в кеш, але забезпечує [en], може працювати порівняно швидко.
Приклади ефективних алгоритмів
- Швидке сортування, перший відомий алгоритм зі швидкістю близько
- Пірамідальне сортування, інший швидкий алгоритм сортування
- Двійковий пошук для пошуку в упорядкованій таблиці
- Алгоритм Бойера — Мура для пошуку рядка всередині іншого рядка
Критика поточного стану програмування
- [en], британський учений в галузі інформатики, професор інформатики Бристольського університету, засновник і головний інженер [en] вважає, що одна з проблем полягає в існуванні віри, що закон Мура вирішує питання неефективності. Він запропонував «альтернативний» закон Мура ([ru]) :
Програми стають повільнішими більш стрімко, ніж комп'ютери стають швидшими. |
- Мей стверджує:
В широко розповсюджених системах зменшення вдвічі виконання команд може подвоїти життя батареї, а великі дані дають можливість для кращих алгоритмів: Зменшення числа операцій з N x N до N x log (N) має сильний ефект при великих N... Для N = 30 мільярдів, ці зміни аналогічні 50 рокам технологічних поліпшень. |
- Програміст Адам Н. Розербург у своєму блозі «The failure of the Digital computer», описав поточний стан програмування як близький до «Software event horizon» (рівню програмної катастрофи, натяк на фантастичний «shoe event horizon» (рівень взуттєвої катастрофи), описаний Дугласом Адамсом в його книзі «Автостопом по галактиці»). Він оцінив падіння продуктивності на 70 dB, або на «99.99999 % від можливого», в порівнянні з 1980-ми роками — «коли Артур Кларк порівняв обчислювальні здатності комп'ютерів 2001 з комп'ютером HAL у книзі „2001: Космічна Одіссея“, він вказав, що на диво малі і потужні були комп'ютери, але програми стали сумно розчаровувати».
Змагання за кращий алгоритм
Проводяться змагання з розробки кращих алгоритмів, критерій якості яких визначають судді:
Див. також
- Аналіз алгоритмів
- Арифметичне кодування — вид ентропійного кодування [en] для ефективного стиснення даних
- Асоціативний масив — структура даних, яку можна зробити більш ефективною при застосуванні дерев PATRICIA або [en]
- Тест продуктивності — метод вимірювання порівняльного часу виконання в певних випадках
- [en] — домовленості щодо оцінки часу виконання за трьома сценаріями
- Двійковий пошук — проста і ефективна техніка пошуку у відсортованому списку
- [en] — техніка скорочення довжини команд, розміру машинного коду, і найчастіше, пам'яті
- Оптимізувальний компілятор — компілятор, який використовує різні методи отримання більш оптимального програмного коду при збереженні функціональних можливостей
- [en]
- Обчислювальна складність — поняття в інформатиці, що позначає залежності обсягу роботи від розміру вхідних даних
- Обчислювальна потужність комп'ютера — кількісна характеристика швидкості виконання операцій на комп'ютері
- Стиснення даних — скорочення обсягу передаваних даних і займаного дискового простору
- Індекс — дані, що збільшують швидкість вибірки даних з таблиць
- Ентропійне кодування — кодування послідовності значень з можливістю однозначного відновлення з метою зменшення обсягу даних (довжини послідовності) за допомогою усереднення ймовірностей появи елементів у закодованій послідовності
- Збирання сміття — автоматичне звільнення пам'яті після використання
- Зелені інформаційні технології — рух за впровадження «зелених» технологій, які споживають менше ресурсів
- Код Гаффмана — алгоритм ефективного кодування даних
- Improving Managed code Performance [ 24 грудня 2017 у Wayback Machine.] — Microsoft MSDN Library
- — щоб уникнути затримок, викликаних кешуванням через доступ до нелокальної пам'яті
- Оптимізація циклів
- Керування пам'яттю
- Оптимізація (інформатика)
- Аналіз продуктивності — методи вимірювання фактичної продуктивності алгоритму в реальному часі
- Обчислення в реальному часі — приклад критичних за часом застосунків
- Випереджувальне виконання, коли обчислення проводяться, навіть якщо ще невідомо, чи знадобляться їх результати, або [en] як протилежність ледачих обчислень
- Часова багатопотоковість
- Шитий код — один із способів реалізації проміжної віртуальної машини при інтерпретації мов програмування (поряд з байт-кодом)
- Таблиця віртуальних методів — механізм підтримки динамічної відповідності (або методу пізнього зв'язування)
Примітки
- Green, 2013.
- Knuth, 1974.
- Benchmark History.
- . Архів оригіналу за 28 листопада 2019. Процитовано 28 листопада 2019.
- Floating Point Benchmark.
- Steele, 1977.
- (PDF). Архів оригіналу (PDF) за 3 березня 2016. Процитовано 14 вересня 2017.
- . Архів оригіналу за 23 листопада 2019. Процитовано 28 листопада 2019.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - Fagone, Jason (29 листопада 2010). . Wired. Архів оригіналу за 16 березня 2014. Процитовано 28 листопада 2019.
Література
- Christopher Green (2013). . Архів оригіналу за 27 вересня 2013. Процитовано 19 травня 2013.
- Knuth D. Structured Programming with go-to Statements : [ 24 серпня 2009] // Computing Surveys. — ACM, 1974. — Т. 6, вип. 4.
- . Roylongbottom.org.uk. Архів оригіналу за 15 січня 2012. Процитовано 14 грудня 2011.
- . Fourmilab.ch. 4 серпня 2005. Архів оригіналу за 11 грудня 2011. Процитовано 14 грудня 2011.
- Guy Lewis Steele, Jr. Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO // MIT AI Lab. AI Lab Memo AIM-443.. — 1977. — October.
Посилання
- (Java-аплет)
- Виступ Кельвіна Славіна на TED-конференції .
- Misconceptions about algorithmic efficiency in high-schools
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Efektivnist algoritmu ce vlastivist algoritmu pov yazana z obchislyuvalnimi resursami vikoristovuvanimi algoritmom Algoritm povinen buti proanalizovanij z metoyu viznachennya neobhidnih jomu resursiv Efektivnist algoritmu mozhna rozglyadati yak analog virobnichoyi produktivnosti povtoryuvanih abo bezperervnih procesiv Dlya dosyagnennya maksimalnoyi efektivnosti bazhano zmenshiti vikoristannya resursiv Odnak rizni resursi taki yak chas i pam yat ne mozhna porivnyati bezposeredno tomu yakij iz dvoh algoritmiv vvazhati bilsh efektivnim chasto zalezhit vid togo yakij faktor vazhlivishij napriklad vimoga visokoyi shvidkosti minimalnogo vikoristannya pam yati chi insha mira efektivnosti Zauvazhimo sho dana stattya NE pro optimizaciyu algoritmu yaka obgovoryuyetsya v stattyah optimizaciya programi optimizuvalnij kompilyator optimizaciya cikliv en tosho Termin optimizaciya sam po sobi vvodit v omanu oskilki vse sho mozhe buti zrobleno potraplyaye pid viznachennya pokrashennya Istoriya pitannyaVazhlivist efektivnosti u plani chasu vikonannya pidkreslyuvala Ada Lavlejs u 1843 roci z privodu mehanichnoyi analitichnoyi mashini Charlza Bebbidzha Majzhe u vsih obchislennyah mozhlivij velikij vibir konfiguracij dlya uspishnogo zavershennya procesu i rizni ugodi povinni vplivati na vibir z metoyu vikonannya obchislen Istotna rich vibir konfiguraciyi yaka privede do minimizaciyi chasu neobhidnogo dlya vikonannya obchislennya Ranni elektronni komp yuteri buli duzhe obmezheni yak za shvidkistyu tak i za pam yattyu U deyakih vipadkah bulo usvidomleno sho isnuye kompromis chasu i pam yati za yakogo zadacha povinna abo vikoristovuvati veliku kilkist pam yati dlya dosyagnennya visokoyi shvidkosti abo zastosovuvati bilsh povilnij algoritm yakij vikoristovuye neveliku kilkist robochoyi pam yati V comu vipadku vikoristovuvavsya najbilsh shvidkij algoritm dlya yakogo vistachalo nayavnoyi pam yati Suchasni komp yuteri nabagato shvidshi vid tih rannih komp yuteriv i mayut znachno bilshe pam yati gigabajti zamist kilobajt Prote Donald Knut pidkreslyuye sho efektivnist zalishayetsya vazhlivim faktorom V ustalenih tehnichnih disciplinah polipshennya na 12 legko dosyazhne nikoli ne vvazhalosya pozamezhnim i ya viryu sho tak samo povinno buti u programuvanni OglyadAlgoritm vvazhayetsya efektivnim yaksho spozhivanij nim resurs abo vartist resursu na rivni abo nizhche deyakogo prijnyatnogo rivnya Grubo kazhuchi prijnyatnij tut oznachaye algoritm bude pracyuvati pomirnij chas na dostupnomu komp yuteri Oskilki z 1950 h rokiv sposterigalosya znachne zbilshennya obchislyuvalnoyi potuzhnosti i dostupnoyi pam yati komp yuteriv suchasnij prijnyatnij riven ne buv prijnyatnim navit 10 rokiv tomu Virobniki komp yuteriv periodichno vipuskayut novi modeli chasto bilsh potuzhni Vartist programnogo zabezpechennya mozhe buti dosit velika tak sho v deyakih vipadkah prostishe i deshevshe dlya dosyagnennya krashoyi produktivnosti kupiti shvidshij komp yuter sho zabezpechuye sumisnist z nayavnim komp yuterom Isnuye bagato shlyahiv vimiryuvannya vikoristovuvanih algoritmom resursiv Dva najbilsh vikoristovuvanih vimiryuvannya shvidkist i vikoristovuvana pam yat Inshi vimiryuvannya mozhut vklyuchati shvidkist timchasove vikoristannya diska trivale vikoristannya diska spozhivannya energiyi sukupna vartist volodinnya chas vidguku na zovnishni signali tosho Bagato z cih vimiryuvan zalezhat vid obsyagu vhidnih danih algoritmu tobto vid kilkostej danih sho vimagayut obrobki Vimiryuvannya mozhut takozh zalezhati vid togo yak podani dani napriklad deyaki algoritmi sortuvannya pogano pracyuyut na vzhe vidsortovanih danih abo koli dani vidsortovani v zvorotnomu poryadku Na praktici isnuyut j inshi chinniki sho vplivayut na efektivnist algoritmu taki yak neobhidna tochnist i abo nadijnist Yak poyasneno nizhche sposib realizaciyi algoritmu mozhe takozh istotno vplinuti na faktichnu efektivnist hocha bagato aspektiv realizaciyi vidnosyatsya do pitan optimizaciyi Teoretichnij analiz U teoretichnomu analizi algoritmiv zvichajnoyu praktikoyu ye ocinyuvannya skladnosti algoritmu v jogo asimptotichnij povedinci tobto dlya vidobrazhennya skladnosti algoritmu yak funkciyi vid rozmiru vhodu n vikoristovuyetsya notaciya O velike Cya ocinka perevazhno dosit tochna pri velikomu n ale mozhe privesti do nepravilnih visnovkiv pri malih znachennyah n tak sortuvannya bulbashkoyu yake vvazhayetsya povilnim mozhe viyavitisya shvidshim nizh shvidke sortuvannya yaksho potribno vporyadkuvati lishe kilka elementiv Deyaki prikladi notaciyi O velike poznachennya Nazva prikladiO 1 displaystyle O 1 postijne Viznachennya parne chi neparne chislo Vikoristannya tablici poshuku postijnogo rozmiru Vikoristannya pidhozhoyi hesh funkciyi dlya viboru elementa O log n displaystyle O log n logarifmichne Znahodzhennya elementa u vidsortovanomu masivi za dopomogoyu dvijkovogo poshuku abo zbalansovanogo dereva yak i operaciyi v binomialnij kupi O n displaystyle O n linijne Poshuk elementa v nesortovanomu spisku abo nezbalansovanomu derevi najgirshij vipadok Dodavannya dvoh n bitnih chisel z vikoristannyam naskriznogo perenosu O nlog n displaystyle O n log n kvazilinijne logarifmichno linijne Obchislennya shvidkogo peretvorennya Fur ye piramidalne sortuvannya shvidke sortuvannya krashij i serednij vipadok sortuvannya zlittyamO n2 displaystyle O n 2 kvadratne Mnozhennya dvoh n znachnih chisel za dopomogoyu prostogo algoritmu sortuvannya bulbashkoyu najgirshij vipadok sortuvannya Shella shvidke sortuvannya najgirshij vipadok sortuvannya viborom sortuvannya vstavkamiO cn c gt 1 displaystyle O c n c gt 1 eksponencialne Znahodzhennya tochnogo rozv yazku zadachi komivoyazhera za dopomogoyu dinamichnogo programuvannya Viznachennya chi ye dva logichnih tverdzhennya ekvivalentnimi za dopomogoyu povnogo pereboruPerevirni viprobuvannya vimiryuvannya produktivnosti Dlya novih versij programnogo zabezpechennya abo dlya zabezpechennya porivnyannya z konkurentnimi sistemami inodi vikoristovuyutsya testi sho dozvolyayut porivnyati vidnosnu produktivnist algoritmiv Yaksho napriklad vipuskayetsya novij algoritm sortuvannya jogo mozhna porivnyati z poperednikami shob perekonatisya sho algoritm shonajmenshe nastilki zh efektivnij na vidomih danih yak i inshi Testi produktivnosti mozhut buti vikoristani koristuvachami dlya porivnyannya produktiv vid riznih virobnikiv dlya ocinki yakij produkt bude bilshe pidhoditi pid yihni vimogi v terminah funkcionalnosti i produktivnosti Deyaki testi produktivnosti dayut mozhlivist provedennya porivnyalnogo analizu riznih kompilovanih i interpretovanih mov yak napriklad Roy Longbottom s PC Benchmark Collection a en porivnyuye produktivnist realizacij tipovih zadach v deyakih movah programuvannya Dosit legko stvoriti samorobni testi produktivnosti dlya otrimannya uyavlennya pro vidnosnu efektivnist riznih mov programuvannya vikoristovuyuchi nabir koristuvackih kriteriyiv yak ce zrobiv Hristofer Kouvel Shag u statti Nine language Performance roundup Pitannya realizaciyi Pitannya realizaciyi mozhut takozh vplinuti na faktichnu efektivnist Ce stosuyetsya viboru movi programuvannya i sposobu yakim algoritm faktichno zakodovanij viboru translyatora dlya vibranoyi movi abo vikoristovuvanih opcij kompilyatora i navit operacijnoyi sistemi U deyakih vipadkah mova realizovana u viglyadi interpretatora mozhe viyavitisya istotno povilnishoyu nizh mova realizovana u viglyadi kompilyatora Ye j inshi chinniki yaki mozhut vplinuti na chas abo vikoristovuvanu pam yat ale yaki viyavlyayutsya poza kontrolem programista Syudi potraplyayut virivnyuvannya danih en proyasniti pribirannya smittya paralelizm na rivni komand i viklik pidprogram Deyaki procesori mayut zdatnist vikonuvati vektorni operaciyi sho dozvolyaye odniyeyu operaciyeyu opracyuvati kilka operandiv Mozhe viyavitisya prosto abo neprosto vikoristovuvati taki mozhlivosti na rivni programuvannya abo kompilyaciyi Algoritmi rozrobleni dlya poslidovnih obchislen mozhut zazhadati povnoyi pererobki dlya vikoristannya paralelnih obchislen Insha problema mozhe viniknuti z sumisnistyu procesoriv v yakih komandi mozhna realizuvati po inshomu tak sho komandi na odnih modelyah mozhut buti vidnosno povilnishimi na inshih modelyah Ce mozhe viyavitisya problemoyu dlya optimizuvalnogo kompilyatora Vimiryuvannya vikoristannya resursivVimiryuvannya zazvichaj virazhayutsya yak funkciya vid rozmiru vhodu n Dva najvazhlivishih vimiryuvannya Chas yak dovgo algoritm zajmaye procesor Pam yat yak bagato robochoyi pam yati zazvichaj RAM potribno dlya algoritmu Tut ye dva aspekti kilkist pam yati dlya kodu i kilkist pam yati dlya danih z yakimi kod pracyuye Dlya komp yuteriv yaki zhivlyatsya vid batarej napriklad leptopiv abo dlya duzhe dovgih velikih obchislen napriklad na superkomp yuterah stanovlyat interes vimiryuvannya inshogo rodu Pryame spozhivannya energiyi energiya neobhidna dlya roboti komp yutera Nepryame spozhivannya energiyi energiya neobhidna dlya oholodzhennya osvitlennya tosho U deyakih vipadkah potribni inshi mensh poshireni vimiryuvannya Rozmir peredachi propuskna zdatnist kanalu mozhe viyavitisya obmezhuvalnim faktorom Dlya zmenshennya kilkosti peredanih danih mozhna vikoristovuvati stisnennya Pokaz malyunka abo zobrazhennya yak napriklad Google logo mozhe peredbachati peredavannya desyatkiv tisyach bajt 232K v danomu vipadku Porivnyajte ce z peredacheyu shesti bajt u slovi Google Zovnishnya pam yat pam yat neobhidna na disku abo inshomu pristroyi zovnishnoyi pam yati Cya pam yat mozhe vikoristovuvatisya dlya timchasovogo zberigannya abo dlya majbutnogo vikoristannya Chas vidguku parametr osoblivo vazhlivij dlya zastosunkiv sho pracyuyut u realnomu chasi koli komp yuter povinen shvidko vidpovidati na zovnishni podiyi Zagalna vartist volodinnya parametr vazhlivij koli priznachenij dlya vikonannya odnogo algoritmu Chas Teoriya Dlya analizu algoritmu zazvichaj vikoristovuyetsya analiz chasovoyi skladnosti algoritmu shob ociniti chas roboti yak funkciyu vid rozmiru vhidnih danih Rezultat zazvichaj virazhayetsya v terminah O velike Ce korisno dlya porivnyannya algoritmiv osoblivo v razi obrobki velikoyi kilkosti danih Bilsh detalni ocinki potribni dlya porivnyannya algoritmiv koli obsyag danih malij hocha taka situaciya navryad chi vikliche problemi Algoritmi yaki vklyuchayut paralelni obchislennya mozhut viyavitisya vazhchimi dlya analizu Praktika Vikoristovuyutsya porivnyalni testi chasu roboti algoritmu Bagato mov programuvannya mistyat funkciyi sho vidobrazhayut chas vikoristannya procesora Dlya algoritmiv sho pracyuyut dovgo vitrachenij chas takozh mozhe yavlyati interes Rezultati v zagalnomu vipadku potribno userednyuvati za seriyeyu testiv Cej vid testiv mozhe buti duzhe chutlivim do zmini obladnannya i mozhlivosti roboti inshih program u toj samij chas u bagatoprocesornomu i bagatozadachnomu seredovishi Cej vid testiv istotno zalezhit takozh vid viboru movi programuvannya kompilyatora i jogo opcij tak sho porivnyuvani algoritmi povinni buti realizovani v odnakovih umovah Pam yat Cej rozdil stosuyetsya vikoristannya osnovnoyi pam yati najchastishe RAM potribnoyi algoritmu Yak i dlya chasovogo analizu vishe dlya analizu algoritmu zazvichaj vikoristovuyetsya analiz en shob ociniti neobhidnu pam yat chasu vikonannya yak funkciyu vid rozmiru vhodu Rezultat zazvichaj virazhayetsya v terminah O velike Isnuye chotiri aspekti vikoristannya pam yati Kilkist pam yati neobhidna dlya zberigannya kodu algoritmu Kilkist pam yati neobhidna dlya vhidnih danih Kilkist pam yati neobhidna dlya bud yakih vihidnih danih deyaki algoritmi taki yak sortuvannya chasto perestavlyayut vhidni dani i ne vimagayut dodatkovoyi pam yati dlya vihidnih danih Kilkist pam yati neobhidna dlya obchislyuvalnogo procesu pid chas obchislen syudi vhodyat imenovani zminni i bud yakij stekovij prostir neobhidnij dlya vikliku pidprogram yakij mozhe buti suttyevim pri vikoristanni rekursiyi Ranni elektronni komp yuteri i domashni komp yuteri mali vidnosno malij obsyag robochoyi pam yati Tak v 1949 EDSAC mav najbilshu robochu pam yat 1024 17 bitnih sliv a v 1980 Sinclair ZX80 vipuskavsya z 1024 bajtami robochoyi pam yati Suchasni komp yuteri mozhut mati vidnosno veliku kilkist pam yati mozhlivo gigabajti tak sho vmishennya vikoristovuvanoyi algoritmom pam yati v deyakij zadanij obsyag potribno menshe nizh ranishe Odnak isnuvannya troh riznih kategorij pam yati istotne Kesh chasto statichna RAM pracyuye na shvidkostyah porivnyannih z CPU Osnovna fizichna pam yat chasto dinamichna RAM pracyuye trohi povilnishe nizh CPU Virtualna pam yat najchastishe na disku daye ilyuziyu velicheznoyi pam yati ale pracyuye v tisyachi raziv povilnishe nizh RAM Algoritm neobhidna pam yat yakogo ukladayetsya v kesh komp yutera pracyuye znachno shvidshe nizh algoritm sho umishayetsya v osnovnu pam yat yakij v svoyu chergu bude znachno shvidshim vid algoritmu yakij vikoristovuye virtualnij prostir Uskladnyuye situaciyu fakt sho deyaki sistemi mayut do troh rivniv keshu Rizni sistemi mayut rizni obsyagi cih tipiv pam yati tak sho efekt pam yati dlya algoritmu mozhe istotno vidriznyatisya pri perehodi vid odniyeyi sistemi do inshoyi U ranni dni elektronnih obchislen yaksho algoritm i jogo dani ne vmishalisya v osnovnu pam yat vin ne mig vikoristovuvatisya V nashi dni vikoristannya virtualnoyi pam yati zabezpechuye velicheznu pam yat ale za rahunok produktivnosti Yaksho algoritm i jogo dani vmishayutsya v kesh mozhna otrimati duzhe visoku shvidkist tak sho minimizaciya neobhidnoyi pam yati dopomagaye minimizuvati chas Algoritm yakij ne pomishayetsya povnistyu v kesh ale zabezpechuye en mozhe pracyuvati porivnyano shvidko Prikladi efektivnih algoritmivShvidke sortuvannya pershij vidomij algoritm zi shvidkistyu blizko O nlog n displaystyle O n log n Piramidalne sortuvannya inshij shvidkij algoritm sortuvannya Dvijkovij poshuk dlya poshuku v uporyadkovanij tablici Algoritm Bojera Mura dlya poshuku ryadka vseredini inshogo ryadkaKritika potochnogo stanu programuvannya en britanskij uchenij v galuzi informatiki profesor informatiki Bristolskogo universitetu zasnovnik i golovnij inzhener en vvazhaye sho odna z problem polyagaye v isnuvanni viri sho zakon Mura virishuye pitannya neefektivnosti Vin zaproponuvav alternativnij zakon Mura ru Programi stayut povilnishimi bilsh strimko nizh komp yuteri stayut shvidshimi Mej stverdzhuye V shiroko rozpovsyudzhenih sistemah zmenshennya vdvichi vikonannya komand mozhe podvoyiti zhittya batareyi a veliki dani dayut mozhlivist dlya krashih algoritmiv Zmenshennya chisla operacij z N x N do N x log N maye silnij efekt pri velikih N Dlya N 30 milyardiv ci zmini analogichni 50 rokam tehnologichnih polipshen Programist Adam N Rozerburg u svoyemu blozi The failure of the Digital computer opisav potochnij stan programuvannya yak blizkij do Software event horizon rivnyu programnoyi katastrofi natyak na fantastichnij shoe event horizon riven vzuttyevoyi katastrofi opisanij Duglasom Adamsom v jogo knizi Avtostopom po galaktici Vin ociniv padinnya produktivnosti na 70 dB abo na 99 99999 vid mozhlivogo v porivnyanni z 1980 mi rokami koli Artur Klark porivnyav obchislyuvalni zdatnosti komp yuteriv 2001 z komp yuterom HAL u knizi 2001 Kosmichna Odisseya vin vkazav sho na divo mali i potuzhni buli komp yuteri ale programi stali sumno rozcharovuvati Zmagannya za krashij algoritmProvodyatsya zmagannya z rozrobki krashih algoritmiv kriterij yakosti yakih viznachayut suddi WiredDiv takozhAnaliz algoritmiv Arifmetichne koduvannya vid entropijnogo koduvannya en dlya efektivnogo stisnennya danih Asociativnij masiv struktura danih yaku mozhna zrobiti bilsh efektivnoyu pri zastosuvanni derev PATRICIA abo en Test produktivnosti metod vimiryuvannya porivnyalnogo chasu vikonannya v pevnih vipadkah en domovlenosti shodo ocinki chasu vikonannya za troma scenariyami Dvijkovij poshuk prosta i efektivna tehnika poshuku u vidsortovanomu spisku en tehnika skorochennya dovzhini komand rozmiru mashinnogo kodu i najchastishe pam yati Optimizuvalnij kompilyator kompilyator yakij vikoristovuye rizni metodi otrimannya bilsh optimalnogo programnogo kodu pri zberezhenni funkcionalnih mozhlivostej en Obchislyuvalna skladnist ponyattya v informatici sho poznachaye zalezhnosti obsyagu roboti vid rozmiru vhidnih danih Obchislyuvalna potuzhnist komp yutera kilkisna harakteristika shvidkosti vikonannya operacij na komp yuteri Stisnennya danih skorochennya obsyagu peredavanih danih i zajmanogo diskovogo prostoru Indeks dani sho zbilshuyut shvidkist vibirki danih z tablic Entropijne koduvannya koduvannya poslidovnosti znachen z mozhlivistyu odnoznachnogo vidnovlennya z metoyu zmenshennya obsyagu danih dovzhini poslidovnosti za dopomogoyu userednennya jmovirnostej poyavi elementiv u zakodovanij poslidovnosti Zbirannya smittya avtomatichne zvilnennya pam yati pislya vikoristannya Zeleni informacijni tehnologiyi ruh za vprovadzhennya zelenih tehnologij yaki spozhivayut menshe resursiv Kod Gaffmana algoritm efektivnogo koduvannya danih Improving Managed code Performance 24 grudnya 2017 u Wayback Machine Microsoft MSDN Library shob uniknuti zatrimok viklikanih keshuvannyam cherez dostup do nelokalnoyi pam yati Optimizaciya cikliv Keruvannya pam yattyu Optimizaciya informatika Analiz produktivnosti metodi vimiryuvannya faktichnoyi produktivnosti algoritmu v realnomu chasi Obchislennya v realnomu chasi priklad kritichnih za chasom zastosunkiv Viperedzhuvalne vikonannya koli obchislennya provodyatsya navit yaksho she nevidomo chi znadoblyatsya yih rezultati abo en yak protilezhnist ledachih obchislen Chasova bagatopotokovist Shitij kod odin iz sposobiv realizaciyi promizhnoyi virtualnoyi mashini pri interpretaciyi mov programuvannya poryad z bajt kodom Tablicya virtualnih metodiv mehanizm pidtrimki dinamichnoyi vidpovidnosti abo metodu piznogo zv yazuvannya PrimitkiGreen 2013 Knuth 1974 Benchmark History Arhiv originalu za 28 listopada 2019 Procitovano 28 listopada 2019 Floating Point Benchmark Steele 1977 PDF Arhiv originalu PDF za 3 bereznya 2016 Procitovano 14 veresnya 2017 Arhiv originalu za 23 listopada 2019 Procitovano 28 listopada 2019 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Fagone Jason 29 listopada 2010 Wired Arhiv originalu za 16 bereznya 2014 Procitovano 28 listopada 2019 LiteraturaChristopher Green 2013 Arhiv originalu za 27 veresnya 2013 Procitovano 19 travnya 2013 Knuth D Structured Programming with go to Statements 24 serpnya 2009 Computing Surveys ACM 1974 T 6 vip 4 Roylongbottom org uk Arhiv originalu za 15 sichnya 2012 Procitovano 14 grudnya 2011 Fourmilab ch 4 serpnya 2005 Arhiv originalu za 11 grudnya 2011 Procitovano 14 grudnya 2011 Guy Lewis Steele Jr Debunking the Expensive Procedure Call Myth or Procedure Call Implementations Considered Harmful or Lambda The Ultimate GOTO MIT AI Lab AI Lab Memo AIM 443 1977 October Posilannya Java aplet Vistup Kelvina Slavina na TED konferenciyi Misconceptions about algorithmic efficiency in high schools