Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекції з ТСО(1-7).doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.01 Mб
Скачать

Вступна лекція

§0.1. Вступ. Поняття про теорію складності обчислень (тсо). Міри складності.

§0.2. Обчислювальні проблеми. Екземпляри задач.

§0.1. Вступ. Поняття про теорію складності обчислень (тсо). Міри складності.

Визначення 1. ТСО – розділ теорії обчислень, що вивчає об’єм роботи, яку необхідно виконати для розв’язання обчислювальної проблеми.

Задача вважається складною, якщо розв’язання проблеми вимагає великої кількості ресурсів,незалежно від того, який алгоритм при цьому використовується. ТСО формалізує це інтуїтивне поняття, вводячи математичні моделі обчислень для вивчення цих проблем і кількісної оцінки об’єму необхідних ресурсів, таких, як час і пам'ять.

Можливі і інші міри складності, такі, як: кількість повідомлень (комунікаційна складність), число елементів у схемі з функціональних елементів (схемна складність), кількість процесорів. Зокрема, ТСО визначає практичні обмеження на те, що можуть і чого не можуть робити комп’ютери.

З ТСО тісно пов’язані аналіз алгоритмів і теорія обчислюваності. Основна відмінність між ТСО і аналізом алгоритмів полягає в тому, що аналіз алгоритмів присвячений аналізу об’єму ресурсів, необхідних певному алгоритму для розв’язання проблеми, в той час як ТСО задає питання тільки загального характеру про всі можливі алгоритми, що їх можна використати для розв’язання тієї ж проблеми.

ТСО намагається класифікувати проблеми, які можуть або ж не можуть бути розв’язані певною обмеженою кількістю ресурсів.

§0.2. Обчислювальні проблеми. Екземпляри задач.

Обчислювальні проблеми ( задачі) можна розглядати як нескінченний набір пар: екземпляр задачі – розв’язок для даного екземпляра. Вхідним рядком є рядок, що описує екземпляр задачі. Вихідним рядком є опис розв’язку для задачі, заданої вхідним рядком.

Приклад: проблема розпізнавання простоти числа: екземпляр задачі – число, для якого треба визначити, просте воно чи ні; розв’язок – рядок «так», якщо це число просте, і «ні» в іншому випадку.

ТСО розглядає лише масові задачі, тобто вимога наборів екземплярів задач обов’язкова.

Подання задач. При розгляді обчислювальних задач описом екземплярів задач є рядок над алфавітом. Як правило алфавіт береться бінарним (тобто множина {0, 1}). Різні математичні об’єкти повинні бути відповідним чином закодовані. Так, наприклад, цілі числа можуть бути подані в двійковій системі числення, графи можуть бути закодовані безпосередньо через їх матриці суміжності або через кодування списків суміжності в двійковій системі.

Задачі розпізнавання. Задачі розпізнавання – один з центральних об’єктів в ТСО. Задачі розпізнавання – це особливій тип обчислювальної проблеми, відповіддю на яку є «так» або «ні». Задачі розпізнавання можна сформулювати у вигляді задачі належності вхідного рядка до деякої підмножини (мови) множини всіх вхідних рядків. Вхідний рядок проблеми належить до відповідної мови тоді і лише тоді, коли відповідь на цей рядок є «так». Таким чином, задача розпізнавання - задача розпізнавання належності вхідного рядка деякій мові.

Приклад задачі розпізнавання: Вхідний рядок – опис довільного графа. Проблема полягає у вирішенні питання, чи є даний граф зв’язним. Мова зв’язних графів – множина описів всіх зв’язних графів. Для одержання точного визначення цієї мови треба вирішити, як графи кодуються як бінарні рядки.

Задачі пошуку. Задачі пошуку – обчислювальні задачі, де вхідний рядок є більш складним, ніж у задачах розпізнавання. Це не просто «так» чи «ні». Прикладом задачі пошуку може бути задача комівояжера. Вхідним рядком є опис зваженого графа (з числовими помітками на ребрах). Вихідний рядок – опис оптимального маршруту. В умові вказується критерій вигідності: найкоротший, самий дешевий, сукупний критерій та ін.

Існує парна залежність між задачами пошуку і задачами розпізнавання. Задачу пошуку можна сформулювати як задачу розпізнавання. Наприклад, для задачі пошуку «множення двох чисел» відповідає парна задача розпізнавання може бути подана, як множина трійок (А, В, С) таких, що виконується відношення А×В = С.

Для того, щоб надалі вивчати такі поняття, як «важкорозв’язувані задачі», «еквівалентні по трудності задачі», необхідно домовитись про значення деяких основних термінів.

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

1) загальним списком всіх її параметрів;

2) формулюванням тих властивостей, яким повинна задовольняти відповідь, або, іншими словами, розв’язок задачі.

Як приклад, розглянемо класичну задачу про комівояжера. Параметри цієї масової задачі складаються із скінченного набору «міст» С = {c1, c2,…,cm} та відстаней d(ci, ci) між кожною парою міст ci, ci із множини С.

Розв’язок – це такий впорядкований набір <cp(1), cp(2),…,cp(m)> заданих міст, що мінімізує величину

∑d(cр(i), cр(i+1)) + d(cр(m), cр(1));

(сума по і, яке пробігає від 1 до m – 1).

Цей вираз дає довжину маршруту, що починається у місті cр(1), проходить послідовно через усі міста і повертається в cр(1) безпосередньо із останнього міста cр(m). Індивідуальна задача про комівояжера , показана на рисунку 0.1, задається наступним чином:

С = {c1, c2, c3, c4},

d(c1, c2) = 10, d(c1, c3) = 5, d(c1, c4) = 9, d(c2, c3,) = 6, d(c2, c4,) = 9, d(c1, c1,) = 3.

Послідовність <c1, c2, с4, c3> є розв’язком задачі, остільки відповідний маршрут має мінімальну можливу довжину, рівну 27.

Рис. 0.1. Індивідуальна задача про комівояжера і маршрут мінімальної можливої довжини, рівної 27.

Під алгоритмом будемо розуміти загальну, виконувану крок за кроком, процедуру розв’язування задачі. Можна вважати її програмою для ЕОМ, написаною на формальній машинній мові. Будемо говорити, що алгоритм розв’язує масову задачу, якщо він застосовний до будь – якої індивідуальної задачі з даного масиву і обов’язково дає розв’язок індивідуальної задачі. Підкреслимо, що термін «розв’язок» тут слід розуміти строго у відповідності з даним вище означенням. Тому не можна сказати, що алгоритм « розв’язує» задачу про комівояжера, якщо він не видає маршрут мінімальної довжини хоча б для однієї якоїсь індивідуальної задачі.

Взагалі кажучи, нам необхідний найбільш «ефективний» алгоритм для розв’язування задачі.

В самому широкому смислі поняття ефективності зв’язане з усіма обчислювальними ресурсами, необхідними для роботи алгоритма, але звичайно під «самим ефективним» алгоритмом розуміють самий швидкий, остільки обмеження по часу часто є домінуючим фактором, який визначає придатність конкретного алгоритму для практики. Час роботи алгоритму зручно виражати у вигляді функції від однієї змінної,що характеризує «розмір» індивідуальної задачі, тобто об’єм вхідних даних, необхідних для описання цієї задачі.

Такий підхід зручний, остільки надалі порівняна складність задач буде оцінюватись через їх розміри. Часто розмір задачі вимірюється неформально.

Наприклад, в задачі про комівояжера з цією метою використовують число міст. Але в задачі з m містами крім номерів цих міст на об’єм вхідної інформації впливають m (m - 1)/2 величин, що задають відстані між містами і значення цих величин. Якщо нам доведеться мати справу з часовими характеристиками в точній математичній постановці, то слід так визначати розмір задачі, щоб усі ці фактори були враховані.

Для цього звернемо увагу на те, що опис індивідуальної задачі, яку ми даємо у термінах входу для ЕОМ, можна розглядати як один скінченний ланцюжок( або слово) символів, вибраних зі скінченного вхідного алфавіту. Не зважаючи на те, що існують різні шляхи опису даної індивідуальної задачі, припустимо,що вибрано зарання деякий певний спосіб і що з кожною масовою задачею зв’язана деяка фіксована схема кодування, яка відображає індивідуальні задачі у відповідні ланцюжки символів. Вхідна довжина індивідуальної задачі із відповідного масиву, визначається як число символів в ланцюжку, одержаному застосуванням до індивідуальної задачі схеми кодування для масової задачі. Саме це число, тобто вхідна довжина, і використовується в якості формальної характеристики розміру індивідуальної задачі.

Наприклад, різні конкретні задачі про комівояжера можна записати з допомогою алфавіту {c, [, ], /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,}, при цьому попередній приклад буде закодований у вигляді такого ланцюжка символів:

c[1] c[2] c[3] c[4]//10/5/9//6/9//3

Більш складні індивідуальні задачі кодуються аналогічно. При такій схемі кодування для задачі про комівояжера вхідна довжина в нашому прикладі буде рівна 32.

Часова складність алгоритму відображає необхідні для його роботи затрати часу. Це функція, яка кожній вхідній довжині n ставить у відповідність максимальний (по всіх індивідуальних задачах довжини n) час, затрачений алгоритмом на розв’язування індивідуальних задач цієї довжини. Ця функція не може бути визначена, поки не зафіксована схема кодування, що визначає вхідну довжину індивідуальної задачі, і не обрано обчислювальний пристрій чи його модель, який визначає час роботи.