- •0Міністерство освіти і науки, молоді та спорту україни
- •«Теорія алгоритмів» Методичні вказівки
- •2.1 Види алгоритмів
- •2.2 Організація лінійних алгоритмів .
- •2.3 Організація розгалужень в са
- •2.4 Організація циклів.
- •Розділ 3. Моделі обчислень
- •3.1 Скінченний автомат, як модель перетворювача дискретної інформації
- •3.2 Визначення та властивості скінченого автомату
- •3.3 Автомат Мілі
- •3.4 Автомат Мура
- •3.5 Машина Тюрінга.
- •3.5.1 Історія
- •3.5.2 Визначення машини т.
- •3.5.3 Можливості машини Тюрінга
- •3.5.4 Приклади
- •4.1 Необхідність структурування даних. Поняття Структури даних
- •4.2 Послідовне і зв’язне розподілення даних в пам’яті еом.
- •4.2.2 Зв'язаний розподіл в пам'яті.
- •4.3 Лінійні та нелінійні структури даних.
- •4.3.1 Лінійні струтури даних
- •Однозв'язні списки
- •Двохзв'язні списки
- •4.3.2 Нелінійні структури даних
- •4.4 Статичні структури даних.
- •4.5 Уявлення в пам’яті машини множин; операції над множинами. Уявлення графів. Дерева і бінарні дерева. Характеристики дерев. Ліс. Уявлення бінарних дерев. Перехід від дерева до бінарного дерева.
- •4.5.1 Множини. Опис множин, операції над множинами.
- •4.5.2 Поняття графа як структури даних.
- •Застосування графів
- •4.5.3 Поняття дерева як структури даних
- •4.5.4 Бінарне дерево
- •Перехід від дерева до бінарного дерева
- •4.6 Порядок обходу вузлів дерева: обернений і внутрішній. Властивості обходу вузлів дерева: прямий, обернений і внутрішній. Властивості обходу дерев. Порядок та властивості обходу дерева.
- •5.1 Предмет теорії комбінаторних алгоритмів (обчислювань)
- •5.2 Правила множення і суми для знаходження
- •5.3 Види задач підрахунку числа елементів множин
- •1. Метод рекурентних співвідношень.
- •2. Метод включення і виключення.
- •5.4 Елементи комбінаторики. Набори: набори з повторюванням; специфікація набору
- •Розділ 6 Ефективність алгоритмів
- •6.1. Характеристики алгоритмів.
- •6.2 Ємна та часова складність. Поліноміальна зв’язність.
- •6.3 Класи p та np
2.4 Організація циклів.
Однак, навіть маючи в своєму арсеналі команду розгалуження, важко реалізувати алгоритми, що потребують багаторазового повторення деякої послідовності однакових дій. В цих випадках нас виручає циклічний алгоритм.
У нашому житті дуже часто зустрічаються алгоритми з повторами, причому чітко визначаються два типи повторів. В одному випадку ми чітко знаємо, скільки разів необхідно повторити задану послідовність команд, а в іншому - ні.
Наприклад, в першому класі вчителька дає завдання дітям: "Діти, напишіть, будь ласка, в зошитах десять цифр "1", а потім рядочок цифр "2". Чим відрізняються ці два завдання? В першому випадку дитина отримала чітку вказівку написати десять одиниць, а в другому - ця вказівка була не точною (рядочок двійок). Чому другий випадок не такий точний? Тому що кількість отриманих кожним учнем цифр буде залежати від їх власного почерку: одні учні пишуть охайно маленькими цифрами, інші - неохайно величезними кривулями.
В залежності від того, чи знаємо ми скільки разів необхідно повторювати якусь послідовність команд розрізняють цикли з лічильником (кількість повторень відома заздалегідь) та цикли з умовою (цикл робиться доки не виконається якась умова).
Крім того, в циклах з умовою теж можна виділити два різних випадки:
цикл з передумовою - коли ми спочатку перевіряємо умову, а потім виконуємо деяку послідовність дій (так, ми спочатку перевіряємо, чи вимита підлога в тій класній кімнаті, де нам потрібно чергувати, а потім починаємо прибирання);
цикл с післяумовою - спочатку ми виконуємо хоч один раз необхідну послідовність дій, а потім перевіряємо, чи не досягли ми бажаного результату (коли ми хочемо пити, ми спочатку ковтаємо хоч глоток води, а потім починаємо контролювати, чи не вгамували ми свою спрагу).
Мовою блок-схем обидва типи
циклів виглядають наступним чином
ом:
Форма організації дій, при якій виконання однієї й тієї ж послідовності команд повторюється, поки виконується деяке заздалегідь установлене умова, називається циклом (повторенням).
Алгоритм, що містить цикли, називається циклічним алгоритмом або алгоритмом з повтореннями.
Ситуація, при якій виконання циклу ніколи не закінчується, називається зацикленням. Слід розробляти алгоритми, що не допускають таких ситуацій.
Розглянемо приклад з математики.
Натуральне число називають простим, якщо воно має тільки два дільники: одиницю й саме це число.
2, 3, 5, 7 — прості числа; 4, 6, 8 — ні. В III столітті до нашої ери грецький математик Ератосфен запропонував наступний алгоритм для знаходження всіх простих чисел, менших заданого числа n;
1) виписати всі натуральні числа від 1 до n;
2) викреслити 1;
3) підкреслити найменше з невідмічених чисел;
4) викреслити всі числа, кратні підкресленому на попередньому кроці;
5) якщо в списку є невідмічені числа, то перейти до кроку 3, а якщо ні, то всі підкреслені числа — прості.
Це циклічний алгоритм. При його виконанні повторення кроків 3-5 відбувається, поки у вихідному списку залишаються невідмічені числа.
Найчастіше ж у житті ми використовуємо змішані алгоритми. Так, дійсно, зранку ми контролюємо свій стан здоров'я, погоду, розклад уроків (коли збираємо речі), свій одяг і таке інше. Коли ми снідаємо, ми повторюємо одну й ту саму послідовність дій (зачерпнути ложкою їжу, піднести до рота, забрати в рот, прожувати, проковтнути, зачерпнути ложкою їжу, піднести до рота і т.д.), коли ми миємо посуд, ми теж повторюємо одну й ту саму послідовність дій. Навіть, коли ми йдемо, ми повторюємо визначені дії (подумайте, які).
От ми й підійшли до того, що найбільш поширеним являється змішаний тип алгоритму, в якому поєднуються елементи лінійних, розгалужених та циклічних алгоритмів.
Під час складання алгоритмів іноді виникає ситуація, коли необхідно виконати повторювану послідовність дій, але не зовсім ідентичну. Наприклад, необхідно почистити картоплю, моркву, буряк та цибулю. Всі алгоритми чищення загалом схожі, але все ж таки є деякі відмінності. Щоб не переписувати алгоритми, що суттєво не розрізняються, використовують так звані допоміжні алгоритми, що викликаються і виконуються тільки тоді, коли в них є потреба.
Перевага використання допоміжних алгоритмів полягає ще в тому, що склавши їх один раз, ми можемо їх потім використовувати при написанні навіть інших алгоритмів. В цьому випадку вони об'єднуються в так звані бібліотеки і ними можна користуватися так, як в реальному житті ми користуємось справжніми бібліотеками (тобто не доходячи до суті справи).
Приклади
Приклад 1. Розв’язати квадратне рівняння ax2+bx+c=0
Приклад 2. Обчислити вираз:
де n = 1, 2, 3, …
Визначити таке n, при якому Y £ e, що задає точність обчислення.
Етапи розв’язання задачі:
1. Задається початкове значення n (1).
2. Обчислюється функція Y.
3. Проводиться перевірка, чи отримане значення функції дорівнює або менше за e.
4. Якщо результат перевірки умови ИСТИНА, виводиться поточне значення n, отримане значення функції і цикл припиняється.
5. Якщо результат перевірки умови ЛОЖЬ, значення n збільшується на одиницю (n + 1), і цикл повторюється з блоку № 3.
Нижче подана блок-схема алгоритму розв’язання задачі.
Цикл, що використовується у прикладі, є циклом з передумовою, тому що блок перевірки розташований на початку циклу.
Приклад 3 Серед заданих десяти значень х = {2, 8, 0, –6, –4, 22, 5, –9,
13, –12} обчислити суму додатних чисел.
Даний цикл організовується як цикл по лічильнику. Якості змінна — накопичувач суми вибирається змінна S. Перед першим виконанням циклу початкове значення S вибирається рівним нулю (це проводиться з тієї причини, що при додаванні нуля до будь-якого значення результат не зміниться).
Етапи розв’язання задачі:
1. Задається початкове значення накопичувача суми S (0).
2Задається початкове значення лічильника n (1).
3. Уводиться поточне значення х.
4. Проводиться перевірка, чи введене значення х є додатнім.
5. Якщо результатом перевірки умови є ИСТИНА, то провадиться накопичення суми (S + x), і значення лічильника збільшується на одиницю (n + 1).
6. Якщо результат перевірки умови — ЛОЖЬ, то накопичення суми не приводиться (пропускається), і значення лічильника збільшується на одиницю (n + 1).
7. Проводиться перевірка стану лічильника циклу. Якщо значення лічильника перевищує кількість заданих значень х (10), цикл припиняється, і виводиться отримане значення суми.
8. Якщо значення лічильника дорівнює або менше за кількість заданих х (10), цикл повторюється з блоку № 4.
Блок-схема алгоритму розв’язання задачі.
У наведеному прикладі використовується цикл з післяумовою (перевірка умови виконання циклу — в кінці).
Аналогічно можна побудувати алгоритм для накопичення добутку, лише як початкове значення добутку треба використати одиницю, виходячи з того, що при множенні будь-якого числа на одиницю результат не зміниться.
