
45. Графи. Реалізація графів
Граф — це сукупність об'єктів із зв'язками між ними.
Об'єкти розглядаються як вершини, або вузли графу, а зв'язки — як дуги, або ребра. Для різних областей використання види графів можуть відрізнятися орієнтовністю, обмеженнями на кількість зв'язків і додатковими даними про вершини або ребра.
Велика кількість структур, які мають практичну цінність в математиці та інформатиці, можуть бути представлені графами.
Графи широко використовуються в багатьох сферах науки і техніки, зокрема:
• Файлова система комп'ютера. Ієрархія файлів та тек в багатьох операційних системах має вигляд дерева, яке є окремим випадком графа;
• Молекули усіх хімічних речовин можна зобразити у вигляді графа, де атоми є вершинами, а зв'язки між ними — ребрами;
• Карта автомобільних чи будь-яких інших шляхів також є графом, причому кожна дорога може мати певне значення «ваги» (наприклад, щільність транспортного потоку), тоді такий граф є зваженим;
• Соціальні мережі також можна представити у вигляді графа, де кожна людини чи соціальна група є вершиною, а зв'язки між ними — ребрами;
• Генеалогічні дерева є прикладом бінарних дерев, що також є окремим випадком графа;
• Турнірні таблиці спортивних чемпіонатів також можуть бути зображені у вигляді графів;
• У біології та екології графи також використовуються вже давно. Прикладами можуть бути ланцюги харчування, екосистеми, генетичні послідовності та карти, таксономічна ієрархія живих організмів тощо;
• У археології та геології графи використовуються у стратиграфії для вивчення геологічних пластів;
• Будь-який виробничий процес також може бути зображений за допомогою графа;
• Розробка програмного забезпечення та комп'ютерні науки взагалі є однією з тих галузей, де графи застосовуються найчастіше. Складність та велика кількість модулів і протоколів у сучасних програмних продуктах сильно ускладнює розуміння їх роботи, керування нею та її оптимізацію, тому дуже часто складаються графи програм, причому найчастіше це робиться автоматично трансляторами чи компіляторами. Графи також є зручними для зображення структур даних, блок-схем, потоків даних, схем баз даних та баз знань, скінченних автоматів, схем комп'ютерних мереж та окремих сайтів, схем викликів підпрограм тощо. Також графи широко використовуються у багатьох алгоритмах пошуку та сортування.
46 Рекурсії, рекурсивна форма алгоритмів.
Рекурсія — метод визначення класу чи об'єктів методів попереднім заданням одного чи декількох (звичайно простих) його базових випадків чи методів, а потім заданням на їхній основі правила побудови класу, який визначається.
Іншими словами, рекурсія — часткове визначення об'єкта через себе, визначення об'єкта з використанням раніше визначених. Рекурсія використовується, коли можна виділити самоподібність задачі.
У програмуванні рекурсія — виклик функції чи процедури з неї самої (звичайно з іншими значеннями вхідних параметрів), чи безпосередньо через інші функції (наприклад, функція А викликає функцію B, а функція B — функцію A). Кількість вкладених викликів чи функції процедури називається глибиною рекурсії.
Міць рекурсивного визначення об'єкта в тім, що таке кінцеве визначення здатне описувати нескінченно велике число об'єктів. За допомогою рекурсивної програми ж можливо описати нескінченне обчислення, причому без явних повторень частин програми.
Існує спеціальний тип рекурсії, називаний «хвостовою рекурсією». Інтерпретатори і компілятори функціональних мов програмування, що підтримують оптимізацію коду (вихідного і/чи що виконується), виконують хвостову рекурсію в обмеженому обсязі пам'яті за допомогою ітерацій.
Варто уникати надлишкової глибини рекурсії, тому що це може викликати переповнення стека викликів.
Основне правило реалызацыъ рекурсыъ полягаэ у тому, що обов’язково повинна бути зазначена умова виходу їз рекурсії.
47 Машина Поста
Машина Поста (МП) — абстрактная вычислительная машина, которая отличается от машины Тьюринга большей простотой. Обе машины «эквивалентны» и были созданы для уточнения понятия «алгоритм». Принцип работы МП состоит из каретки (или считывающей и записывающей головки) и разбитой на секции бесконечной в обе стороны ленты (см. пример ниже). Каждая секция ленты может быть либо пустой — 0, либо помеченной меткой 1. За один шаг каретка может сдвинуться на одну позицию влево или вправо, считать, поставить или стереть символ в том месте, где она стоит. Работа МП определяется программой, состоящей из конечного числа строк. Всего команд шесть:
N. > J сдвиг вправо
N. < J сдвиг влево
N. 1 J запись метки
N. 0 J удаление метки
N. ? J1, J0 если в ячейке есть метка, то перейти к j1 строке программы, иначе перейти к j0 строке программы.
N. Stop остановка
где N. — номер строки, J — строка на которую переходит управление далее.
Для работы машины нужно задать программу и ее начальное состояние (т. е. состояние ленты и позицию каретки). После запуска возможны варианты:
• работа может закончиться невыполнимой командой (стирание несуществующей метки или запись в помеченное поле);
• работа может закончиться командой Stop;
• работа никогда не закончится.
48 Машина Тюрінга
Маши?на Тю?ринга — математичне поняття, введене для формального уточнення інтуітивного поняття алгоритму. Машина Тюринга — це абстрактна машина (автомат), що працює зі стрічкою, що складається із окремих комірок, в яких записано символи. Машина також має голівку для запису та читання символів із комірок і яка може рухатись вздовж стрічки. На кожному кроці машина зчитує символ із комірки, на яку вказує голівка та, на основі зчитаного символу та внутрішнього стану, робиться наступний крок. При цьому, машина може змінити свій стан, записати інший символ в комірку або пересунути голівку на одну комірку ліворуч або праворуч. У кожної машини Тюринга є стрічка, потенційно нескінченна в обидві сторони. Є скінченна множина символів стрічки S0, …, Sn, що називається алфавітом машини. У кожен момент часу кожна комірка може бути зайнята не більш ніж одним символом. Машина має деяку скінченну множину внутрішніх станів q0, q1, …, qn. У кожен даний момент часу машина знаходиться лише в одному із цих станів.
Нарешті, є голівка, яка у кожен даний момент часу знаходиться на одній із комірок стрічки. Машина діє не безупинно, а лише у дискретні моменти часу. Якщо у якийсь момент t голівка сприймає комірку (тобто знаходиться на комірці), що містить символ Si, і машина знаходиться у внутрішньому стані qj, то дія машини визначена однією із чотирьох дій:
1. голівка затирає символ Si, і записує у тій же комірці новий символ Sk,
2. голівка пересувається в сусідню ліву комірку,
3. голівка пересувається в сусідню праву комірку,
4. машина зупиняється.
У випадках (1)-(3) машина переходить у новий внутрішній стан qr, і готова знову до дії у наступний момент t + 1. Припустимо, що символ S0 представляє порожню комірку, і отже, голівка завжди сприймає деякий символ.
Перші три з можливих дій машини можуть бути описані відповідно такими упорядкованими четвірками, які називаються командами:
1.
2.
3.
Тут перші два символа — це відповідно внутрішні стани машини і сприйнятий символ, наступні три визначають дію машини (запис голівкою символу Sk, або переміщення голівки на одну комірку вліво, або переміщення голівки на одну комірку вправо) та новий стан машини. Якщо стрічка вкладена в машину Тюринга, голівка машини встановлена на одну із комірок стрічки і машина приведена в один із своїх внутрішніх станів, то машина починає оперувати на стрічці: її голівка пише і стирає символи і пересувається з однієї комірки в іншу. Якщо при цьому машина колись зупиняється, то стрічка, яка знаходиться в ній в цей момент, називається результатом застосування машини до даної стрічки.
Незважаючи на свій простий устрій, машина Тюринга може виконувати складні перетворення слів. Спочатку, коли стрічка містить вхідне слово, автомат знаходиться проти деякої з комірок і у якомусь стані. У залежності від вибору початкової комірки, утворяться різні результати роботи машини Тюринга. У процесі своєї роботи машина Тюринга буде ніби перестрибувати з однієї комірки програми на іншу, відповідно до інформації на стрічці і вказівками в командах програми, поки не дійде до команди, яка переведе автомат у кінцевий стан.