2.9. Головні принципи створення ефеткивних алгоритмів
Кожен, хто займається розробкою алгоритмів, повинна оволодіти деякими основними методами і поняттями. Перед тим, хто коли-те зіткнувся з важким завданням, виникало питання: «З чого почати?». Один з можливих шляхів - переглянути свій запас загальних алгоритмічних методів для того, щоб перевірити, чи можна за допомогою одного з них сформулювати рішення нового завдання. Ну, а якщо такого запасу ні, то як все-таки розробити хороший алгоритм? Розглянемо три загальних методу вирішення завдань, корисних для розробки алгоритмів. Перший метод пов'язаний зі зведенням важкого завдання до послідовності більш простих завдань. Звичайно, ми сподіваємося на те, що більш прості завдання легше піддаються обробці, ніж первісна завдання, а також на те, що рішення первісної завдання може бути отримано з рішень цих більш простих завдань. Така процедура називається методом приватних цілей. Цей метод виглядає дуже розумно. Але, як і більшість загальних методів вирішення завдань або розробки алгоритмів, його не завжди легко перенести на конкретну задачу. Осмислений вибір більш простих завдань - швидше, мистецтво чи інтуїція, ніж наука. Не існує загального набору правил для визначення класу задач, які можна вирішувати за допомогою такого підходу. Міркування над будь-якої конкретної завданням починається з постановки питань. Приватні цілі можуть бути встановлені, коли отримані відповіді на наступні питання: 1. Чи можемо ми вирішити частину завдання? Чи можна, ігноруючи деякі умови, вирішити частину завдання? 2. Чи можемо ми вирішити завдання для приватних випадків? Чи можна розробити алгоритм, який дає рішення, що задовольняє всім умовами завдання, але вхідні дані якого обмежені деяким підмножиною всіх вхідних даних? 3. Чи є щось, що відноситься до задачі, що ми недостатньо добре зрозуміли? Якщо спробувати глибше вникнути в деякі особливості завдання, чи зможемо ми щось дізнатися, що допоможе нам підійти до вирішення? 4. Чи зустрічалися ми з схожою завданням, рішення якої відомо? Чи можна модифікувати її рішення для нашої задачі? Чи можливо, що ця задача еквівалентна відомої невирішеною задачі? Другий метод розробки алгоритмів відомий як метод підйому. Алгоритм підйому починається з прийняття початкового припущення або обчислення початкового рішення задачі. Потім починається наскільки можливо швидкий рух «вгору» від початкового рішення до кращим рішенням. Коли алгоритм досягне такої точки, з якої більше неможливо рухатися вгору алгоритм зупиняється. На жаль, ми не завжди можемо гарантувати, що остаточне рішення, отримане за допомогою алгоритму підйому, буде оптимальним. Ця ситуація часто обмежує застосування методу підйому. Взагалі методи підйому є «грубими». Вони запам'ятовують певну мету і намагаються зробити все, що можуть і де можуть підійти ближче до мети. Це робить їх кілька недалекоглядними. Недалекоглядність методу підйому добре ілюструється наступним прикладом. Хай потрібно знайти максимум функції y = f(x), представленої графіком (мал. 2.16).
У
Контрольні питання 1. Дайте визначення об'єкта, класу, системи, моделі. 2. Назвіть основні типи моделей. 3. Що таке імітаційне моделювання? 4. Які класифікації моделей існують? 5. Вкажіть основні етапи моделювання. 6. Що таке алгоритм? 7. Перелічіть властивості алгоритму. 8. Які етапи виконуються при повному побудові алгоритму? 9. Що таке блок блок-схема алгоритму? 10. Дайте визначення функціонального блоку. 11. Який алгоритм називається структурним? 12. Назвіть головні принципи, що лежать в основі створення ефективних алгоритмів.
АЛГОРИТМИ ОБРОБКИ СТРУКТУР ДАНИХ
Методи сортування
Упорядкування елементів множини у зростаючому або спадному порядку називається сортуванням. З впорядкованими елементами простіше працювати, ніж з довільно розташованими: легше знайти необхідні елементи, виключити, вставити нові. Сортування застосовується при трансляції програм, при організації наборів даних на зовнішніх носіях, при створенні бібліотек, каталогів, баз даних і т.д. Зазвичай сортируемые елементи множини називають записами і позначають через k1,k2,...,kn Алгоритми сортування можна розбити на наступні групи (мал. 5.1).
Рис. 5.1. Алгоритмы
сортировки
