
- •1.1. Визначення інформації
- •1.2. Визначення алгоритму
- •1.3. Виконавці алгоритмів
- •1.4. Способи описання алгоритмів
- •1.5. Властивості алгоритмів
- •1.6. Поняття обчислювальної складності
- •1.7. Класи алгоритмів
- •1.7.1. Експоненційні алгоритми та перебір
- •1.7.2. Алгоритм із поверненнями назад
- •1.7.3. Машини Тьюринґа
- •Будь-який алгоритм може бути реалізований відповідною машиною Тьюринґа.
- •Усе, що реалізовано в одній з цих конструкцій, можна зробити і в інших.
- •1.7.4. Рекурсія та її використання
- •1.7.5. Теза Чорча. Алгоритмічно нерозв’язні проблеми
- •2.1. Поняття структури даних
- •2.2. Рівні описуваннявання даних
- •2.3. Класифікація структур даних у програмах користувача й у пам’яті комп’ютера
- •2.4. Основні види складених типів даних
- •2.4. Структури даних у пам’яті комп’ютера
- •2.4.1. Структури даних в оперативній пам’яті
- •2.4.2. Сд у зовнішній пам’яті
- •3.1. Поняття структури даних типу «масив»
- •3.2. Набір допустимих операцій для сд типу «масив»
- •3.3. Дескриптор сд типу «масив»
- •3.4. Ефективність масивів
- •3.5. Зберігання багатовимірних масивів
- •3.6. Сд типу «множина»
- •3.7. Сд типу «запис (прямий декартовий добуток)»
- •3.8. Сд типу «таблиця»
- •3.9. Сд типу «стек»
- •3.9.1. Дескриптор сд типу «стек»
- •3.9.2. Області застосування сд типу «стек»
- •3.10. Сд типу «черга»
- •3.11. Сд типу «дек»
1.2. Визначення алгоритму
За визначенням А.П.Єршова, інформатика – це наука про методи подання, накопичення, передавання та опрацювання інформації за допомогою комп’ютера. Що таке інформація? Вважається, що інформація – це поняття, яке передбачає наявність матеріального носія інформації, джерела і передавача інформації, приймача і каналу зв’язку між джерелом і приймачем інформації.
Основними в загальній інформатиці є три поняття: задача, алгоритм, програма. Відповідно, маємо три етапи в розв’язуванні задач (зазначимо, що, з точки зору інформатики, розв’язати задачу – це отримати програму, тобто, забезпечити можливість отримати рішення за допомогою комп’ютера): постановка задачі, побудова і обґрунтування алгоритму, складання і налагодження програми. Оскільки програма – об’єкт гранично формальний, а тому точний (можливо не завжди прозорий, навантажений неістотними із змістовної точки зору деталями, але недвозначний) то, пов’язані з нею об’єкти також мають бути точними. Алгоритм містить чіткий і ясний спосіб побудови результатів за точно вказаною в постановці задачі залежністю їх від наявних арґументів.
Відповідно до етапів маємо три групи засобів інформатики: специфікація, алгоритмізація і програмування.
Для специфікації задач в курсі застосовані засоби типу рекурентних співвідношень, рекурсивних визначень, а також прості інваріантні співвідношення, початкові й кінцеві умови.
Побудова алгоритму за точною постановкою задачі дає можливість його обґрунтування математичними методами. Більше того, існують класи задач, які дозволяють формальне перетворення специфікації в алгоритм. Вивченню деяких таких класів і відповідних методів відводиться важливе місце в нашому курсі.
Істотно, що, порівняно з програмою, алгоритм може перебувати на вищому рівні абстракції, бути вільним від тих або інших деталей реалізації, пов’язаних з особливостями мови програмування та конкретної обчислювальної системи. Засоби, прийняті для зображення алгоритмів, за традицією називають алгоритмічною мовою. До речі, так називалися також перші мови програмування високого рівня, наприклад, Алгол – це просто скорочення ALGOrithmic Language – алгоритмічна мова. Але, загалом, жодна мова програмування не може цілком замінити алгоритмічну мову, оскільки консервативна за своєю суттю. Стабільність – один з необхідних компонентів якості мови програмування. Повинні існувати ґарантії, що всі програми, складені вчора, в минулому році, десять років тому, не втратять значення ні сьогодні, ні завтра. Модифікація мови програмування призводить до небажаних наслідків: вимагає перероблення системи програмування, знецінює напрацьоване програмне забезпечення. У той же час алгоритмічна мова може створюватися спеціально для певної предметної області, певного класу задач або навіть окремої задачі. Вона може розвиватися навіть при створенні алгоритму, вбираючи в себе новітні результати.
Алгоритм – точне формальне розпорядження, яке однозначно трактує зміст і послідовність операцій, що переводять задану сукупність початкових даних в шуканий результат, або можна також сказати, що алгоритм – це кінцева послідовність загальнозрозумілих розпоряджень, формальне виконання яких дозволяє за скінченний час отримати рішення деякої задачі або будь-якої задачі з деякого класу задач.
Алгоритм – це скінченна послідовність команд, які треба виконати над вхідними даними для отримання результату.
Приклад 1.1. Обчислити (x+y)/(a-b)
А= (А1, А2, А3)
А1: х+у
А2: а-b
А3: А1/А2
Слово алгоритм походить від algorithmi – латинської форми написання імені великого математика IX ст. Аль-Хорезмі, який сформулював правила виконання арифметичних дій.
Приклад 1.2. Розглянемо відому задачу про людину з човном (Л), вовком (В), козою (Кз) і капустою (Кп). Алгоритм її розв’язання можна подати так:
{ Л, В, Кз, Кп } – початковий стан,
пливуть Л, Кз, Кп
{ В Л, Кз, Кп } – 1-ий крок,
пливуть Л, Кз
{ Л, В, Кз Кп } – 2-ий крок,
пливуть Л, В
{ Кз Л, В, Кп } – 3-ій крок,
пливуть Л
{ Л, Кз В, Кп } – 4-ий крок,
пливуть Л, Кз
{Л, В, Кз, Кп } – кінцевий стан.