You are on page 1of 9

Міністерство освіти і науки України

Вінницький національний технічний


університет
Факультет інтелектуальних інформаційних технологій та автоматизації
Кафедра КН

Лабораторна робота №1
з дисципліни «Теорія алгоритмів»

Виконав: ст. гр. 2КН-23б. Грицуляк М.Т.


Перевірив викладач: Арсенюк І. P

Вінниця, 2024р.
Тема: Аналіз основних підходів щодо уточнення поняття
„алгоритм”, а також основних властивостей та форм подання
алгоритмів.
Мета: проаналізувати основні підходи щодо уточнення поняття
„алгоритм; проаналізувати основні властивості алгоритмів, а
також визначити переваги та недоліки основних форм подання
алгоритмів та областей їх застосування.

Порядок виконання роботи:


1. Основні підходи щодо уточнення поняття „алгоритм” та
їх особливості;
2. Властивості алгоритмів;
3. Форми подання алгоритмів;
4. Висновки.

1. Основні підходи щодо уточнення поняття


„алгоритм” та їх особливості.
Уточнення поняття "алгоритм" в теорії обчислень та комп'ютерних
науках відбувається через розвиток різних підходів та моделей, які
допомагають краще розуміти та формалізувати це поняття. Основні
підходи щодо уточнення поняття "алгоритм" включають:

Алгоритм Маркала (Markov algorithm) - це спеціальний тип


алгоритмів, які використовуються для обробки рядкових даних.
Його було розроблено Андре Маркалом у 1960-х роках і має
застосування в галузях комп'ютерних наук, таких як формальні
мови, теорія автоматів і обчислювальність.

Принцип роботи алгоритму Маркала полягає в застосуванні


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

У загальному випадку алгоритм Маркала має наступну структуру:


1. Визначення початкового рядка.
2. Визначення правил заміни у вигляді пар "шаблон для пошуку" -
"заміна".
3. Повторення наступних кроків, поки рядок не буде
нормалізований або не припинить змінюватися:
- Прохід по рядку, пошук підходящого шаблону для заміни.
- Застосування правила заміни до знайденого шаблону.

Приклад алгоритму Маркала:

Нехай у нас є наступний початковий рядок: "00101".

І у нас є наступні правила заміни:


1. "00" -> "1"
2. "11" -> "0"
3. "10" -> "0010"

Застосовуючи ці правила послідовно до початкового рядка, ми


отримаємо наступний результат:
- Застосовуємо правило 3 до рядка "00101", отримуємо "00100101".
- Застосовуємо правило 1 до рядка "00100101", отримуємо
"100101".
- Застосовуємо правило 2 до рядка "100101", отримуємо "0101".
- Застосовуємо правило 3 до рядка "0101", отримуємо "001001".
- Застосовуємо правило 1 до рядка "001001", отримуємо "1001".
- Застосовуємо правило 2 до рядка "1001", отримуємо "001".
- Застосовуємо правило 3 до рядка "001", отримуємо "0010010".
- Застосовуємо правило 1 до рядка "0010010", отримуємо "10010".
- Застосовуємо правило 2 до рядка "10010", отримуємо "0010".
- Застосовуємо правило 3 до рядка "0010", отримуємо "001001".

Тепер рядок "00101" став "001001", і процес завершується.

Алгоритм Маркала широко використовується в теорії формальних


мов для трансформації рядків і обчислень над ними. Він також
може бути використаний для реалізації деяких видів текстових
шифрів і алгоритмів стиснення даних.

Машина Тьюрінга (Turing machine) - це математична модель


обчислень, запропонована Аланом Тьюрінгом в 1936 році. Вона
складається з нескінченної стрічки, розділеної на клітинки, кожна з
яких може містити символ з алфавіту вхідної мови. Машина
Тьюрінга також має обмежену кількість внутрішніх станів та
правил переходу, які вказують, який символ записувати на поточну
клітинку, куди рухатись (ліво або право) та який стан приймати.

Основна ідея Машини Тьюрінга полягає в тому, що вона може


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

Принцип роботи Машини Тьюрінга полягає в послідовному


виконанні правил переходу з одного стану в інший в залежності від
символу, який знаходиться під головкою машини. Це дозволяє
Машині Тьюрінга моделювати будь-який алгоритм, який може бути
виражений у вигляді послідовності кроків.

Машина Тьюрінга є важливим концептом в теорії обчислень та


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

Давайте розглянемо приклад простої машини Тьюрінга для


виконання простої задачі – додавання двох чисел у двійковій
системі. Нехай маємо машину Тьюрінга з наступними
компонентами:

1. Стрічка: На стрічці будуть записані два числа у двійковій


системі, розділені символом роздільника (наприклад, "101#011").
2. Головка: Головка машини Тьюрінга знаходиться на початку
числа, яке потрібно додати, у цьому прикладі – на початку числа
"101".
3. Стани: Машина Тьюрінга має наступні стани:
- Q0: Початковий стан, де починається обробка чисел.
- Q1: Стан, який дозволяє перенести головку до правого краю
першого числа.
- Q2: Стан, де відбувається перехід до другого числа.
- Q3: Стан, який дозволяє перенести головку до правого краю
другого числа.
- Q4: Стан, де відбувається додавання бітів чисел.
- Q5: Стан, у який машина переходить після завершення
додавання.

Правила переходу для цієї машини Тьюрінга виглядають так:

1. Якщо ми знаходимося в стані Q0 та бачимо "1" на стрічці,


переходимо до Q1 та пересуваємо головку праворуч.
2. Якщо ми знаходимося в стані Q1 та бачимо "1" на стрічці,
продовжуємо залишатися в Q1 та рухаємося праворуч.
3. Якщо ми знаходимося в стані Q1 та бачимо "0" на стрічці,
переходимо до Q2 та пересуваємо головку праворуч до роздільника
"#".
4. Якщо ми знаходимося в стані Q2 та бачимо "1" на стрічці,
переходимо до Q3 та пересуваємо головку праворуч.
5. Якщо ми знаходимося в стані Q3 та бачимо "1" на стрічці,
продовжуємо залишатися в Q3 та рухаємося праворуч.
6. Якщо ми знаходимося в стані Q3 та бачимо "0" на стрічці,
переходимо до Q4 та починаємо додавання бітів чисел.
7. Якщо ми знаходимося в стані Q4 та бачимо "0" на стрічці,
переходимо до Q5, позначаємо додавання завершеним, і видаємо
результат.

Така машина Тьюрінга може додавати дві двійкові числа,


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

Функціональний підхід: Алгоритм розглядається як функція, яка


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

Логічний підхід: Алгоритм описується за допомогою


послідовності логічних операцій та умовних виразів, які керують
виконанням різних кроків у процесі обчислення.
Структурний підхід: Алгоритм розглядається як система
структурних елементів, таких як послідовність, умова, цикл тощо,
що дозволяє описувати складні алгоритмічні процеси через
комбінацію простіших операцій.

Методи формальних мов та автоматів: Використовуються


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

Особливості цих підходів полягають у їхній спроможності


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

2. Властивості алгоритмів
Властивості алгоритмів є ключовими характеристиками, які
допомагають розуміти їхню природу та можливості. Нижче
перераховані та детально проаналізовані основні властивості
алгоритмів:

Дискретність: Алгоритм складається з окремих, дискретних кроків


або інструкцій, які виконуються послідовно.

Приклад: Сортування масиву за методом "бульбашки". Цей


алгоритм працює дискретним чином, порівнюючи елементи масиву
і міняючи їх місцями в залежності від умови.

Визначеність: Кожна інструкція алгоритму має однозначне та


точне значення, не може бути двозначності або амбігвітності.

Приклад: Алгоритм обчислення факторіалу числа n. Кожна


інструкція, наприклад, множення числа на попередній результат,
має точне визначене значення.

Детермінованість: Для однакового вхідного стану алгоритм


завжди буде повертати один і той же вихідний результат.

Приклад: Алгоритм пошуку елемента у відсортованому масиві


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

Обмеженість: Алгоритм має обмежений час виконання та


обмежену кількість ресурсів, таких як пам'ять.

Приклад: Алгоритм сортування вставками. Час виконання цього


алгоритму залежить від кількості елементів у вхідному масиві, що
обмежує його ефективність при обробці великих обсягів даних.

Вхід та вихід: Алгоритм отримує вхідні дані, обробляє їх та


повертає вихідні дані чи результат.

Приклад: Алгоритм обчислення середнього арифметичного масиву


чисел. Вхідними даними є сам масив чисел, а вихідним результатом
є значення середнього.

3. Форми подання алгоритмів


Форми подання алгоритмів можуть варіюватися від словесного
опису до реалізації у вигляді програмного коду. Основні форми
подання алгоритмів включають:

Словесний опис (вербальний):

Приклад: Алгоритм сортування вставками може бути описаний


словесно: "Беремо наступний елемент масиву і вставляємо його у
відсортовану частину масиву, зсуваючи більші елементи вправо."
Переваги: Легкий для розуміння людьми, не потребує спеціальних
знань.
Недоліки: Може бути недостатньо точним та детальним, не
підходить для автоматизації обчислень.
Області застосування: Учбові матеріали, пояснення для
початківців.

Графічне подання (блок-схеми, діаграми):

Приклад: Блок-схема алгоритму сортування бульбашкою з


використанням ромбів для умов та прямокутників для операцій.
Переваги: Ілюстративна, допомагає візуалізувати послідовність
операцій та умов.
Недоліки: Може бути обмеженим у вираженні складних
алгоритмів, вимагає певних навичок у створенні та розумінні.
Області застосування: Проектування алгоритмів, навчання
програмуванню.

Псевдокод:

Приклад: Псевдокод сортування вставками:


for i from 1 to n-1 do
key = A[i]
j=i-1
while j >= 0 and A[j] > key do
A[j+1] = A[j]
j=j-1
A[j+1] = key
Переваги: Легкий для розуміння, близький до мов програмування,
може бути використаний для перевірки логіки без реалізації коду.
Недоліки: Може бути неоднозначним у вираженні певних деталей,
залежно від конкретного використання.
Області застосування: Опис алгоритмів, планування програм.

Програмний код:

Приклад: Реалізація алгоритму сортування вставками на мові


програмування Python:
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j=i-1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr

Переваги: Конкретна, може бути виконана комп'ютером,


найближче до реальної реалізації.
Недоліки: Вимагає знань мов програмування, менш гнучка у
порівнянні з псевдокодом.
Області застосування: Програмування, розробка програмного
забезпечення.

Висновок : Я проаналізувала основні підходи щодо уточнення


поняття „алгоритм; проаналізувала основні властивості алгоритмів,
а також визначила переваги та недоліки основних форм подання
алгоритмів та областей їх застосування.

You might also like