- •Вступна лекція
- •§0.1. Вступ. Поняття про теорію складності обчислень (тсо). Міри складності.
- •§0.2. Обчислювальні проблеми. Екземпляри задач.
- •§0.1. Вступ. Поняття про теорію складності обчислень (тсо). Міри складності.
- •§0.2. Обчислювальні проблеми. Екземпляри задач.
- •Лекція 1
- •§1.1. Алгоритми і їх складність.
- •§1.2. Асимптотичні позначення швидкості росту функції.
- •§1.1. Алгоритми і їх складність.
- •§1.2. Асимптотичні позначення швидкості росту функції
- •2.2. −Позначення
- •2.3. −Позначення
- •Теорема (про співвідношення -, -, та -позначень)
- •2.6. Властивості асимптотичних відношень
- •Теорема (про транзитивність асимптотичних відношень)
- •Теорема (про оберненість асимптотичних відношень)
- •Лекція 2
- •§2.1. Машини з довільним доступом до пам’яті
- •Лекція 3
- •§ 3.1. Обчислювальна складність рам-програм.
- •Лекція 4
- •§ 4.1. Модель з програмою, що зберігається.
- •Лекція 5
- •§5.2. Бітові обчислення.
- •§5.3. Операції з двійковими векторами.
- •§5.4. Дерева розв’язань.
- •Лекція 6
- •§6.1. Машина Тюрінга.
- •Лекція 7
- •§ 7.1. Зв’язок машин Тюрінга і рам.
- •Недетерміновані машини Тюрінга. Np-повні задачі.
- •§2. Недетерміновані машини Тюрінга
- •Лекція 10
- •§1. Детерміноване моделювання нмт
- •§2. Алгоритм детермінованого моделювання нмт.
Лекція 1
§1.1. Алгоритми і їх складність.
§1.2. Асимптотичні позначення швидкості росту функції.
§1.1. Алгоритми і їх складність.
Для оцінки алгоритмів існує багато критеріїв. Найчастіше нас буде цікавити порядок зростання необхідних для розв’язання задачі часу і обсягу пам’яті при збільшенні вхідних даних. Бажано зв’язати з кожною конкретною задачею деяке число, яке називається її розміром, котре виражало б міру кількості вхідних даних. Наприклад, розміром множення матриць може бути найбільший розмір матриць-співмножників. Розміром задачі про графи може бути число ребер даного графа. Час, який витрачається алгоритмом, як функція розміру задачі, називається часовою складністю цього алгоритму. Поведінка цієї складності в граничному випадку при збільшенні розміру задачі називається асимптотичною часовою складністю. Аналогічно можна розглядати ємнісну складність і асимптотичну ємнісну складність.
Асимптотична
складність алгоритму якраз і визначає
в результаті розмір задач, які можна
розв’язувати цим алгоритмом. Якщо
алгоритм обробляє входи розміру n
за час
де с
– деяка константа, то говорять що часова
складність даного алгоритму є
(читається “порядку
“).
Точніше, говорять, що (невід’ємна)
функція
є
,
якщо існує така константа с,
що
для всіх, за виключенням скінченої
(можливо, пустої) множини, невід’ємних
значень n.
Можна було б подумати, що надзвичайно велике зростання швидкості обчислень, обумовлене появою сучасного покоління обчислюваних машин, зменшить значення ефективних алгоритмів. Проте відбувається в точності протилежне. Оскільки обчислювальні машини працюють все швидше і ми можемо розв’язувати все більше задач, якраз складність алгоритму визначає те збільшення розміру задачі, яке можна досягти із збільшенням швидкості машини.
Нехай
у нас є п’ять алгоритмів
з такими часовими складностями:
Алгоритм Часова складність
.
Тут часова складність – це число одиниць часу, яке потрібне для обробки входу розміру n. Нехай одиницею часу буде одна мілісекунда. Тоді алгоритм може обробляти за одну секунду вхід розміру 1000, тоді як - вхід розміру не більше 9. В таблиці 1.1 наведені розміри задач, які можна розв’язувати за одну секунду, одну хвилину й одну годину кожним із цих алгоритмів.
Таблиця 1.1
Алгоритм |
Часова складність |
Максимальний розмір задачі |
||
1 с |
1 хв. |
1 год. |
||
|
. |
1000 140 31 10 9 |
6 4893 244 30 15 |
1897 153 21 |
Припустимо, що наступне покоління обчислювальних машин буде в 10 раз швидше нинішнього. В таблиці 1.2 показано, як зростуть розміри задач у цьому випадку. Таблиця 1.2
Алгоритм |
Часова складність |
Максимальний розмір задачі |
|
До прискорення |
Після прискорення |
||
|
|
|
10 Приблизно 10 ля великих 3,16 2,15 + 3,3 |
Зазначимо, що для алгоритму десятикратне збільшення швидкості збільшує розмір задачі, яку можна розв’язувати, лише на три, тоді як для алгоритму розмір задачі більше ніж потроюється.
Замість ефекту збільшення швидкості розглянемо тепер ефект застосування більш дієвого алгоритму Повернемося до таблиці 1.1. Якщо в значенні основи для порівняння взяти 1хв., то, замінюючи алгоритм алгоритмом можна розв’язати задачу, в 6 раз більшу, а замінюючи на , можна розв’язати задачу, більшу в 125 раз. Ці результати більш вражаючі, ніж двохкратне покращення, яке досягається за рахунок десятикратного збільшення швидкості. Звідси робимо висновок, що асимптотична складність алгоритму є важливою мірою якості алгоритму.
Не
дивлячись на те що основна увага тут
приділяється порядку зростання величин,
треба розуміти, що великий порядок
зростання складності алгоритму може
мати меншу мультиплікативну константу,
ніж малий порядок зростання складності
іншого алгоритму. У такому випадку
алгоритм з швидко зростаючою складністю
може виявитися більш прийнятним для
задач з малим розміром – можливо, навіть
для всіх задач, які нас цікавлять.
Наприклад, припустимо, що часові
складності алгоритмів
,
,
,
і
справді рівні відповідно 1000n,
100n,
,
,
i
.
Тоді
буде найкращим для задач розміру
,
-
для задач розміру
,
-
при
,
а
-
при
.
Далі ми повинні точно визначити модель обчислювального пристрою, який використовуватимемо для реалізації алгоритмів, а також домовитися, що розуміти під елементарним кроком обчислення. Нажаль, немає такої обчислювальної моделі, котра була б хорошою у всіх ситуаціях. Однією із причин труднощів пов’язана з розміром машинних слів. Наприклад, якщо допустити, що машинне слово може бути цілим числом довільної довжини, то всю задачу можна закодувати одним числом у вигляді одного машинного слова. Якщо ж припустити, що машинне слово має фіксовану довжину, то виникають труднощі навіть простого запам’ятовування довільно великих чисел, не говорячи уже про інші проблеми, яких часто можна позбутися, якщо розв’язуються задачі невеликого розміру. Для кожної задачі потрібно вибрати відповідну модель, яка точно відобразить дійсний час обчислення на реальній обчислювальній машині.
Ми розглянемо декілька основних моделей обчислювальних пристроїв, найбільш важливими із яких є машина з довільним доступом до пам’яті, машина з довільним доступом до пам’яті й програмою, яка зберігається та машини Тюрінга. Ці моделі еквівалентні з точки зору принципіальної обчислювальності, але не з точки зору швидкості обчислень.
Найбільш важливим мотивом розгляду формальних моделей обчислень є потреба розкриття дійсної обчислювальної складності різних задач, з’ясування питання про нижні оцінки часу обчислень. Щоб показати, що не існує алгоритму, котрий виконує дане завдання швидше за визначений час, необхідне точне визначення алгоритму. Одним із таких визначень є машина Тюрінга.
