You are on page 1of 79

АЛГОРИТМИ І СТРУКТУРИ

ДАНИХ

ГЛИБОВЕЦЬ М.М.

ЛЕКЦІЯ 1. ВСТУП ДО АНАЛІЗУ


АЛГОРИТМІВ
0. ЯК ВИВЧАТИ КУРС?
 Матеріал лекцій – теоретичний матеріал курсу
Презентації і текстові файли
 Практичні заняття – програмування в Java

Особливості мови для реалізації алгоритмів


Домашні завдання, контрольні роботи,
лабораторні роботи
 Самостійна робота

Текстові файли, додаткова література


ВСТУП
Вцьому курсі ми будемо вивчати:
алгоритми вирішення задач
структури даних
способи задання і збереження
Приклади застосування
РЕСУРСИ
 http://distedu.ukma.edu.ua

 Глибовець М. М. Основи комп’ютерних


алгоритмів. К.: Видавничий дім “КМ Академія”,
2003. 
 Алгоритмы + структуры данных = программы,
Н.Вирт
 Алгоритмы на Java 4-е издание, Роберт
Седжвик, Кевин Уейт, Вильямс, 2013
 http://algs4.cs.princeton.edu

 https://www.coursera.org/course/algs4partI

 https://www.coursera.org/course/algs4partII
1. ОСНОВНИМИ В ЗАГАЛЬНІЙ ІНФОРМАТИЦІ Є
ТРИ ПОНЯТТЯ: ЗАДАЧА, АЛГОРИТМ, ПРОГРАМА.

Маємо три етапи в розв’язуванні задач (помітимо,


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

Для отримання результатів необхідно знати спосіб


вирішення задачі, тобто мати у своєму
розпорядженні алгорит , в якому зазначено, які дії і
в якому порядку слід виконати, щоб вирішити
задачу (отримати шукані результати).
ІСТОРІЯ
 Вивчення алгоритмів бере початок з …
 Уточнення – Хорезмі, Архімеда, Евкліда.
 Перша формалізація теорії алгоритмів була
створена Чорчем і Тюрінгом в Прінстоні в
1930-х роках
 Нові алгоритми з’являються кожного дня і
покращуються щохвилини.
АЛГОРИТМ

точне формальне розпорядження, яке


однозначно визначає зміст і послідовність
операцій, що переводять задану сукупність
початкових даних в шуканий результат
 це скінчена послідовність
загальнозрозумілих розпоряджень,
формальне виконання яких дозволяє за
скінченний час отримати рішення деякої
задачі або будь-якої задачі з деякого класу
задач.
АЛГОРИТМ - ЦЕ АБСТРАКТНИЙ
МАТЕМАТИЧНИЙ ОБ'ЄКТ
 Алгоритм - це абстрактний математичний
об'єкт, тому він вимагає абстрактного
виконавця.
 Визначення цього виконавця по суті дає
операційну семантику алгоритмічної мови.
 Модифікація алгоритмічної мови, очевидно,
вимагає відповідної зміни іншого
математичного об'єкту - виконавця.
2. АВТОМАТНА МОДЕЛЬ ОБЧИСЛЕННЯ
 Розглянемо абстрактну систему, традиційно
називану математиками "чорна скриня", що
перетворює подавані на її вхід символи x певної
абетки X на вихідні символи y абетки Y.

 Таким чином можна подати поведінку більшості


дискретних систем, що застосовуються у різних
галузях техніки (не тільки обчислювальної).
АВТОМАТНА МОДЕЛЬ ОБЧИСЛЕННЯ
 Автомат – це така система, функціювання якої
може бути описано за допомогою використання
внутрішніх станів Q ={q} у такий спосіб, що для
кожного внутрішнього стану зазначено, до
якого наступного стану потрапить система за
отримання вхідного символу x і який символ y
формується на виході.
 Зазначається початковий стан системи.

 У разі скінчених множин X, Y, а, найбільше, Q,


автомат називають скінченним.
АВТОМАТНА МОДЕЛЬ ОБЧИСЛЕННЯ
 Скінченний автомат (СА) – це деяка
абстрактна модель, що містить кінцеве
число станів чого-небудь.
 Використовується
для подання і управління
потоком виконання будь-яких команд.
 САідеально підходить для реалізації задач
штучного інтелекту в іграх, отримуючи акуратне
рішення без написання громіздкого і складного
коду.
ЩО Ж ТАКЕ СКІНЧЕННИЙ АВТОМАТ?
 СА (або просто FSM - Finite-state machine) це модель
обчислень, заснована на гіпотетичній машині станів.
В один момент часу тільки один стан може бути
активним.
отже, для виконання будь-яких дій машина
повинна змінювати свій стан.
 СА зазвичай використовуються для організації та
подання потоку виконання чого-небудь.
 Це особливо корисно при реалізації задач штучного
інтелекту в іграх.
ПРИКЛАД ЗАСТОСУВАННЯ В ЗШІ
 Розглянемо реалізацію «мозку» ворога: кожен стан якого
визначає якусь дію (напасти, ухилитися і т. п.).

 СА можна представити у вигляді графа, вершини якого є станами, а ребра -


переходи між ними.
 Кожне ребро має мітку, що інформує про те, коли повинен відбутися перехід.

 Наприклад, на зображенні вище видно, що автомат змінить стан «wander» на


стан «attack» за умови, що гравець знаходиться поруч.
ПЛАНУВАННЯ СТАНІВ І ЇХ ПЕРЕХОДІВ
 Реалізація СА починається з виявлення його станів і переходів
між ними.
 Побудуємо скінченний автомат, що описує керування ліфтом у
триповерховому будинку.
 Вхідна абетка автомата складається з натискання кнопки
виклику відповідного поверху: X = {C1, C2, C3};
 Вихідна абетка складається з переміщень на один чи два
поверхи нагору чи донизу, а також зупинки ліфта: Y ={U1, U 2,
D1, D2, S};
 Стан відповідає поверхові, на якому перебуває автомат: Q =
{ q1, q2, q3 };
 Для визначеності оберемо початковий стан q1 .
ФУНКЦІЮ ПЕРЕХОДІВ АВТОМАТА
ЗРУЧНО ПОДАВАТИ ДІАГРАМОЮ
СТАНІВ
ОТЖЕ, СКІНЧЕННИЙ АВТОМАТ – ЦЕ П'ЯТІРКА
 A = {X, Q, Y ,q0, F} , де
X ={x – скінченна вхідна абетка}
 Y ={y – скінченна вихідна абетка}
 Q ={q – скінченна множина внутрішніх станів}
 q0 – початковий стан,
 F: X × Q →Y × Q – функція переходів.

 Як було розглянуто вище, функцію переходів може бути


наочно подано діаграмою станів.
 Зручним буває також матричне подання функції
переходів.
МАТРИЧНЕ ПОДАННЯ ФУНКЦІЇ
ПЕРЕХОДІВ.
ДЛЯ ЗАДАЧІ ПРО ЛІФТИ:
АВТОМАТИ МІЛІ ТА МУРА
 Подані в попередньому підрозділі скінченні
автомати носять ще назву автоматів Мілі.
 Іноді зручним стає більш просте визначення
автомата, в якому функція переходів задає
наступний стан, а вихід автомата залежить
лише від його поточного стану.
 Такі автомати названо автоматами Мура.

 Доведено, що обидва способи визначення


скінченного автомата є еквівалентні в тому
розумінні, що будьякий автомат Мілі може бути
перетворено на відповідний автомат Мура й
навпаки.
АВТОМАТ МУРА
 Автомат Мура – це шістка
B = (X, S,Y, s0, P, R) де
X ={x – скінченна вхідна абетка}
Y ={y – скінченна вихідна абетка}
 S ={s – скінченна множина внутрішніх станів},
 s0 – початковий стан,
P: X × S → S – функція переходів,
R : S →Y функція виходів.
ПРИКЛАД ПРОСТОГО АВТОМАТА МУРА
 Наведемо приклад простого автомата Мура,
що розпізнає цілі числа в двійковій системі
числення.
 Абетка вхідних символів: X = {0, 1, −, + },

 Абетка вихідних символів Y = {0, 1};

видача символу 0 відповідає


нерозпізнаному ланцюжку символів,
видача символу 1 відповідає правильно
розпізнаному ланцюжку символів.
 Отже, множина станів поділяється на дві
підмножини: проміжні й заключні.
ДІАГРАМУ СТАНІВ АВТОМАТА
ПОДАНО:
 Початковий стан автомата s0 ;
 Функція виходів: R(s0 ) = 0, R(s1) = 0 , R(s2 ) =1.

 Відзначимо, що переходи зі стану 2 s визначено не для


всіх символів алфавіту.
 Щоби побудувати цілковито визначений автомат,
розпізнавач часто доповнюють неповоротним станом, у
який переходять за дістанні будь-якого неприпустимого
символу.
3. ІНТУЇТИВНЕ ПОНЯТТЯ АЛГОРИТМУ

 Математики протягом століть користувалися


інтуїтивним поняттям алгоритму.
 В рамках подібного визначення були сформульовані і
успішно застосовувалися на практиці алгоритми для
вирішення таких завдань, як виконання арифметичних
дій «стовпчиком», знаходження коренів квадратних
рівнянь, рішення систем лінійних рівнянь і т.п.
 Поступово вони переходили до постановки та
вирішення все більш складних завдань.
3.1.АЛГОРИТМІЧНО НЕРОЗВ'ЯЗНІ ПРОБЛЕМИ
 Г.
Лейбніц в XVII столітті намагався побудувати
загальний алгоритм вирішення будь-яких
математичних задач.
 У XX столітті ця ідея набула більш конкретну форму:
побудувати алгоритм перевірки правильності будь-
якої теореми при будь-якій системі аксіом.
 Побудувати такі алгоритми не вдавалося, і математики
висунули припущення: а раптом для того чи іншого
класу задач в принципі неможливо побудувати
алгоритм рішення?
 На основі цього припущення виникло поняття
алгоритмічно нерозв'язної задачі ­– задачі, для якої
неможливо побудувати процедуру вирішення.
ПРОБЛЕМА ЗУПИНКИ

• Однією з перших проблем, для яких була


строго доведена алгоритмічна
нерозв'язність, була так звана проблема
зупинки.
АЛГОРИТМІЧНО НЕРОЗВ'ЯЗНІ ПРОБЛЕМИ
 Проблема перевірки правильності будь-яких
математичних тверджень також виявилася
алгоритмічно нерозв’язною.
 Сформулюємо її формально в більш загальному вигляді.

 Нехай у нас є посилка R і наслідок S, записані у вигляді


слів (формул) в деякому алфавіті, що складається з букв,
цифр, дужок, знаків математичних і логічних операцій.
 Процес виведення наслідка S з посилки R може бути
описаний шляхом вказівки послідовності допустимих
формальних перетворень слів (дедуктивного ланцюжка).
ПРОБЛЕМА ВИВОДИМОСТІ
 Проблему розпізнавання виводимості можна
сформулювати наступним чином: Чи існує для будь-
яких двох слів R і S дедуктивний ланцюжок, що веде
від R до S?
 Рішення розуміється в сенсі існування алгоритму, що
дає відповідь на це питання для будь-яких слів R і S.
 У 1936 році американський математик Чорч довів
теорему про те, що проблема розпізнавання
виводимості алгоритмічно нерозв'язна.
 Тим самим з'ясувалася причина безуспішності всіх
минулих спроб вирішення завдання, поставленого
Лейбніцем.
"10-Я ПРОБЛЕМА ГІЛЬБЕРТА"
 Нерозв'язною виявилася і так звана "10-я проблема
Гільберта".
 У спрощеному формулюванні вона звучить так:
потрібно виробити алгоритм, що дозволяє для будь-
якого алгебраїчного рівняння
P (x1, x2, ..., xn) = 0, де P - багаточлен з цілими
коефіцієнтами, з'ясувати, чи має воно цілочисельне
рішення.
 У 1970 р й математик Ю.В. Матіясевіч довів
неможливість побудови алгоритму для вирішення цього
завдання.
 Цікаво,
що якщо для конкретного рівняння відомо, що
рішення в цілих числах є, то алгоритм відшукання цього
рішення існує.
ЯКІ МЕТОДИ ВИКОРИСТОВУЮТЬСЯ ДЛЯ ДОКАЗУ
АЛГОРИТМІЧНОЇ НЕМОЖЛИВОСТІ РОЗВ'ЯЗАННЯ?
 Зазвичай нерозв'язність нових задач доводиться
методом зведення до цим задач відомих алгоритмічно
нерозв’язних задач.
 Тим самим доводиться, що якби мала розв'язок нова
задача, то можна було б вирішити і свідомо нездійсненне
завдання.
 Застосовуючи метод звідності, зазвичай посилаються на
штучні задачі, які не мають самостійного інтересу, але
для яких легко безпосередньо довести їх нерозв'язність,
наприклад, описану вище проблему самозастосовності.
4. УНІВЕРСАЛЬНИЙ АЛГОРИТМ
(ПЗУПИНКИ)
 Практичний досвід підказує, що розробники самі
можуть ПЗ для конкретної програми вирішити, в тому
числі і довести, що певна програма на конкретних
вхідних даних зациклиться.
 Тут дуже важливо провести грань між рішенням
завдання для окремого випадку і побудовою
універсального алгоритму.
УНІВЕРСАЛЬНИЙ АЛГОРИТМ
(ПЗУПИНКИ)
 Дійсно, проблему зупинки для конкретної програми або
навіть класу програм вирішити можна.
 Так, для програми, що складається тільки з лінійних
конструкцій, легко показати, що вона завжди закінчить
свою роботу.
 Наведений Тьюрингом доказ говорить про
неможливість побудови загального алгоритму,
придатного для будь-яких програм і вхідних даних.
5. АЛГОРИТМІЧНІ КОНСТРУКЦІЇ.
ОСНОВНІ ТИПИ АЛГОРИТМІЧНИХ КОНСТРУКЦІЙ
 Длязапису алгоритмів існують різні способи: текстово-
формульний запис, блок-схема, скінченний автомат,
машина Тьюринга, машина Поста, програма на
алгоритмічній мові і ін.
 Кожен алгоритм записується в системі команд
виконавця.
 Незалежно від обраної форми запису елементарні
кроки алгоритма об'єднуються в алгоритмічні
конструкції (структури): послідовні, розгалужені,
циклічні, допоміжні алгоритми і рекурсивні.
АЛГОРИТМІЧНІ КОНСТРУКЦІЇ.
ОСНОВНІ ТИПИ АЛГОРИТМІЧНИХ КОНСТРУКЦІЙ
У1966 році Бом і Джакопіні довели, що для
запису будь-якого, як завгодно складного,
алгоритму досить трьох основних алгоритмічних
конструкцій:
послідовне виконання,
розгалуження,
цикл .
АЛГОРИТМІЧНІ КОНСТРУКЦІЇ.
ОСНОВНІ ТИПИ АЛГОРИТМІЧНИХ КОНСТРУКЦІЙ

Послідовне виконання, розгалуження і цикл


називають базовими конструкціями
структурного програмування.
 Їх особливістю є те, що будь-яка з них має
тільки один вхід і один вихід, тому вони
можуть вкладатися одна в одну.
6. ВИСЛОВЛЕННЯ
 Висловлювання є однією з основних форм
представлення інформації.
 Дійсно, за допомогою висловлювань (висловлень) ми
можемо описувати властивості об'єктів:
 Число 5 - непарне,
 15 квітня 2019 року в Києві був ураганний вітер,
 (взаємини об'єктів) Якщо в ромбі всі кути прямі, то це -
квадрат.
 Задопомогою висловлювань ми записуємо алгоритми в
текстовій формі, будуємо інформаційні системи і т.п.
ВИСЛОВЛЕННЯ
 Кожне елементарне висловлення в певній контексній
системі несе значення істина або брехня.
 Одну з перших спроб осягнути поняття висловлювання
зробив Арістотель (384-322 до н.е.).
 Він писав: "Висловлення - це мовне утворення,
відносно якого має сенс говорити про його істинність
або хибність".
 Для точного визначення поняття висловлювання і
формальної роботи з висловлюваннями в інформатиці
будуються спеціальні формальні системи.
ВИСЛОВЛЕННЯ
В рамках ФС можемо представляти інформацію в
формальному вигляді, наприклад:
у вигляді логічних формул, - так звана зовнішня
форма подання інформації,
обчислювати значення інформації (в сенсі опису
властивостей об'єкта, взаємовідносин об'єктів і т.п.) -
так звана власне "абстрактна" інформація.
ВИСЛОВЛЕННЯ
 Манфред Брой (німецький вчений, лауреат премії
Лейбніца в галузі інформатики) дає наступне визначення
інформації:
"Інформацією називають абстрактний зміст
("змістовне значення", "семантика") будь-якого
висловлювання, опису, вказівки, повідомлення.
 Зовнішню форму зображення інформації називають
поданням інформації.
 Виявлення відповідних систем усвідомлення ("мов") для
певних класів інформації є одним із завдань
інформатики.
7. СЕРЕДОВИЩЕ ВИКОНАННЯ
 Множина команд, які може виконувати виконавець,
складають систему команд виконавця (СКВ).
 Алгоритм будується з команд СКВ.

 Об'єкти, над якими виконавець може вчиняти дії,


складають середовище виконавця.
 Основні властивості алгоритму (дискретність,
зрозумілість, визначеність, скінченість) забезпечують
можливість формальної роботи виконавця.
 Звідси випливає, що виконавцем алгоритмів може бути
автоматичний пристрій.
 Клас задач, на вирішення яких спрямований виконавець,
визначається його системою команд.
ДВІ КАТЕГОРІЇ ВИКОНАВЦІВ

У алгоритмізації прийнято виділяти дві категорії


виконавців: виконавці, що працюють «в середовищі», і
виконавці, що працюють «з величинами».
 Для першої категорії середовищем виконавця може бути
лист (екран), на якому виконавець:
 формує зображення (малюнки, креслення та ін.);
 лабіринт, який виконавець повинен подолати;
предмети, які виконавець повинен розставити в
певному порядку, і т.п.
ДВІ КАТЕГОРІЇ ВИКОНАВЦІВ
 Виконавціроботи з величинами призначені для обробки
числової або символьної інформації.
 Виконавець, в систему команд якого входять
арифметичні і логічні операції, може вирішувати
обчислювальні завдання.
 Вхідними даними і результатами для нього є числа.

 Універсальнимвиконавцем алгоритмів для роботи з


величинами є комп'ютер.
8. СТРУКТУРИ ДАНИХ
 Необхідною умовою побудови алгоритму є формалізація
даних, тобто приведення інформації до деякої
інформаційної моделі, вже описаної і дослідженої.
 Коли така модель знайдена, кажуть, що визначена
абстрактна структура даних.
 Абстрактна структура даних описує ознаки і властивості
об'єкта, взаємозв'язок між елементами об'єкта, а також
можливі операції над даним об'єктом або класом
об'єктів.
 Одним із головних завдань інформатики є знаходження
форм представлення інформації, зручних для
комп'ютерної обробки.
ПОНЯТТЯ СТРУКТУРИ ДАНИХ
 Інформатика як точна наука працює з формальними
(описаними математично строго) об'єктами.
 Такими об'єктами - базовими абстрактними структурами
даних, що використовуються в інформатиці, є:
 цілічисла;
 дійсні числа;
 символи;
 логічні значення.
 Длякомп'ютерної обробки цих об'єктів у мовах
програмування існують відповідні типи даних
ПОНЯТТЯ СТРУКТУРИ ДАНИХ
 Базовіоб'єкти можна об'єднувати в більш складні
структури, додаючи операції вже над структурою в
цілому і правила доступу до окремих елементів цієї
абстрактної структури даних.
 До таких абстрактних структур даних відносяться:
вектори (скінчені масиви); таблиці (матриці); багатовимірні
масиви; графи; динамічні структури; послідовності символів і
чисел; рядки; списки; черги; стеки; дерева; графи.
 Вдалийвибір структури даних часто є запорукою
подальшого створення ефективного алгоритму і
програми.
ПОНЯТТЯ СТРУКТУРИ ДАНИХ
 Алгоритм можна розробляти в термінах абстрактної
структури даних, але для реалізації алгоритму в
конкретній мові програмування необхідно знайти
спосіб її подання в термінах типів даних і операторів,
які підтримуються у цій мові програмування.
 Для комп'ютерного представлення абстрактних
структур використовуються структури даних, які
представляють собою набір змінних, можливо різних
типів даних, об'єднаних певним чином.
ПОНЯТТЯ СТРУКТУРИ ДАНИХ
 Дляконструювання таких структур, як вектор, таблиця,
рядок, послідовність, в більшості мов програмування
присутні стандартні типи даних: одновимірний масив,
двомірний масив, рядок, файл (рідше список)
відповідно.
 Організацію інших структур даних, в першу чергу
динамічних структур, розмір яких змінюється під час
виконання програми, програмісту доводиться
здійснювати самостійно, використовуючи базові
типи даних.
РЕЗЮМЕ: СТРУКТУРИ ДАНИХ
 При вирішенні будь-якої задачі виникає необхідність
роботи з даними і виконання операцій над ними.
 Набір цих операцій для кожного завдання, взагалі
кажучи, свій.
 Однак, якщо деякий набір операцій часто
використовується при вирішенні різних завдань, то
корисно придумати спосіб організації даних, що
дозволяє виконувати саме ці операції якомога
ефективніше.
ПОНЯТТЯ СТРУКТУРИ ДАНИХ
 Після того, як такий спосіб придуманий, при вирішенні
конкретної задачі можна вважати, що у нас в наявності є
"чорний ящик" (його ми і будемо називати структурою
даних), про який відомо, що в ньому зберігаються дані
деякого роду, і який вміє виконувати деякі операції над
цими даними.
 Це дозволяє відволіктися від деталей і зосередитися на
особливостях завдання.
 Всередині (тобто в комп'ютері) цей "чорний ящик" може
бути реалізований по-різному, при цьому слід прагнути
до якомога більш ефективної (швидкої і економічно
витрачає пам'ять) реалізації.
9. ТЕОРІЯ АЛГОРИТМІВ
 Теорія алгоритмів як розділ математики виникла на
початку 30-х років XX століття в зв'язку з необхідністю
уточнення поняття алгоритму.
 Раніше, вирішуючи різні завдання, математики
використовували інтуїтивне поняття алгоритму.
 Але в зв'язку з ускладненням завдань у математиків
стала виникати думка, що не для всіх задач можна
знайти процедуру вирішення, яка була б алгоритмом,
що згодом підтвердилося отриманням результатів про
існування алгоритмічно нерозв'язних проблем.
 Для доведення факту відсутності алгоритму необ-
ходимо було дати точне визначення алгоритму.
ТЕОРІЯ АЛГОРИТМІВ
 Одна справа знайти вирішуючий алгоритм - це
можна зробити, використовуючи інтуїтивне
поняття алгоритму.
 Інша справа - довести відсутність алгоритму,
для цього потрібно знати точно, відсутність
чого ми доводимо.
 Спроби сформулювати таке визначення привели
в рамках математичної логіки до виникнення
теорії алгоритмів.
ТЕОРІЯ АЛГОРИТМІВ- ТРИ ПІДХОДИ
 У теорії алгоритмів використовуються різні підходи до
формалізації понять алгоритму та обчислюваної функції.
 Пошук таких підходів проходив у трьох напрямках.

 У першому всякий алгоритм обчислює значення деякої числової


функції, а його елементарні кроки - це арифметичні операції.
 Послідовність кроків визначається за допомогою суперпозиції -
підстановки функцій до функцій, рекурсії - визначення значення
функції через раніше обчислені значення цієї ж функції, і
оператора мінімізації, завдяки якому з усюди визначеної функції
можна отримати не всюди визначену обчислювану функцію.
ТРИ ПІДХОДИ
 Клас функцій, що породжується цими трьома
операторами, називається класом частково-
рекурсивних функцій.
 Другий напрямок засноване на визначенні
алгоритмічного процесу як процесу, здійсненного на
конкретній теоретичній машині.
 Прикладами таких алгоритмічних моделей є "машина
Тьюринга" і "машина Поста".
 Третій напрям відволікається від конкретних машин
(тобто в цих моделях відсутні поняття "пам'ять", «стан
машини" і т.п.). Найбільш відома алгоритмічна модель
цього типу - нормальні алгоритми Маркова.
ДЕСКРИПТИВНА ТА
 Всі ці підходи привели до одного і того ж класу
алгоритмічно обчислюваних функцій.
 Зазначені результати складають основу дескриптивної
теорії алгоритмів, основним змістом якої є класифікація
завдань за ознакою алгоритмічної можливості
розв'язання, тобто отримання висловлювань на кшталт
"Задача П алгоритмічно розв'язна" або протилежне.
 В цьому напрямку отримано ряд фундаментальних
результатів ( доказ Ю.В. Матіясевіч в 1970 році
алгоритмічної нерозв'язності десятої проблеми
Гільберта).
10. ЗАСТОСУВАННЯ ТЕОРІЇ АЛГОРИТМІВ

 Застосування теорії алгоритмів здійснюється як у


використанні самих результатів (особливо це
стосується використання розроблених алгоритмів),
так і у виявленні нових понять і уточнення старих.
 З її допомогою досліджуються доказовість,
ефективність, можливість розв'язання і ін.
 Всякому алгоритму відповідає задача, для
вирішення якої він призначений.
 У зворотний бік це невірно - задача може
вирішуватися різними алгоритмами.
 Проте задача визначення еквівалентності двох
алгоритмів є алгоритмічно нерозв'язною.
ЗАСТОСУВАННЯ ТЕОРІЇ АЛГОРИТМІВ

 Застосування ЕОМ стало стимулом розвитку


теорії алгоритмів і вивчення алгоритмічних
моделей, самостійного вивчення алгоритмів з
метою їх порівняння відносно (числа дій, витрат
пам'яті), а також їх оптимізації.
 Виник важливий напрямок в теорії алгоритмів -
складність алгоритмів і обчислень.
 Почала складатися так звана метрична теорія
алгоритмів, основним змістом якої є класифікація
задач за класами складності.
 Самі алгоритми стали об'єктом точного
дослідження, як і ті об'єкти, для роботи з якими
вони призначені.
11Є ФОРМАЛЬНЕ ВИЗНАЧЕННЯ АЛГОРИТМУ І
ОБЧИСЛЕННЯ ФУНКЦІЇ
 Всі задачі прийнято ділити на два класи:
 задачі, пов'язані з обчисленням функцій,
 задачі, пов'язані з розпізнаванням приналежності
об'єкта заданій множині (або відповіддю на питання:
чи має об'єкт задану властивість?).
У першому випадку алгоритм A обчислює
функцію fA, тобто, почавши працювати з вхідними
даними x, він повинен через деякий час
зупинитися і видати результат
y = fA (x).
ФОРМАЛЬНЕ ВИЗНАЧЕННЯ АЛГОРИТМУ І ОБЧИСЛЕННЯ
ФУНКЦІЇ
 Функція fA не обов'язково числова.
 Наприклад, функція "телефонний довідник" може
за прізвищем абонента видати його телефонний
номер.
 У другому випадку алгоритм відповідає на
питання: «Чи істинне висловлення x належить
M?" - і видає один з двох можливих результатів:
так чи ні.
 Ми також можемо вважати це функцією, що
приймає два значення.
ФОРМАЛЬНЕ ВИЗНАЧЕННЯ АЛГОРИТМУ

 Багато
практичних задач включають в себе обидва
випадки.
 Наприклад, при вирішенні квадратного рівняння:
 спочатку потрібно з'ясувати питання про існування
дійсних коренів рівняння,
 і тільки при позитивній відповіді на це питання
обчислюються корені.
 Першез понять призводить до обчислюваної
функції.
12. ТЕОРІЯ ОБЧИСЛЮВАНИХ ФУНКЦІЙ

 Теорія обчислюваних функцій з'явилася в 1930-і роки


завдяки зусиллям кількох авторів майже одночасно
(під різними назвами).
 Виникли поняття:
 загально-рекурсивної функції (Черч: 1933р, Кліні: 1935р.),
 обчислюваної функції за Тьюрингом (Тьюринг: 1936р,
1937р.),
 представимої функції в формальній системі (Гедель: 1936
р.),
 комбінаторно визначної функції (Шейнфінкель, Каррі,
Россер: 1924-1936 рр.),
 канонічної системи (Пост: 1943 р.),
 нормального алгоритму (Марков: 1950 р.).
ТЕОРІЯ ОБЧИСЛЮВАНИХ ФУНКЦІЙ

У всіх цих підходах до формалізації поняття


обчислюваності спочатку вводиться в розгляд
множина конструктивних об'єктів, які в
кінці кінців можуть бути представлені
словами скінченої довжини в деякому
алфавіті.
 Зокрема, конструктивними є натуральні
числа, які можна трактувати як слова в алфавіті
"0" .. "9".
ТЕОРІЯ ОБЧИСЛЮВАНИХ ФУНКЦІЙ

 Функція f знатуральными аргументами і значеннями


називається обчислювальною, якщо існує алгоритм,
що її обчислює, тобто існує такий алгоритм A, що
 якщо f(n) визначено для якогось натурального n, тоді
алгоритм A, отримуючи на вхід n, зупиняється і друкує
 fA(n) = f(n);
 якщо f(n)
не визначено, тоді алгоритм A не зупиняється,
отримавши на вхід n, тобто fA(n) не визначено.
Поняття обчислювальності визначається тут для
часткових функцій (областю визначення яких є деяка
підмножина натурального ряду).
Ніде не визначена функція обчислювана?
ТЕОРІЯ ОБЧИСЛЮВАНИХ ФУНКЦІЙ

 Будь-якіконструктивні об'єкти реального світу також


можна зображати словами в різних скінчених
алфавітах.
 Це дозволяє вважати, що об'єктами роботи
алгоритмів можуть бути тільки слова.
 Слово, яке подається на вхід алгоритму, називається
вхідним словом; слово, що отримується в результаті
роботи алгоритму, називається вихідним.
 Сукупність слів, до яких можна застосувати алгоритм,
називається областю застосовності алгоритму.
УНІВЕРСАЛЬНІСТЬ МОДЕЛІ

 Твердження про те, що та чи інша алгоритмічна


модель універсальна, означає, що для будь-якої
обчислюваної функції існує алгоритм, що
описується засобами цієї моделі.
У теорії алгоритмів була доведена еквівалентність всіх
відомих формалізацій поняття алгоритму.
 Досих пір невідомо жодного алгоритму з числа
алгоритмів, винайдених людством, який не був би
еквівалентний жодному з формалізованих
алгоритмів (наприклад, алгоритму Маркова, машині
Тьюринга або частково рекурсивній функції) .
МАШИНА ТЮРІНГА

 Описуючи різноманітні алгоритми для


машин Тюрінга і стверджуючи
реалізованість усіляких композицій
алгоритмів, Тюрінг переконливо показав
розмаїтість можливостей запропонованої
ним конструкції, що дозволило йому
виступити з такою тезою:
Довільний алгоритм може бути
реалізований машиною Тюрінга.
1. МАШИНА ТЮРІНГА

 Це
основна гіпотеза теорії алгоритмів у формі
Тюрінга.

 Одночасно ця теза є формальним визначенням


алгоритму.

 Завдякиїй можна доводити існування або не


існування алгоритмів, створюючи відповідні машини
Тюрінга або доводячи неможливість їхньої побудови.

 Завдяки
цьому з'являється загальний підхід до
пошуку алгоритмічних рішень.
МАШИНА ТЮРІНГА

МТ називається впорядкований набір {A, a0, Q, q1, q0, T,


р}, де
 A — скінчена множина, яку називають основним
алфавітом МТ,
 a0, що належить A, називається пустою буквою,

 Q — скінчена множина, яку називають алфавітом станів


МТ,
 q1 , що належить Q — початковий стан МТ,

 q0 , що належить Q — заключний, або стан зупинки МТ,

 T = {Л, Н, П} — множина зсувів МТ,

 р — програма МТ, тобто

р : A x (Q \ {q0}) AxTx Q
МАШИНА ТЮРІНГА
У кожній машині Тьюринга є дві частини:
1) необмежена в обидві сторони стрічка, розділена на комірки;
2) голівка для зчитування / запису, керована програмою.

 Вхідне слово розміщується на стрічці по одній букві в


розташованих підряд комірках.
 Ліворуч і праворуч від вхідного слова знаходяться лише
порожні клітинки (в алфавіт А завжди входить "порожня"
буква а0 - ознака того, що комірка порожня).
 Автомат може рухатися уздовж стрічки вліво або вправо,
читати вміст комірок і записувати в в комірки літери свого
алфавіту.
 Нижче схематично нарисована машина Тьюринга, автомат
якої оглядає першу комірку з даними.
МАШИНА ТЮРІНГА

Автомат кожен раз "бачить" тільки одну клітинку.


Залежно від того, яку букву він бачить, а також у
залежності від свого стану, автомат може
виконувати наступні дії:
• Записати нову букву в комірку огляду;
• Виконати зсув по стрічці на одну клітинку
вправо/вліво або залишитися непорушно;
• Перейти в новий стан.
МАШИНА ТЮРІНГА
МАШИНА ТЬЮРИНГА
 Якщо комірок зупинки в програмі взагалі немає або в
процесі роботи над вхідним словом МТ ніколи не
виявиться в заключному стані, то вважається, що МТ
незастосовна до даного вхідного слова.
 МТ може бути застосована до вхідного слова тільки в
тому випадку, якщо, почавши роботу над цим вхідним
словом, вона виявиться в заключному стані.
 Приклад. Нехай потрібно побудувати МТ, яка додає
одиницю до числа на стрічці. Вхідне слово складається з
цифр цілого десяткового числа, записаних в послідовні
комірки на стрічці.
У початковий момент машина знаходиться проти
самої правої цифри числа.
МАШИНА ТЬЮРИНГА
 Розв’язок. Машина повинна додати одиницю до
останньої цифри числа. Якщо остання цифра дорівнює
9, то її замінити на 0 і додати одиницю до попередньої
цифри. Програма для цієї МТ:
ЗНАЧИМІСТЬ МТ

• На початку обговорення алгоритмів говорилося, що у
кожного виконавця є своя система команд, своє коло
завдань.
• Тьюрингом же був описаний універсальний виконавець - МТ,
цей виконавець здатний вирішити будь-яку алгоритмічно
розв'язну задачу.
• Цей фундаментальний результат був отриманий у той час,
коли універсальних обчислювальних машин ще не існувало.
• Більш того, сам факт математичної побудови уявного
універсального виконавця привела до припущення про
доцільності побудови універсальної обчислювальної
машини, яка б могла вирішувати будь-які завдання за умови
відповідної кодування вихідних даних і розробки відповідної
програми дій виконавця.
14. МАШИНА ПОСТА

 Майже одночасно з А. Тьюрінг (1937) американський


математик Еміль Пост запропонував іншу абстрактну
машину, що характеризується ще більшою простотою,
ніж машина Тьюринга.
 Ця строга математична побудова запропонована в якості
уточнення поняття алгоритму.
МАШИНА ПОСТА

У машині Поста в комірках нескінченної стрічки можна


записувати лише два знаки: 0 і 1 (ставити мітку в
клітинку або витирати мітку).
 Це обмеження не впливає на її універсальність, так як
будь-який алфавіт може бути закодований двома
знаками.
 Крім стрічки, в машині Поста є каретка (голівка читання
/ запису), яка:
 вміє рухатися вперед, назад і стояти на місці;
 вміє читати вміст комірки, витирати і записувати 0 або 1;
 управляється програмою.
МАШИНА ПОСТА

 Як і МТ, машина Поста може перебувати в різних станах,


але кожному стану відповідає не рядок стану з клітинами, а
деяка команда одного з наступних шести типів (всі рядки в
програмі пронумеровані):
1. Записати 1 (мітку), перейти до i-го рядка програми;
2. Записати 0 (стерти мітку), перейти до i-го рядка програми;
3. Зсув вліво, перейти до i-го рядка програми;
4. Зсув вправо, перейти до i-го рядку програми;
5. Зупинка;
6. Якщо 0, то перейти до i, інакше перейти до j.
МАШИНА ПОСТА
 Стан машини - це стан стрічки і положення головки
-читання/запису.
 Теза Поста: "Всякий алгоритм можливо представити у формі
машини Поста".
 Звідси випливає інше формальне визначення алгоритму.
 Алгоритм (за Постом) - програма для машини Поста, яка призводить
до вирішення поставленого завдання.
 Тезу Поста неможливо строго довести, так само, як і тезу Тьюринга.
У теорії алгоритмів доведено, що машина Поста і машина
Тьюринга еквівалентні за своїми можливостями.
 Більш того, для кожного неформалізованого алгоритму A
існує формалізований алгоритм B (наприклад, машина
Тьюринга).
У цьому полягає повнота формалізації поняття обчислюваної
функції.
15. УНІВЕРСАЛЬНА ФУНКЦІЯ
У теорії алгоритмів встановлений важливий
факт: у всіх алгоритмічних моделях завжди
існує універсальний алгоритм, тобто алгоритм,
який здатний моделювати роботу будь-якого
іншого алгоритму, описаного в цій же моделі.
 Покажемо існування універсальної функції для
обчислюваних функцій одного аргументу.
 Теорема. Існує обчислювана функція двох
аргументів U, що є універсальною функцією для
класу обчислюваних функцій одного аргументу.
УНІВЕРСАЛЬНА ФУНКЦІЯ
 Алгоритм, що обчислює саму функцію U, є, по
суті, інтерпретатор для мови програмування
(якщо ототожнювати програму і її номер, то він
застосовує перший аргумент до другого).
 Аналогічно можна ввести універсальні функції
для довільного числа аргументів.
 Концепція універсального алгоритму ще в 30-і
роки XX століття показала можливість
створення універсального пристрою
(комп'ютера), здатного виконувати будь-які
алгоритми.
Дякую за
увагу.

http://seojam.ru/wp-content/uploads/2009/03/sherlock.gif

You might also like