Алгори́тм (латинізов. Algorithmi за араб. ім'ям перського математика аль-Хорезмі) — набір інструкцій, які описують порядок дій виконавця, щоб досягти результату розв'язання задачі за скінченну кількість дій; система правил виконання дискретного процесу, яка досягає поставленої мети за скінченний час. Для візуалізації алгоритмів часто використовують блок-схеми.
Для комп'ютерних програм алгоритм є списком деталізованих інструкцій, що реалізують процес обчислення, який, починаючи з початкового стану, відбувається через послідовність логічних станів, яка завершується кінцевим станом. Перехід з попереднього до наступного стану не обов'язково детермінований — деякі алгоритми можуть містити елементи випадковості.
Поняття алгоритму належить до підвалин математики. Обчислювальні процеси алгоритмічного характеру (як-то арифметичні дії над цілими числами, знаходження НСД двох чисел тощо) відомі людству з глибокої давнини. Проте чітке поняття алгоритму сформувалося лише на початку XX століття.
Часткова формалізація поняття алгоритму розпочалася зі спроб розв'язати задачу розв'язності (нім. Entscheidungsproblem), яку сформулював Давид Гільберт 1928 року. Наступні формалізації були необхідні для визначення ефективної обчислювальності або «ефективного методу»; до цих формалізацій належать рекурсивні функції Геделя-Ербрана-Кліні 1930, 1934 та 1935 років, λ-числення Алонзо Черча 1936 р., «Формулювання 1» Еміля Поста 1936 року та машина Тюрінга, яку розробив Алан Тюрінг протягом 1936, 1937 та 1939 років.
В методології алгоритм є базисним поняттям і складає основу опису методів. З методології виходить якісно нове поняття алгоритму як оптимальність з наближенням до прогнозованого абсолюту. Зробивши все в послідовності алгоритму за граничних умов задачі, маємо ідеальне рішення нагальних проблем науково-практичного характеру. В сучасному світі алгоритм будь-якої діяльності у формалізованому вигляді складає основу навчання на прикладах за подібністю. На основі подібності алгоритмів різних сфер діяльності була сформована концепція (теорія) експертних систем.
Історія
Слово «алгоритм» походить від імені перського математика й астронома Аль-Хорезмі. Приблизно 825 року він написав трактат, в якому описав придуману в Індії позиційну десяткову систему числення.
У першій половині XII ст. твір Аль-Хорезмі потрапив до Європи в перекладі латиною під назвою «Algoritmi de numero Indorum» («Алгоритми про індійську лічбу»). Вважається, що Algoritmi відповідає невдалій латинізації імені Аль-Хорезмі, проте через неправильне тлумачення його як іменника в множині ним стали називати метод обчислення.
У 1843 р. Ада Лавлейс описала алгоритм обчислення чисел Бернуллі на аналітичній машині Беббіджа. Цей алгоритм визнано першою програмою, спеціально реалізованою для виконання на ЕОМ, і через це його розробницю вважають першим програмістом, дарма що машина Беббіджа не була сконструйована за життя Ади.
З 1930-х рр. починається бурхливий розвиток дослідження алгоритмів і становлення інформатики в її сучасному вигляді. 1935 року Стівен Кліні розробив перше формулювання теорії рекурсії та показав еквівалентність розробленої системи частково рекурсивним функціям. 1936 року незалежно були опубліковані роботи Алана Тюрінга та Еміля Поста, в яких подано подібні системи для визначення поняття алгоритму. А вже 1937 року було доведено еквівалентність різних визначень.
Машина Тюрінга пропонувала конструкцію, придатну для автоматичної інтерпретації. Побудована під впливом Алана Тюрінга у Великій Британії обчислювальна система ACE (завершена 1950 року) та системи, побудовані за архітектурою фон Неймана в США та в інших країнах (в СРСР — МЕОМ, яку розробила 1950 року в Інституті електротехніки АН УРСР група вчених під керівництвом Сергія Лебедєва), були першими універсальними обчислювальними пристроями, які повністю задовольняли вимоги обчислюваності.
Протягом 1935-1960 років було висловлено численні ідеї та розроблено технології, які лягли в основу сучасної інформатики.
Формальні засоби для представлення алгоритмів мали не лише теоретичну значущість. Розробка алгоритмічних мов для програмування обчислювальних пристроїв розпочалась 1951 року з публікації німецького інженера [en] (нім. Heinz Rutishauser). Спочатку важливою здавалася проблема нотації, її досліджував Олексій Ляпунов, але поступово вона відійшла на другий план.
Першу мову програмування, Планкалкюль (нім. Plankalkül), розробив Конрадом Цузе 1946 року, але через відсутність компіляторів виконання написаних цією мовою програм було неможливим. Опис мови був надрукований у 1972 році, а 2000 року був створений компілятор для підмножини мови.
В середині 1950-х було розроблено мову програмування Фортран Джоном Бекусом з IBM. Наприкінці 1950-х розроблено ALGOL та COBOL; для навчальних цілей BASIC (1963) та Pascal (початок 1970-х). Для системного програмування в Bell Laboratories було розроблено C.
Лямбда-числення дало поштовх до створення наприкінці 1950-х функційної мови програмування Лісп. На основі ідей Ліспу було створено Scheme. Мову ML розробив Робін Мілнер наприкінці 1970-х. Наприкінці 1980-х було створено мову Haskell.
Під впливом досліджень в галузі штучного інтелекту розроблено парадигму логічного програмування. На відміну від імперативної та функційної парадигм, логічне програмування не вимагає від розробника описання способу розв'язання поставленої задачі. Planner — першу мову логічного програмування розробили 1969 року. На початку 1970-х розробили Пролог, який згодом став найпоширенішою мовою логічного програмування зі стандартом ISO, затвердженим у 1995 році.
Визначення
Неформальне визначення
Кожен алгоритм передбачає існування початкових (вхідних) даних та в результаті роботи призводить до отримання певного результату. Робота кожного алгоритму відбувається шляхом виконання послідовності деяких елементарних дій. Ці дії називають кроками, а процес їхнього виконання називають алгоритмічним процесом. В такий спосіб відзначають властивість дискретності алгоритму.
Важливою властивістю алгоритмів є масовість, або можливість застосування до різних вхідних даних. Тобто, кожен алгоритм покликаний розв'язувати клас однотипних задач.
Необхідною умовою, яка задовольняє алгоритм, є детермінованість, або визначеність. Це означає, що виконання команд алгоритму відбувається у єдиний спосіб та призводить до однакового результату для однакових вхідних даних.
Вхідні дані алгоритму можуть бути обмежені набором припустимих вхідних даних. Застосування алгоритму до неприпустимих вхідних даних може призводити до того, що алгоритм ніколи не зупиниться, або потрапить в тупиковий стан (зависання) з якого не зможе продовжити виконання.
Формальне визначення
Різноманітні теоретичні проблеми математики та прискорення розвитку фізики та техніки поставили на порядок денний точніше визначення поняття алгоритму.
Перші спроби уточнення поняття алгоритму та його дослідження здійснювали в першій половині XX століття Алан Тюрінг, Еміль Пост, Жак Ербран, Курт Гедель, Андрій Марков, Алонзо Черч. Було розроблено декілька означень поняття алгоритму, але згодом було з'ясовано, що всі вони визначають одне й те саме поняття (див. теза Черча).
Машина Тюрінга
Основна ідея, що лежить в основі машини Тюрінга, дуже проста. Машина Тюрінга — це абстрактна машина (автомат), що працює зі стрічкою окремих комірок, в яких записано символи. Машина також має голівку для запису та читання символів із комірок, яка може рухатись вздовж стрічки. На кожному кроці машина зчитує символ з комірки, на яку вказує голівка, та, на основі зчитаного символу й внутрішнього стану робить наступний крок. При цьому, машина може змінити свій стан, записати інший символ в комірку, або пересунути голівку на одну комірку ліворуч або праворуч.
На основі дослідження цих машин було висунуто тезу Тюрінга (основна гіпотеза алгоритмів):
- Для знаходження значень функції, заданої в деякому алфавіті, тоді і лише тоді існує деякий алгоритм, коли функція обчислювана за Тюрінгом, тобто, коли її можна обчислити на придатній машині Тюрінга.
Ця теза є аксіомою, постулатом, і не може бути доведена математичними методами, оскільки алгоритм не є точним математичним поняттям.
Рекурсивні функції
З кожним алгоритмом можна зіставити функцію, яку він обчислює. Однак постає питання, чи можна довільній функції зіставити машину Тюрінга, а якщо ні, то для яких функцій існує алгоритм? Дослідження цих питань призвело до створення в 1930-х роках теорії рекурсивних функцій.
Клас обчислюваних функцій було описано в спосіб, що нагадує побудову деякої аксіоматичної теорії на базі системи аксіом. Спочатку було вибрано найпростіші функції, обчислюваність яких очевидна. Потім було сформульовано правила (оператори) побудови нових функцій на основі вже існуючих. Необхідний клас функцій складається з усіх функцій, які можна отримати з найпростіших застосуванням операторів.
Подібно тезі Тюринга в теорії обчислюваних функцій висунуто гіпотезу, що має назву теза Черча:
- Числова функція тоді і лише тоді алгоритмічно обчислювана, коли вона частково рекурсивна.
Доведення того, що клас обчислюваних функцій збігається з обчислюваними за Тюрінгом відбувається в два кроки: спочатку доводять обчислюваність найпростіших функцій на машині Тюрінга, а потім — обчислюваність функцій, отриманих внаслідок застосування операторів.
Таким чином, неформально алгоритм можна визначити як чітку систему інструкцій, що визначають дискретний детермінований процес, який веде від початкових даних (на вході) до шуканого результату (на виході), якщо він існує, за скінченну кількість кроків; якщо шуканого результату не існує, алгоритм або ніколи не завершує роботу, або заходить у глухий кут.
Нормальні алгоритми Маркова
Нормальні алгоритми Маркова — це система послідовних застосувань підстановок, які реалізують певні процедури отримання нових слів з базових, побудованих із символів деякого алфавіту. Як і машини Тюрінга, нормальні алгоритми не виконують самих обчислень: вони лише виконують перетворення слів шляхом заміни літер за заданими правилами.
Нормально обчислюваною називають функцію, яку можна реалізувати нормальним алгоритмом. Тобто, алгоритмом, який кожне слово з множини припустимих даних функції перетворює на її вихідні значення.
Творець теорії нормальних алгоритмів А. А. Марков висунув гіпотезу, яка отримала назву принцип нормалізації Маркова:
- Для знаходження значень функції, заданої в деякому алфавіті, тоді і лише тоді існує деякий алгоритм, коли функція нормально обчислювана.
Подібно до тез Тюрінга та Черча, принцип нормалізації Маркова не може бути доведений математичними засобами.
Стохастичні алгоритми
Однак, наведене вище формальне визначення алгоритму в деяких випадках може бути надто строгим. Інколи виникає потреба у використанні випадкових величин. Алгоритм, робота якого визначається не лише вхідними даними, але й значеннями отриманими з генератора випадкових чисел, називають стохастичним (або рандомізованим, від англ. randomized algorithm). Формально, такі алгоритми не можна називати алгоритмами оскільки існує імовірність (близька до нуля), що вони не зупиняться. Проте, стохастичні алгоритми часто бувають ефективнішими за детерміновані, а в окремих випадках — єдиним способом розв'язати задачу.
На практиці замість генератора випадкових чисел використовують генератор псевдовипадкових чисел.
Однак слід відрізняти стохастичні алгоритми та методи, які дають із високою ймовірністю правильний результат. На відміну від методу, алгоритм дає коректні результати навіть після тривалої роботи.
Деякі дослідники припускають можливість того, що стохастичний алгоритм дасть із певною наперед відомою ймовірністю неправильний результат. Тоді стохастичні алгоритми можна поділити на два типи:
- алгоритми типу Лас-Вегас завжди дають коректний результат, але час їхньої роботи невизначений.
- алгоритми типу Монте-Карло, на відміну від попередніх, можуть давати неправильні результати з відомою ймовірністю (їх часто називають методами Монте-Карло).
Інші формалізації
Для деяких задач названі вище формалізми можуть ускладнювати пошук розв'язків та здійснення досліджень. Для подолання перешкод було розроблено як модифікації «класичних» схем, так і створено нові моделі алгоритму. Зокрема, можна назвати:
- [en] та недетерміновану машину Тюрінга;
- регістрову та RAM-машину — прототип сучасних комп'ютерів та віртуальних машин;
- скінченні та клітинні автомати
та інші.
Нумерація алгоритмів
Нумерація алгоритмів відіграє важливу роль в їхньому досліджені та аналізі.
Оскільки будь-який алгоритм можна задати у вигляді скінченного слова (представити у вигляді скінченної послідовності символів деякого алфавіту), а множина всіх скінченних слів у скінченному алфавіті зліченна, то множина всіх алгоритмів також зліченна. Це означає існування взаємно однозначного відображення між множиною натуральних чисел та множиною алгоритмів, тобто можливість присвоїти кожному алгоритму номер.
Нумерація алгоритмів є водночас і нумерацією всіх алгоритмічно обчислюваних функцій, при чому, будь-яка функція може мати нескінченну кількість номерів.
Існування нумерації дозволяє працювати з алгоритмами так само, як з числами. Особливо корисна нумерація в дослідженні алгоритмів, що працюють з іншими алгоритмами.
Алгоритмічно нерозв'язні задачі
Формалізація поняття алгоритму дозволила дослідити існування задач, для яких не існує алгоритмів пошуку розв'язків. Згодом було доведено неможливість алгоритмічного обчислення розв'язків ряду задач, що унеможливлює їхнє розв'язання на будь-якому обчислювальному пристрої.
Функцію f називають обчислюваною (англ. computable), якщо існує машина Тюрінга, яка обчислює значення f для всіх елементів множини визначення функції. Якщо такої машини не існує, функцію f називають необчислюваною. Функція вважатиметься необчислюваною навіть, якщо існують машини Тюрінга, здатні обчислити значення для підмножини з усієї множини вхідних даних.
Випадок, коли результатом обчислення функції f є булеве значення істина або неправда (або множина {0, 1}) називають задачею, яка може бути розв'язною, або нерозв'язною в залежності від обчислюваності функції f.
Важливо точно вказувати припустиму множину вхідних даних, оскільки задача може бути розв'язною для однієї множини та нерозв'язною для іншої.
Однією з перших задач, для якої було доведено нерозв'язність є проблема зупинки. Формулюється вона наступним чином:
- Маючи опис програми для машини Тюрінга, визначити, чи завершить роботу програма за скінченний час, чи працюватиме нескінченно, отримавши будь-які вхідні дані.
Доведення нерозв'язності проблеми зупинки важливе тим, що до неї можна звести інші задачі. Наприклад, проблему зупинки на порожній стрічці (визначити для заданої машини Тюрінга чи зупиниться вона, будучи запущена на порожній стрічці) можна звести до простої задачі зупинки, довівши, тим самим, її нерозв'язність.
Аналіз алгоритмів
Доведення коректності
Разом з поширенням інформаційних технологій збільшився ризик програмних збоїв. Одним зі способів уникнення помилок в алгоритмах та їхніх реалізаціях є доведення коректності систем математичними засобами.
Використання математичного апарату для аналізу алгоритмів та їхньої реалізацій називають формальними методами. Формальні методи передбачають застосування формальних специфікацій та, зазвичай, набору інструментів для синтаксичного аналізу та доведення властивостей специфікацій. Абстрагування від деталей реалізації дозволяє встановити властивості системи незалежно від її реалізації. Крім того, точність та однозначність математичних тверджень дозволяє уникнути багатозначності та неточності природних мов.
За гіпотезою «уникнення помилок краще за усунення помилок». За гіпотезою Гоара «доведення програм розв'язує проблему коректності, документації та сумісності». Доведення коректності програм дозволяє виявляти їхні властивості по відношенню до всього діапазону вхідних даних. Для доведення коректності програм, поняття коректності було розширене на два типи:
- Часткова коректність — програма дає коректний результат для тих випадків, коли вона завершується;
- Повна коректність — програма завершує роботу та видає коректний результат для всіх елементів з діапазону вхідних даних.
Під час доведення коректності порівнюють текст програми зі специфікацією бажаного співвідношення вхідних-вихідних даних. Для доведень типу Гоара ця специфікація має вигляд тверджень, які називають перед- та післяумовами. В сукупності з самою програмою, їх ще називають трійками Гоара. Ці твердження записують
- P{Q}R
де P — це передумова, що має виконуватись перед запуском програми Q, а R — післяумова, правильна після завершення роботи програми.
Формальні методи було успішно застосовано до широкого кола задач, зокрема: розробка електронних схем, штучного інтелекту, систем, чутливих до надійності, безпечності, автоматичних систем на залізниці, верифікації мікропроцесорів, специфікації стандартів та специфікації і верифікації програм.
Час роботи
Поширеним критерієм оцінки алгоритмів є час роботи та порядок зростання тривалості роботи в залежності від обсягу вхідних даних.
Кожній конкретній задачі зіставляють деяке число, яке називають її розміром. Наприклад, розміром задачі обчислення добутку матриць може бути найбільший розмір матриць-множників, для задач на графах розміром може бути кількість ребер графу.
Час, який витрачає алгоритм як функція від розміру задачі n, називають часовою складністю цього алгоритму T(n). Асимптотику поведінки цієї функції при збільшенні розміру задачі називають асимптотичною часовою складністю, а для її позначення використовують нотацію Ландау (велике O).
Саме асимптотична складність визначає розмір задач, які алгоритм здатен обробити. Наприклад, якщо алгоритм обробляє вхідні дані розміром n за час cn², де c — деяка стала, то кажуть, що часова складність такого алгоритму O(n²).
Часто, під час розробки алгоритму намагаються зменшити асимптотичну часову складність для найгірших випадків. На практиці ж, трапляються випадки, коли достатнім є алгоритм, який «зазвичай» працює швидко.
Грубо кажучи, аналіз середньої асимптотичної часової складності можна поділити на два типи: аналітичний та статистичний. Аналітичний метод дає точніші результати, але складний у використанні на практиці. Натомість статистичний метод дозволяє швидше здійснювати аналіз складних задач.
В наступній таблиці наведено поширені асимптотичні складності з коментарями.
Складність | Коментар | Приклади |
---|---|---|
O(1) | Сталий час роботи не залежно від розміру задачі | Очікуваний час пошуку в хеші |
O(log log n) | Дуже повільне зростання необхідного часу | Очікуваний час роботи інтерполюючого пошуку n елементів |
O(log n) | Логарифмічне зростання — подвоєння розміру задачі збільшує час роботи на сталу величину | Обчислення xn; двійковий пошук в масиві з n елементів |
O(n) | Лінійне зростання — подвоєння розміру задачі подвоїть і необхідний час | Додавання/віднімання чисел з n цифр; лінійний пошук в масиві з n елементів |
O(n log n) | Лінеаритмічне зростання — подвоєння розміру задачі збільшить необхідний час трохи більше ніж вдвічі | Сортування злиттям або купою n елементів; нижня границя сортування порівнянням n елементів |
O(n²) | Квадратичне зростання — подвоєння розміру задачі вчетверо збільшує необхідний час | Елементарні алгоритми сортування |
O(n³) | Кубічне зростання — подвоєння розміру задачі збільшує необхідний час увосьмеро | Звичайне множення матриць |
O(cn) | Експоненціальне зростання — збільшення розміру задачі на 1 призводить до c-кратного збільшення необхідного часу; подвоєння розміру задачі підносить необхідний час у квадрат | Деякі задачі комівояжера, алгоритми пошуку повним перебором |
Представлення алгоритмів
У процесі розробки алгоритму можуть використовуватись різні способи його опису, які відрізняються за простотою, наочністю, компактністю, мірою формалізації, орієнтації на машинну реалізацію тощо.
Форми запису алгоритму:
- словесна або вербальна (мовна, формульно-словесна);
- псевдокод (формальні алгоритмічні мови);
- схемна:
- [en] (схеми Нассі-Шнайдермана);
- графічна (блок-схема, виконується за вимогами стандарту).
Властивості алгоритмів
Алгоритми мають ряд важливих властивостей:
- Скінченність
- алгоритм має завжди завершуватись після виконання скінченної кількості кроків. Процедуру, яка має решту характеристик алгоритму, без, можливо, скінченності, називають методом обчислень.
- Дискретність
- процес, що визначається алгоритмом, можна розчленувати (розділити) на окремі елементарні етапи (кроки), кожен з яких називається кроком алгоритмічного процесу чи алгоритму.
- Визначеність
- кожен крок алгоритму має бути точно визначений. Дії, які необхідно здійснити, повинні бути чітко та недвозначно визначені для кожного можливого випадку.
- Вхідні дані
- алгоритм має деяку кількість (можливо, нульову) вхідних даних, тобто, величин, заданих до початку його роботи або значення яких визначають під час роботи алгоритму.
- Вихідні дані
- алгоритм має одне або декілька вихідних даних, тобто, величин, що мають досить визначений зв'язок із вхідними даними.
- Ефективність
- Алгоритм вважають ефективним, якщо всі його оператори досить прості для того, аби їх можна було точно виконати за скінченний проміжок часу з допомогою олівця та аркушу паперу.
- Масовість
- властивість алгоритму, яка полягає в тому, що алгоритм повинен забезпечувати розв'язання будь-якої задачі з класу однотипних задач за будь-якими вхідними даними, що належать до області застосування алгоритму.
Приклад
Як приклад можна навести алгоритм Евкліда.
Алгоритм Евкліда — ефективний метод обчислення найбільшого спільного дільника (НСД). Названий на честь грецького математика Евкліда, один з найдавніших алгоритмів, що досі використовують. Описаний в Началах Евкліда (приблизно 300 до н. е.), а саме, в книгах VII та X. У сьомій книзі алгоритм описано для цілих чисел, а в десятій — для довжин відрізків.
Існує декілька варіантів алгоритму, нижче записано в псевдокоді рекурсивний варіант:
функція нсд(a, b) якщо b = 0 поверни a інакше поверни нсд(b, a mod b)
Див. також
Джерела та література
Українською
- Томас Кормен; Чарльз Лейзерсон, Рональд Рівест, Кліфорд Стайн (2009) [1990]. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
- Алгоритм [ 25 березня 2022 у Wayback Machine.] // ВУЕ
- «Українська радянська енциклопедія» / ред. М. Бажан; 2-е видання. — К., 1974—1985, том 1, Алгоритм.
- «Енциклопедія кібернетики», відповідальний ред. В. Глушков, 1 тт., 1973, Алгоритм.
- Алгоритм [ 21 квітня 2016 у Wayback Machine.] //ЕСУ
- Микола Глибовець. Основи комп'ютерних алгоритмів. — Видавничий дім «Києво-Могилянська Академія», 2003. — 452 с. — .
Іншими мовами
Класичні підручники
- Ніклаус Вірт (2004) [1975]. Algorithms and Data Structures (PDF). ETH Zürich. с. 366.(англ.)
- Дональд Кнут. Fundamental Algorithms // The Art of Computer Programming. — Massachusetts : Addison–Wesley, 1997. — Т. 1. — 650 с. — .(англ.)
- Дональд Кнут. Seminumerical Algorithms // The Art of Computer Programming. — Massachusetts : Addison–Wesley, 1997. — Т. 2. — 762 с. — .(англ.)
- Дональд Кнут. Sorting and Searching // The Art of Computer Programming. — Massachusetts : Addison–Wesley, 1998. — Т. 3. — 780 с. — .(англ.)
Історія
- Gerard O'Regan. A Brief History of Computing. — Springer, 2008. — . (англ.)
- Friedrich L. Bauer. Origins and Foundations of Computing = Kurze Geschichte der Informatik. — Springer, 2010. — . (англ.)
Каталоги алгоритмів
- за ред. Ming-Yang Kao. Encyclopedia of Algorithms. — Springer, 2008. — (Springer Reference) — . (англ.)
- за ред. Mikhail J. Atallah та Marina Blanton. Algorithms and theory of computation handbook. General concepts and techniques. — 2-ге. — Chapman & Hall/CRC, 2010. — (applied algorithms and data structures) — . та другий том (англ.)
- Davis, Martin (1965). The Undecidable: Basic Papers On Undecidable Propositions, Unsolvable Problems and Computable Functions. New York: Raven Press. ISBN . (англ.)
- Игошин В. И. (2008). Математическая логика и теория алгоритмов (вид. 2-ге). Москва: Academia. ISBN . (рос.)
- за ред. Mikhail J. Atallah та Marina Blanton. Algorithms and theory of computation handbook. General concepts and techniques. — 2-ге. — Chapman & Hall/CRC, 2010. — (applied algorithms and data structures) — . (англ.)
- Albert Endres, Dieter Rombach. A Handbook of Software and Systems Engineering. — Addison Wesley, 2003. — (The Fraunhofer IESE Series on Software Engineering) — . (англ.)
- Gerard O'Regan. 4.5 // A Brief History of Computing. — Springer, 2008. — . (англ.)
- Friedrich L. Bauer. Origins and Foundations of Computing = Kurze Geschichte der Informatik. — Springer, 2010. — . (англ.)
Примітки
- Kleene 1943 in Davis 1965:274
- Rosser 1939 in Davis 1965:225
- Fuegi, J. and Francis, J. «Lovelace & Babbage and the creation of the 1843 'notes'.» Annals of the History of Computing 25 #4 (October-December 2003): Digital Object Identifier [Архівовано 30 червня 2012 у Archive.is]
- (Розділ «Algorithms» в Bauer, 2010)
- (Розділ «Algorithmic Languages» в Bauer, 2010)
- (Розділ 3.2 в O'Regan, 2008)
- (Розділ 3.3 в O'Regan, 2008)
- (Розділ 3.5 в O'Regan, 2008)
- (Розділ 3.6 в O'Regan, 2008)
- (Игошин, с. 314)
- (Игошин, с. 317)
- Basics: The Turing Machine (with an interpreter!. Good Math, Bad Math. 9 лютого 2007. Архів оригіналу за 2 лютого 2012. Процитовано 3 березня 2010.
- (Игошин, розділ 33)
- Енциклопедія кібернетики, т. 2, c. 90-91.
- (Игошин, розділ 34)
- «Probabilistic algorithms should not be mistaken with methods (which I refuse to call algorithms), which produce a result which has a high probability of being correct. It is essential that an algorithm produces correct results (discounting human or computer errors), even if this happens after a very long time.» Henri Cohen (1996). A Course in Computational Algebraic Number Theory. Springer-Verlag. с. 2. ISBN .
- Томас Кормен; Чарльз Лейзерсон, Рональд Рівест, Кліфорд Стайн (2009) [1990]. 1.1 Алгоритми. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
- (Розділ 12, с. 12-22 в Atallah, 2010)
- (Игошин, розділ 36)
- Peter Linz. 12.1 // An Introduction to Formal Languages and Automata. — 3-тє. — Jones and Bartlett Publishers, 2000. — .
- computability and complexity. Encyclopedia of computer Science and Technology. Facts On File. 2009. ISBN .
Given any computer program, can you determine whether the program will halt (end) given any input?
- (O'Regan, розділ 4.5)
- (Розділ 5.3.6 в Enders, 2003)
- (Розділ 5.3.7 в Enders, 2003)
- (O'Regan, с. 119)
- А. Ахо, Дж. Хопкрофт, Дж. Ульман. Построение и анализ вычислительных алгоритмов = The Design and Analysis of Computer Algorithms. — Москва : «Мир», 1979.
- (розділ 11 в Atallah, 2010)
- (розділ 1 в Atallah, 2010)
- Н. М. Васильків, Л. О. Васильків. Опорний конспект лекцій з дисципліни «Основи алгоритмізації» спеціальність «Комп'ютерні системи та мережі». — Тернопіль : Економічна думка, 2005. — 32 с. з джерела 12 грудня 2007
- Кнут, т. 1,
- Дональд Кнут. Seminumerical Algorithms // The Art of Computer Programming. — Massachusetts : Addison–Wesley, 1997. — Т. 2. — 762 с. — .(англ.)
Ця стаття належить до української Вікіпедії. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algori tm latinizov Algorithmi za arab im yam perskogo matematika al Horezmi nabir instrukcij yaki opisuyut poryadok dij vikonavcya shob dosyagti rezultatu rozv yazannya zadachi za skinchennu kilkist dij sistema pravil vikonannya diskretnogo procesu yaka dosyagaye postavlenoyi meti za skinchennij chas Dlya vizualizaciyi algoritmiv chasto vikoristovuyut blok shemi Storinka z Algebri al Horezmi perskogo matematika vid imeni yakogo pohodit slovo algoritm Dlya komp yuternih program algoritm ye spiskom detalizovanih instrukcij sho realizuyut proces obchislennya yakij pochinayuchi z pochatkovogo stanu vidbuvayetsya cherez poslidovnist logichnih staniv yaka zavershuyetsya kincevim stanom Perehid z poperednogo do nastupnogo stanu ne obov yazkovo determinovanij deyaki algoritmi mozhut mistiti elementi vipadkovosti Ponyattya algoritmu nalezhit do pidvalin matematiki Obchislyuvalni procesi algoritmichnogo harakteru yak to arifmetichni diyi nad cilimi chislami znahodzhennya NSD dvoh chisel tosho vidomi lyudstvu z glibokoyi davnini Prote chitke ponyattya algoritmu sformuvalosya lishe na pochatku XX stolittya Chastkova formalizaciya ponyattya algoritmu rozpochalasya zi sprob rozv yazati zadachu rozv yaznosti nim Entscheidungsproblem yaku sformulyuvav David Gilbert 1928 roku Nastupni formalizaciyi buli neobhidni dlya viznachennya efektivnoyi obchislyuvalnosti abo efektivnogo metodu do cih formalizacij nalezhat rekursivni funkciyi Gedelya Erbrana Klini 1930 1934 ta 1935 rokiv l chislennya Alonzo Chercha 1936 r Formulyuvannya 1 Emilya Posta 1936 roku ta mashina Tyuringa yaku rozrobiv Alan Tyuring protyagom 1936 1937 ta 1939 rokiv V metodologiyi algoritm ye bazisnim ponyattyam i skladaye osnovu opisu metodiv Z metodologiyi vihodit yakisno nove ponyattya algoritmu yak optimalnist z nablizhennyam do prognozovanogo absolyutu Zrobivshi vse v poslidovnosti algoritmu za granichnih umov zadachi mayemo idealne rishennya nagalnih problem naukovo praktichnogo harakteru V suchasnomu sviti algoritm bud yakoyi diyalnosti u formalizovanomu viglyadi skladaye osnovu navchannya na prikladah za podibnistyu Na osnovi podibnosti algoritmiv riznih sfer diyalnosti bula sformovana koncepciya teoriya ekspertnih sistem IstoriyaSlovo algoritm pohodit vid imeni perskogo matematika j astronoma Al Horezmi Priblizno 825 roku vin napisav traktat v yakomu opisav pridumanu v Indiyi pozicijnu desyatkovu sistemu chislennya U pershij polovini XII st tvir Al Horezmi potrapiv do Yevropi v perekladi latinoyu pid nazvoyu Algoritmi de numero Indorum Algoritmi pro indijsku lichbu Vvazhayetsya sho Algoritmi vidpovidaye nevdalij latinizaciyi imeni Al Horezmi prote cherez nepravilne tlumachennya jogo yak imennika v mnozhini nim stali nazivati metod obchislennya Baronesa Ada Lavlejs yaku vvazhayut pershim programistom U 1843 r Ada Lavlejs opisala algoritm obchislennya chisel Bernulli na analitichnij mashini Bebbidzha Cej algoritm viznano pershoyu programoyu specialno realizovanoyu dlya vikonannya na EOM i cherez ce jogo rozrobnicyu vvazhayut pershim programistom darma sho mashina Bebbidzha ne bula skonstrujovana za zhittya Adi Z 1930 h rr pochinayetsya burhlivij rozvitok doslidzhennya algoritmiv i stanovlennya informatiki v yiyi suchasnomu viglyadi 1935 roku Stiven Klini rozrobiv pershe formulyuvannya teoriyi rekursiyi ta pokazav ekvivalentnist rozroblenoyi sistemi chastkovo rekursivnim funkciyam 1936 roku nezalezhno buli opublikovani roboti Alana Tyuringa ta Emilya Posta v yakih podano podibni sistemi dlya viznachennya ponyattya algoritmu A vzhe 1937 roku bulo dovedeno ekvivalentnist riznih viznachen Mashina Tyuringa proponuvala konstrukciyu pridatnu dlya avtomatichnoyi interpretaciyi Pobudovana pid vplivom Alana Tyuringa u Velikij Britaniyi obchislyuvalna sistema ACE zavershena 1950 roku ta sistemi pobudovani za arhitekturoyu fon Nejmana v SShA ta v inshih krayinah v SRSR MEOM yaku rozrobila 1950 roku v Instituti elektrotehniki AN URSR grupa vchenih pid kerivnictvom Sergiya Lebedyeva buli pershimi universalnimi obchislyuvalnimi pristroyami yaki povnistyu zadovolnyali vimogi obchislyuvanosti Protyagom 1935 1960 rokiv bulo vislovleno chislenni ideyi ta rozrobleno tehnologiyi yaki lyagli v osnovu suchasnoyi informatiki Formalni zasobi dlya predstavlennya algoritmiv mali ne lishe teoretichnu znachushist Rozrobka algoritmichnih mov dlya programuvannya obchislyuvalnih pristroyiv rozpochalas 1951 roku z publikaciyi nimeckogo inzhenera en nim Heinz Rutishauser Spochatku vazhlivoyu zdavalasya problema notaciyi yiyi doslidzhuvav Oleksij Lyapunov ale postupovo vona vidijshla na drugij plan Pershu movu programuvannya Plankalkyul nim Plankalkul rozrobiv Konradom Cuze 1946 roku ale cherez vidsutnist kompilyatoriv vikonannya napisanih ciyeyu movoyu program bulo nemozhlivim Opis movi buv nadrukovanij u 1972 roci a 2000 roku buv stvorenij kompilyator dlya pidmnozhini movi V seredini 1950 h bulo rozrobleno movu programuvannya Fortran Dzhonom Bekusom z IBM Naprikinci 1950 h rozrobleno ALGOL ta COBOL dlya navchalnih cilej BASIC 1963 ta Pascal pochatok 1970 h Dlya sistemnogo programuvannya v Bell Laboratories bulo rozrobleno C Lyambda chislennya dalo poshtovh do stvorennya naprikinci 1950 h funkcijnoyi movi programuvannya Lisp Na osnovi idej Lispu bulo stvoreno Scheme Movu ML rozrobiv Robin Milner naprikinci 1970 h Naprikinci 1980 h bulo stvoreno movu Haskell Pid vplivom doslidzhen v galuzi shtuchnogo intelektu rozrobleno paradigmu logichnogo programuvannya Na vidminu vid imperativnoyi ta funkcijnoyi paradigm logichne programuvannya ne vimagaye vid rozrobnika opisannya sposobu rozv yazannya postavlenoyi zadachi Planner pershu movu logichnogo programuvannya rozrobili 1969 roku Na pochatku 1970 h rozrobili Prolog yakij zgodom stav najposhirenishoyu movoyu logichnogo programuvannya zi standartom ISO zatverdzhenim u 1995 roci ViznachennyaNeformalne viznachennya Kozhen algoritm peredbachaye isnuvannya pochatkovih vhidnih danih ta v rezultati roboti prizvodit do otrimannya pevnogo rezultatu Robota kozhnogo algoritmu vidbuvayetsya shlyahom vikonannya poslidovnosti deyakih elementarnih dij Ci diyi nazivayut krokami a proces yihnogo vikonannya nazivayut algoritmichnim procesom V takij sposib vidznachayut vlastivist diskretnosti algoritmu Vazhlivoyu vlastivistyu algoritmiv ye masovist abo mozhlivist zastosuvannya do riznih vhidnih danih Tobto kozhen algoritm poklikanij rozv yazuvati klas odnotipnih zadach Neobhidnoyu umovoyu yaka zadovolnyaye algoritm ye determinovanist abo viznachenist Ce oznachaye sho vikonannya komand algoritmu vidbuvayetsya u yedinij sposib ta prizvodit do odnakovogo rezultatu dlya odnakovih vhidnih danih Vhidni dani algoritmu mozhut buti obmezheni naborom pripustimih vhidnih danih Zastosuvannya algoritmu do nepripustimih vhidnih danih mozhe prizvoditi do togo sho algoritm nikoli ne zupinitsya abo potrapit v tupikovij stan zavisannya z yakogo ne zmozhe prodovzhiti vikonannya Formalne viznachennya Riznomanitni teoretichni problemi matematiki ta priskorennya rozvitku fiziki ta tehniki postavili na poryadok dennij tochnishe viznachennya ponyattya algoritmu Pershi sprobi utochnennya ponyattya algoritmu ta jogo doslidzhennya zdijsnyuvali v pershij polovini XX stolittya Alan Tyuring Emil Post Zhak Erbran Kurt Gedel Andrij Markov Alonzo Cherch Bulo rozrobleno dekilka oznachen ponyattya algoritmu ale zgodom bulo z yasovano sho vsi voni viznachayut odne j te same ponyattya div teza Chercha Mashina Tyuringa Dokladnishe Mashina Tyuringa Shematichna ilyustraciya roboti mashini Tyuringa Osnovna ideya sho lezhit v osnovi mashini Tyuringa duzhe prosta Mashina Tyuringa ce abstraktna mashina avtomat sho pracyuye zi strichkoyu okremih komirok v yakih zapisano simvoli Mashina takozh maye golivku dlya zapisu ta chitannya simvoliv iz komirok yaka mozhe ruhatis vzdovzh strichki Na kozhnomu kroci mashina zchituye simvol z komirki na yaku vkazuye golivka ta na osnovi zchitanogo simvolu j vnutrishnogo stanu robit nastupnij krok Pri comu mashina mozhe zminiti svij stan zapisati inshij simvol v komirku abo peresunuti golivku na odnu komirku livoruch abo pravoruch Na osnovi doslidzhennya cih mashin bulo visunuto tezu Tyuringa osnovna gipoteza algoritmiv Dlya znahodzhennya znachen funkciyi zadanoyi v deyakomu alfaviti todi i lishe todi isnuye deyakij algoritm koli funkciya obchislyuvana za Tyuringom tobto koli yiyi mozhna obchisliti na pridatnij mashini Tyuringa Cya teza ye aksiomoyu postulatom i ne mozhe buti dovedena matematichnimi metodami oskilki algoritm ne ye tochnim matematichnim ponyattyam Rekursivni funkciyi Dokladnishe Rekursivni funkciyi Z kozhnim algoritmom mozhna zistaviti funkciyu yaku vin obchislyuye Odnak postaye pitannya chi mozhna dovilnij funkciyi zistaviti mashinu Tyuringa a yaksho ni to dlya yakih funkcij isnuye algoritm Doslidzhennya cih pitan prizvelo do stvorennya v 1930 h rokah teoriyi rekursivnih funkcij Klas obchislyuvanih funkcij bulo opisano v sposib sho nagaduye pobudovu deyakoyi aksiomatichnoyi teoriyi na bazi sistemi aksiom Spochatku bulo vibrano najprostishi funkciyi obchislyuvanist yakih ochevidna Potim bulo sformulovano pravila operatori pobudovi novih funkcij na osnovi vzhe isnuyuchih Neobhidnij klas funkcij skladayetsya z usih funkcij yaki mozhna otrimati z najprostishih zastosuvannyam operatoriv Podibno tezi Tyuringa v teoriyi obchislyuvanih funkcij visunuto gipotezu sho maye nazvu teza Chercha Chislova funkciya todi i lishe todi algoritmichno obchislyuvana koli vona chastkovo rekursivna Dovedennya togo sho klas obchislyuvanih funkcij zbigayetsya z obchislyuvanimi za Tyuringom vidbuvayetsya v dva kroki spochatku dovodyat obchislyuvanist najprostishih funkcij na mashini Tyuringa a potim obchislyuvanist funkcij otrimanih vnaslidok zastosuvannya operatoriv Takim chinom neformalno algoritm mozhna viznachiti yak chitku sistemu instrukcij sho viznachayut diskretnij determinovanij proces yakij vede vid pochatkovih danih na vhodi do shukanogo rezultatu na vihodi yaksho vin isnuye za skinchennu kilkist krokiv yaksho shukanogo rezultatu ne isnuye algoritm abo nikoli ne zavershuye robotu abo zahodit u gluhij kut Normalni algoritmi Markova Dokladnishe Normalni algorifmi Normalni algoritmi Markova ce sistema poslidovnih zastosuvan pidstanovok yaki realizuyut pevni proceduri otrimannya novih sliv z bazovih pobudovanih iz simvoliv deyakogo alfavitu Yak i mashini Tyuringa normalni algoritmi ne vikonuyut samih obchislen voni lishe vikonuyut peretvorennya sliv shlyahom zamini liter za zadanimi pravilami Normalno obchislyuvanoyu nazivayut funkciyu yaku mozhna realizuvati normalnim algoritmom Tobto algoritmom yakij kozhne slovo z mnozhini pripustimih danih funkciyi peretvoryuye na yiyi vihidni znachennya Tvorec teoriyi normalnih algoritmiv A A Markov visunuv gipotezu yaka otrimala nazvu princip normalizaciyi Markova Dlya znahodzhennya znachen funkciyi zadanoyi v deyakomu alfaviti todi i lishe todi isnuye deyakij algoritm koli funkciya normalno obchislyuvana Podibno do tez Tyuringa ta Chercha princip normalizaciyi Markova ne mozhe buti dovedenij matematichnimi zasobami Stohastichni algoritmi Dokladnishe Odnak navedene vishe formalne viznachennya algoritmu v deyakih vipadkah mozhe buti nadto strogim Inkoli vinikaye potreba u vikoristanni vipadkovih velichin Algoritm robota yakogo viznachayetsya ne lishe vhidnimi danimi ale j znachennyami otrimanimi z generatora vipadkovih chisel nazivayut stohastichnim abo randomizovanim vid angl randomized algorithm Formalno taki algoritmi ne mozhna nazivati algoritmami oskilki isnuye imovirnist blizka do nulya sho voni ne zupinyatsya Prote stohastichni algoritmi chasto buvayut efektivnishimi za determinovani a v okremih vipadkah yedinim sposobom rozv yazati zadachu Na praktici zamist generatora vipadkovih chisel vikoristovuyut generator psevdovipadkovih chisel Odnak slid vidriznyati stohastichni algoritmi ta metodi yaki dayut iz visokoyu jmovirnistyu pravilnij rezultat Na vidminu vid metodu algoritm daye korektni rezultati navit pislya trivaloyi roboti Deyaki doslidniki pripuskayut mozhlivist togo sho stohastichnij algoritm dast iz pevnoyu napered vidomoyu jmovirnistyu nepravilnij rezultat Todi stohastichni algoritmi mozhna podiliti na dva tipi algoritmi tipu Las Vegas zavzhdi dayut korektnij rezultat ale chas yihnoyi roboti neviznachenij algoritmi tipu Monte Karlo na vidminu vid poperednih mozhut davati nepravilni rezultati z vidomoyu jmovirnistyu yih chasto nazivayut metodami Monte Karlo Inshi formalizaciyi Dlya deyakih zadach nazvani vishe formalizmi mozhut uskladnyuvati poshuk rozv yazkiv ta zdijsnennya doslidzhen Dlya podolannya pereshkod bulo rozrobleno yak modifikaciyi klasichnih shem tak i stvoreno novi modeli algoritmu Zokrema mozhna nazvati en ta nedeterminovanu mashinu Tyuringa registrovu ta RAM mashinu prototip suchasnih komp yuteriv ta virtualnih mashin skinchenni ta klitinni avtomati ta inshi Numeraciya algoritmivNumeraciya algoritmiv vidigraye vazhlivu rol v yihnomu doslidzheni ta analizi Oskilki bud yakij algoritm mozhna zadati u viglyadi skinchennogo slova predstaviti u viglyadi skinchennoyi poslidovnosti simvoliv deyakogo alfavitu a mnozhina vsih skinchennih sliv u skinchennomu alfaviti zlichenna to mnozhina vsih algoritmiv takozh zlichenna Ce oznachaye isnuvannya vzayemno odnoznachnogo vidobrazhennya mizh mnozhinoyu naturalnih chisel ta mnozhinoyu algoritmiv tobto mozhlivist prisvoyiti kozhnomu algoritmu nomer Numeraciya algoritmiv ye vodnochas i numeraciyeyu vsih algoritmichno obchislyuvanih funkcij pri chomu bud yaka funkciya mozhe mati neskinchennu kilkist nomeriv Isnuvannya numeraciyi dozvolyaye pracyuvati z algoritmami tak samo yak z chislami Osoblivo korisna numeraciya v doslidzhenni algoritmiv sho pracyuyut z inshimi algoritmami Algoritmichno nerozv yazni zadachiDokladnishe Algoritmichno nerozv yazna zadacha Formalizaciya ponyattya algoritmu dozvolila dosliditi isnuvannya zadach dlya yakih ne isnuye algoritmiv poshuku rozv yazkiv Zgodom bulo dovedeno nemozhlivist algoritmichnogo obchislennya rozv yazkiv ryadu zadach sho unemozhlivlyuye yihnye rozv yazannya na bud yakomu obchislyuvalnomu pristroyi Funkciyu f nazivayut obchislyuvanoyu angl computable yaksho isnuye mashina Tyuringa yaka obchislyuye znachennya f dlya vsih elementiv mnozhini viznachennya funkciyi Yaksho takoyi mashini ne isnuye funkciyu f nazivayut neobchislyuvanoyu Funkciya vvazhatimetsya neobchislyuvanoyu navit yaksho isnuyut mashini Tyuringa zdatni obchisliti znachennya dlya pidmnozhini z usiyeyi mnozhini vhidnih danih Vipadok koli rezultatom obchislennya funkciyi f ye buleve znachennya istina abo nepravda abo mnozhina 0 1 nazivayut zadacheyu yaka mozhe buti rozv yaznoyu abo nerozv yaznoyu v zalezhnosti vid obchislyuvanosti funkciyi f Vazhlivo tochno vkazuvati pripustimu mnozhinu vhidnih danih oskilki zadacha mozhe buti rozv yaznoyu dlya odniyeyi mnozhini ta nerozv yaznoyu dlya inshoyi Odniyeyu z pershih zadach dlya yakoyi bulo dovedeno nerozv yaznist ye problema zupinki Formulyuyetsya vona nastupnim chinom Mayuchi opis programi dlya mashini Tyuringa viznachiti chi zavershit robotu programa za skinchennij chas chi pracyuvatime neskinchenno otrimavshi bud yaki vhidni dani Dovedennya nerozv yaznosti problemi zupinki vazhlive tim sho do neyi mozhna zvesti inshi zadachi Napriklad problemu zupinki na porozhnij strichci viznachiti dlya zadanoyi mashini Tyuringa chi zupinitsya vona buduchi zapushena na porozhnij strichci mozhna zvesti do prostoyi zadachi zupinki dovivshi tim samim yiyi nerozv yaznist Analiz algoritmivDovedennya korektnosti Dokladnishe Formalni metodi Razom z poshirennyam informacijnih tehnologij zbilshivsya rizik programnih zboyiv Odnim zi sposobiv uniknennya pomilok v algoritmah ta yihnih realizaciyah ye dovedennya korektnosti sistem matematichnimi zasobami Vikoristannya matematichnogo aparatu dlya analizu algoritmiv ta yihnoyi realizacij nazivayut formalnimi metodami Formalni metodi peredbachayut zastosuvannya formalnih specifikacij ta zazvichaj naboru instrumentiv dlya sintaksichnogo analizu ta dovedennya vlastivostej specifikacij Abstraguvannya vid detalej realizaciyi dozvolyaye vstanoviti vlastivosti sistemi nezalezhno vid yiyi realizaciyi Krim togo tochnist ta odnoznachnist matematichnih tverdzhen dozvolyaye uniknuti bagatoznachnosti ta netochnosti prirodnih mov Za gipotezoyu uniknennya pomilok krashe za usunennya pomilok Za gipotezoyu Goara dovedennya program rozv yazuye problemu korektnosti dokumentaciyi ta sumisnosti Dovedennya korektnosti program dozvolyaye viyavlyati yihni vlastivosti po vidnoshennyu do vsogo diapazonu vhidnih danih Dlya dovedennya korektnosti program ponyattya korektnosti bulo rozshirene na dva tipi Chastkova korektnist programa daye korektnij rezultat dlya tih vipadkiv koli vona zavershuyetsya Povna korektnist programa zavershuye robotu ta vidaye korektnij rezultat dlya vsih elementiv z diapazonu vhidnih danih Pid chas dovedennya korektnosti porivnyuyut tekst programi zi specifikaciyeyu bazhanogo spivvidnoshennya vhidnih vihidnih danih Dlya doveden tipu Goara cya specifikaciya maye viglyad tverdzhen yaki nazivayut pered ta pislyaumovami V sukupnosti z samoyu programoyu yih she nazivayut trijkami Goara Ci tverdzhennya zapisuyut P Q R de P ce peredumova sho maye vikonuvatis pered zapuskom programi Q a R pislyaumova pravilna pislya zavershennya roboti programi Formalni metodi bulo uspishno zastosovano do shirokogo kola zadach zokrema rozrobka elektronnih shem shtuchnogo intelektu sistem chutlivih do nadijnosti bezpechnosti avtomatichnih sistem na zaliznici verifikaciyi mikroprocesoriv specifikaciyi standartiv ta specifikaciyi i verifikaciyi program Chas roboti Dokladnishe Obchislyuvalna skladnist Grafiki funkcij navedenih v tablici nizhche Poshirenim kriteriyem ocinki algoritmiv ye chas roboti ta poryadok zrostannya trivalosti roboti v zalezhnosti vid obsyagu vhidnih danih Kozhnij konkretnij zadachi zistavlyayut deyake chislo yake nazivayut yiyi rozmirom Napriklad rozmirom zadachi obchislennya dobutku matric mozhe buti najbilshij rozmir matric mnozhnikiv dlya zadach na grafah rozmirom mozhe buti kilkist reber grafu Chas yakij vitrachaye algoritm yak funkciya vid rozmiru zadachi n nazivayut chasovoyu skladnistyu cogo algoritmu T n Asimptotiku povedinki ciyeyi funkciyi pri zbilshenni rozmiru zadachi nazivayut asimptotichnoyu chasovoyu skladnistyu a dlya yiyi poznachennya vikoristovuyut notaciyu Landau velike O Same asimptotichna skladnist viznachaye rozmir zadach yaki algoritm zdaten obrobiti Napriklad yaksho algoritm obroblyaye vhidni dani rozmirom n za chas cn de c deyaka stala to kazhut sho chasova skladnist takogo algoritmu O n Chasto pid chas rozrobki algoritmu namagayutsya zmenshiti asimptotichnu chasovu skladnist dlya najgirshih vipadkiv Na praktici zh traplyayutsya vipadki koli dostatnim ye algoritm yakij zazvichaj pracyuye shvidko Grubo kazhuchi analiz serednoyi asimptotichnoyi chasovoyi skladnosti mozhna podiliti na dva tipi analitichnij ta statistichnij Analitichnij metod daye tochnishi rezultati ale skladnij u vikoristanni na praktici Natomist statistichnij metod dozvolyaye shvidshe zdijsnyuvati analiz skladnih zadach V nastupnij tablici navedeno poshireni asimptotichni skladnosti z komentaryami Skladnist Komentar PrikladiO 1 Stalij chas roboti ne zalezhno vid rozmiru zadachi Ochikuvanij chas poshuku v heshiO log log n Duzhe povilne zrostannya neobhidnogo chasu Ochikuvanij chas roboti interpolyuyuchogo poshuku n elementivO log n Logarifmichne zrostannya podvoyennya rozmiru zadachi zbilshuye chas roboti na stalu velichinu Obchislennya xn dvijkovij poshuk v masivi z n elementivO n Linijne zrostannya podvoyennya rozmiru zadachi podvoyit i neobhidnij chas Dodavannya vidnimannya chisel z n cifr linijnij poshuk v masivi z n elementivO n log n Linearitmichne zrostannya podvoyennya rozmiru zadachi zbilshit neobhidnij chas trohi bilshe nizh vdvichi Sortuvannya zlittyam abo kupoyu n elementiv nizhnya granicya sortuvannya porivnyannyam n elementivO n Kvadratichne zrostannya podvoyennya rozmiru zadachi vchetvero zbilshuye neobhidnij chas Elementarni algoritmi sortuvannyaO n Kubichne zrostannya podvoyennya rozmiru zadachi zbilshuye neobhidnij chas uvosmero Zvichajne mnozhennya matricO cn Eksponencialne zrostannya zbilshennya rozmiru zadachi na 1 prizvodit do c kratnogo zbilshennya neobhidnogo chasu podvoyennya rozmiru zadachi pidnosit neobhidnij chas u kvadrat Deyaki zadachi komivoyazhera algoritmi poshuku povnim pereboromPredstavlennya algoritmivBlok shema algoritmu viznachennya diyevidmini v diyeslovi U procesi rozrobki algoritmu mozhut vikoristovuvatis rizni sposobi jogo opisu yaki vidriznyayutsya za prostotoyu naochnistyu kompaktnistyu miroyu formalizaciyi oriyentaciyi na mashinnu realizaciyu tosho Formi zapisu algoritmu slovesna abo verbalna movna formulno slovesna psevdokod formalni algoritmichni movi shemna en shemi Nassi Shnajdermana grafichna blok shema vikonuyetsya za vimogami standartu Vlastivosti algoritmivAlgoritmi mayut ryad vazhlivih vlastivostej Skinchennist algoritm maye zavzhdi zavershuvatis pislya vikonannya skinchennoyi kilkosti krokiv Proceduru yaka maye reshtu harakteristik algoritmu bez mozhlivo skinchennosti nazivayut metodom obchislen Diskretnist proces sho viznachayetsya algoritmom mozhna rozchlenuvati rozdiliti na okremi elementarni etapi kroki kozhen z yakih nazivayetsya krokom algoritmichnogo procesu chi algoritmu Viznachenist kozhen krok algoritmu maye buti tochno viznachenij Diyi yaki neobhidno zdijsniti povinni buti chitko ta nedvoznachno viznacheni dlya kozhnogo mozhlivogo vipadku Vhidni dani algoritm maye deyaku kilkist mozhlivo nulovu vhidnih danih tobto velichin zadanih do pochatku jogo roboti abo znachennya yakih viznachayut pid chas roboti algoritmu Vihidni dani algoritm maye odne abo dekilka vihidnih danih tobto velichin sho mayut dosit viznachenij zv yazok iz vhidnimi danimi Efektivnist Algoritm vvazhayut efektivnim yaksho vsi jogo operatori dosit prosti dlya togo abi yih mozhna bulo tochno vikonati za skinchennij promizhok chasu z dopomogoyu olivcya ta arkushu paperu Masovist vlastivist algoritmu yaka polyagaye v tomu sho algoritm povinen zabezpechuvati rozv yazannya bud yakoyi zadachi z klasu odnotipnih zadach za bud yakimi vhidnimi danimi sho nalezhat do oblasti zastosuvannya algoritmu PrikladYak priklad mozhna navesti algoritm Evklida Algoritm Evklida efektivnij metod obchislennya najbilshogo spilnogo dilnika NSD Nazvanij na chest greckogo matematika Evklida odin z najdavnishih algoritmiv sho dosi vikoristovuyut Opisanij v Nachalah Evklida priblizno 300 do n e a same v knigah VII ta X U somij knizi algoritm opisano dlya cilih chisel a v desyatij dlya dovzhin vidrizkiv Isnuye dekilka variantiv algoritmu nizhche zapisano v psevdokodi rekursivnij variant funkciya nsd a b yaksho b 0 poverni a inakshe poverni nsd b a mod b Div takozhPortal Matematika Metodi rozrobki algoritmiv Teoriya algoritmiv Spisok algoritmiv Bazovi algoritmichni strukturi Problema zupinki ta algoritmichna nerozv yaznist Strukturi danih Programuvannya Hvilovij algoritmDzherela ta literaturaUkrayinskoyu Tomas Kormen Charlz Lejzerson Ronald Rivest Kliford Stajn 2009 1990 Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4 Algoritm 25 bereznya 2022 u Wayback Machine VUE Ukrayinska radyanska enciklopediya red M Bazhan 2 e vidannya K 1974 1985 tom 1 Algoritm Enciklopediya kibernetiki vidpovidalnij red V Glushkov 1 tt 1973 Algoritm Algoritm 21 kvitnya 2016 u Wayback Machine ESU Mikola Glibovec Osnovi komp yuternih algoritmiv Vidavnichij dim Kiyevo Mogilyanska Akademiya 2003 452 s ISBN 978 966 518 193 9 Inshimi movami Klasichni pidruchniki Niklaus Virt 2004 1975 Algorithms and Data Structures PDF ETH Zurich s 366 angl Donald Knut Fundamental Algorithms The Art of Computer Programming Massachusetts Addison Wesley 1997 T 1 650 s ISBN 0 201 89683 4 angl Donald Knut Seminumerical Algorithms The Art of Computer Programming Massachusetts Addison Wesley 1997 T 2 762 s ISBN 0 201 89684 2 angl Donald Knut Sorting and Searching The Art of Computer Programming Massachusetts Addison Wesley 1998 T 3 780 s ISBN 0 201 89685 0 angl Istoriya Gerard O Regan A Brief History of Computing Springer 2008 ISBN 978 1 84800 083 4 angl Friedrich L Bauer Origins and Foundations of Computing Kurze Geschichte der Informatik Springer 2010 ISBN 978 3 642 02991 2 angl Katalogi algoritmiv za red Ming Yang Kao Encyclopedia of Algorithms Springer 2008 Springer Reference ISBN 978 0 387 30162 4 angl za red Mikhail J Atallah ta Marina Blanton Algorithms and theory of computation handbook General concepts and techniques 2 ge Chapman amp Hall CRC 2010 applied algorithms and data structures ISBN 978 1 58488 822 2 ta drugij tom ISBN 978 1 58488 820 8 angl Davis Martin 1965 The Undecidable Basic Papers On Undecidable Propositions Unsolvable Problems and Computable Functions New York Raven Press ISBN 0486432289 angl Igoshin V I 2008 Matematicheskaya logika i teoriya algoritmov vid 2 ge Moskva Academia ISBN 978 5 7695 4593 1 ros za red Mikhail J Atallah ta Marina Blanton Algorithms and theory of computation handbook General concepts and techniques 2 ge Chapman amp Hall CRC 2010 applied algorithms and data structures ISBN 978 1 58488 822 2 angl Albert Endres Dieter Rombach A Handbook of Software and Systems Engineering Addison Wesley 2003 The Fraunhofer IESE Series on Software Engineering ISBN 0 321 15420 7 angl Gerard O Regan 4 5 A Brief History of Computing Springer 2008 ISBN 978 1 84800 083 4 angl Friedrich L Bauer Origins and Foundations of Computing Kurze Geschichte der Informatik Springer 2010 ISBN 978 3 642 02991 2 angl PrimitkiKleene 1943 in Davis 1965 274 Rosser 1939 in Davis 1965 225 Fuegi J and Francis J Lovelace amp Babbage and the creation of the 1843 notes Annals of the History of Computing 25 4 October December 2003 Digital Object Identifier Arhivovano 30 chervnya 2012 u Archive is Rozdil Algorithms v Bauer 2010 Rozdil Algorithmic Languages v Bauer 2010 Rozdil 3 2 v O Regan 2008 Rozdil 3 3 v O Regan 2008 Rozdil 3 5 v O Regan 2008 Rozdil 3 6 v O Regan 2008 Igoshin s 314 Igoshin s 317 Basics The Turing Machine with an interpreter Good Math Bad Math 9 lyutogo 2007 Arhiv originalu za 2 lyutogo 2012 Procitovano 3 bereznya 2010 Igoshin rozdil 33 Enciklopediya kibernetiki t 2 c 90 91 Igoshin rozdil 34 Probabilistic algorithms should not be mistaken with methods which I refuse to call algorithms which produce a result which has a high probability of being correct It is essential that an algorithm produces correct results discounting human or computer errors even if this happens after a very long time Henri Cohen 1996 A Course in Computational Algebraic Number Theory Springer Verlag s 2 ISBN 3 540 55640 0 Tomas Kormen Charlz Lejzerson Ronald Rivest Kliford Stajn 2009 1990 1 1 Algoritmi Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4 Rozdil 12 s 12 22 v Atallah 2010 Igoshin rozdil 36 Peter Linz 12 1 An Introduction to Formal Languages and Automata 3 tye Jones and Bartlett Publishers 2000 ISBN 0 7637 1422 4 computability and complexity Encyclopedia of computer Science and Technology Facts On File 2009 ISBN 978 0 8160 6382 6 Given any computer program can you determine whether the program will halt end given any input O Regan rozdil 4 5 Rozdil 5 3 6 v Enders 2003 Rozdil 5 3 7 v Enders 2003 O Regan s 119 A Aho Dzh Hopkroft Dzh Ulman Postroenie i analiz vychislitelnyh algoritmov The Design and Analysis of Computer Algorithms Moskva Mir 1979 rozdil 11 v Atallah 2010 rozdil 1 v Atallah 2010 N M Vasilkiv L O Vasilkiv Opornij konspekt lekcij z disciplini Osnovi algoritmizaciyi specialnist Komp yuterni sistemi ta merezhi Ternopil Ekonomichna dumka 2005 32 s z dzherela 12 grudnya 2007 Knut t 1 Donald Knut Seminumerical Algorithms The Art of Computer Programming Massachusetts Addison Wesley 1997 T 2 762 s ISBN 0 201 89684 2 angl Cya stattya nalezhit do dobrih statej ukrayinskoyi Vikipediyi