Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Поняття алгоритму.doc
Скачиваний:
22
Добавлен:
11.02.2016
Размер:
853.5 Кб
Скачать

Найбільш поширені типи задач

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

  • чисельні задачі;

  • сортування;

  • пошук;

  • обробка рядків;

  • задачі з теорії графів;

  • комбінаторні задачі;

  • геометричні задачі.

Чисельні задачі

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

Більшість таких задач може бути розв’язана тільки приблизно. Ще одна складність при вирішенні подібних задач – операції виконуються з дійсними числами, котрі в комп’ютері можуть бути представлені тільки з деякою похибкою. Виконання великої кількості арифметичних дій над представленими з похибкою числами може призвести до накопичення помилок заокруглення, що кардинально може вплинути на точність отриманих результатів.

Сортування

Задача сортування полягає у впорядкуванні заданого списку яких-небудь елементів в порядку зростання (спадання). Існують десятки алгоритмів сортування. По суті, розробка нового алгоритму сортування подібне винаходженню пресловутого велосипеда, хоча цей процес все ж триває. Поки що не придуманий новий алгоритм, котрий би підходив для будь-яких випадків. Одні з існуючих алгоритмів є досить простими, але порівняно повільними, інші працюють швидше, але складні. Деякі алгоритми працюють з неупорядкованими даними, іншим потрібно, щоб списки були частково впорядковані. Частина алгоритмів працюють зі списками, що знаходяться в оперативній пам’яті (тобто в пам’яті зі швидким доступом), тоді ж як інші можна застосувати для сортування великих масивів даних, що знаходяться на зовнішніх носіях.

Алгоритмам сортування притаманні такі якості як стійкість та обмінність.

Алгоритм сортування називається стійким (stable), якщо в ньому зберігається відносний порядок будь-яких двох рівних елементів, що знаходяться у вхідному спискові. Іншими словами, якщо у вхідному списку є два однакові елементи, порядкові номера котрих дорівнюють i та j, причому i<j, то в відсортованому списку, де їх номера відповідно будуть i' та j', буде виконуватись співвідношення i'<j'.

Алгоритм називається обмінним (in place), якщо для його роботи не потребується додаткова оперативна пам’ять, крім випадків, коли використовується кілька чарунок пам’яті.

Пошук

Задача пошуку зв’язана зі знаходженням заданого значення, що називається ключем пошуку, серед заданої множини (або мультимножини – множини, в якій декілька елементів, що належать йому, можуть мати однакові значення). Існує величезна кількість алгоритмів пошуку – від найпростіших методом послідовного порівняння до надзвичайно ефективних, але обмежених алгоритмів бінарного пошуку, а також алгоритмів, що базуються на представленні базової множини в іншій, більш зручній для виконання пошуку формі.

Як і для алгоритмів сортування, не існує універсального алгоритму пошуку. Одні з існуючих алгоритмів є досить простими, але порівняно повільними, інші працюють швидше, але потребують додаткової оперативної пам’яті або їх можна застосовувати для попередньо впорядкованих масивів. Для алгоритмів пошуку немає проблеми стійкості, але існують інші складнощі. Наприклад, пошук у великих масивах даних, що постійно видозмінюються (додавання та видалення елементів).

Обробка рядків

Рядком (string) називається послідовність символів, що взяті із попередньо визначеного алфавіту. Існує одна специфічна задача, якій приділяється особлива увага – це пошук заданого слова в рядку тексту. ЇЇ назвали пошуком підрядка. Для виконання цього алгоритму також існує декілька алгоритмів.

Задачі із теорії графів

Одна із найстаріших областей алгоритміки є обробка графів. Говорячи просто, граф можна визначити як набір точок, що називаються вершинами, частина з яких з’єднана відрізками, що називаються ребрами. За допомогою графів можна змоделювати велику кількість процесів, що проходять в реальному житті, наприклад, функціонування транспортних та комунікаційних шляхів, календарне планування проекту та інше. Одна з останніх задач – оцінка «діаметру» Web, що полягає у визначенні максимальної кількості посилань, котрі потрібно пройти від однієї Web-сторінки до іншої по оптимальному маршруту (згідно з оцінкою групи дослідників ця кількість становить всього 19).

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

  • алгоритм обходу графа (цей клас алгоритмів дозволяє відповісти на запитання, яким чином можна об’їхати всі вузли сітки залізниці);

  • алгоритми визначення найменшого шляху (цей клас алгоритмів дозволяє відповісти на запитання, який найкоротший шлях між двома містами);

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

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

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

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

Комбінаторні задачі

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

Деякі комбінаторні задачі можна розв’язати за допомогою ефективних алгоритмів, але це скоріше виключення, аніж правило.

Геометричні задачі

Геометричні алгоритми пов’язані з такими геометричними об’єктами як точки, лінії, багатокутники.

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