Обчислювальна складність
Складність обчислювальних процесів — це поняття теорії складності обчислень, оцінка ресурсів (зазвичай часу та пам'яті) необхідних для виконання алгоритму.
ВизначенняДля оцінки алгоритмів існує багато критеріїв. Найбільшу увагу приділяють порядку росту необхідних для розв'язання задачі часу та розміру пам'яті при збільшенні розміру вхідних даних. Нехай А — алгоритм розв'язання деякого класу задач, а — розмірність окремої задачі цього класу. може бути, наприклад, розмірністю оброблюваного масиву, числом вершин оброблюваного графа тощо, Позначимо функцію, що дає верхню межу максимального числа основних операцій (додавання, множення і т. д.), які повинен виконати алгоритм А, розв'язуючи задачу розмірності . Говоритимемо, що алгоритм А поліноміальний, якщо зростає не швидше, ніж деякий поліном від . В іншому разі А — експоненційний алгоритм. Виявляється, що між цими класами алгоритмів є істотна різниця: при великих розмірностях задач (які, зазвичай, найцікавіші на практиці), поліноміальні алгоритми можуть бути виконані на сучасних комп'ютерах, тоді як експоненційні алгоритми для практичних розмірностей задач, як правило, не можуть виконатися повністю. Зазвичай розв'язок задач, що породжують експоненційні алгоритми, пов'язаний з повним перебором всіх можливих варіантів, і, зважаючи на практичну неможливість реалізації такої стратегії, їх розв'язують іншими шляхами. Наприклад, якщо навіть існує експоненційний алгоритм для пошуку оптимального розв'язку деякої задачі, то на практиці застосовуються інші, ефективніші поліноміальні алгоритми для пошуку прийнятного розв'язку (не обов'язково оптимального, а лише наближеного до оптимального). Та навіть якщо задача має розв'язок за допомогою поліноміального алгоритму, побудувати його можна лише після заглиблення в суть поставленої задачі. Поліноміальні алгоритми також можуть істотно розрізнятися залежно від степеня полінома, що апроксимує залежність . Розглянемо оцінювання часової складності алгоритму. Така оцінка проводиться із застосуванням відношення («велике О»): кажуть, що зростає як для великих N і записується це як . Якщо існує додатна стала Const>0, така, що , то оцінка О(g(N)) називається асимптотичною часовою складністю алгоритму. Оцінка О(g(N)) для функції застосовується, коли точне значення невідоме, а відомий лише порядок зростання часу, затрачуваного на розв'язання задачі розмірністю N за допомогою алгоритму А. Точні значення залежать від конкретної реалізації, тоді як О(g(N)) є характеристикою самого алгоритму. Наприклад, якщо часова асимптотична складність алгоритму дорівнює (такий алгоритм називається квадратичним), то при збільшенні N час розв'язання задачі збільшується як квадрат N. Факт експоненційної складності алгоритму в термінах введеної символіки можна записати як , де k — більше за одиницю число (зазвичай ціле). Інший вид оцінки пов'язаний з введенням «малого о»: кажуть, що зростає не швидше від для великих N, що записується , якщо . Наприклад, очевидно, що . Інший приклад: алгоритм А є поліноміальним, якщо , де Pk(N) — деякий поліном від N степеня k. Так, алгоритм, асимптотична складність якого дорівнює о(N log N), належить до поліноміальних. Приклади асимптотичних складностейВ наступній таблиці наведено поширені асимптотичні складності з коментарями. ![]()
Див. такожДжерела
|
Portal di Ensiklopedia Dunia