Комбінаторний вибух — термін, який використовується для опису ефекту різкого («вибухового») зростання часової складності алгоритму при збільшенні розміру вхідних даних задачі[1].
Більш точно це означає, що алгоритм не є поліноміальним, тобто час розв'язування задачі не обмежується ніяким многочленом від довжини входу. Зазвичай такі задачі мають експоненціальну або навіть надекспоненціальну складність.
Походження назви пов'язане з тим, що для розв'язування задачі не вдається знайти іншого способу, крім повного перебору всіх можливих варіантів. У цьому випадку час, що потрібен для розв'язування, пропорційний до кількості всіх можливих конфігурацій, яка визначається на основі тих чи інших комбінаторних міркувань (сполучення, перестановки).
Для обходу проблеми комбінаторного вибуху шукають спеціальні методи розв'язування, зокрема, застосовують евристичні алгоритми.
Приклади
Комбінаторний вибух виникає в багатьох задачах пошуку[2], в задачах прорахунку послідовностей, що розв'язуються методами прямого перебору[3][4].
Задача комівояжера
У класичній задачі комівояжера потрібно знайти оптимальну послідовність відвідування комівояжером міст. Єдиний точний спосіб розв'язування задачі полягає в переборі всіх можливих маршрутів і виборі того, який потребує найменшої кількості часу. Тим самим складність розв'язування задачі комівояжера є пропорційною до кількості всіх можливих послідовностей міст, яку можна порахувати за формулою перестановок:
Шахи
Гіпотетично можливо прорахувати всі варіанти ходів у настільній грі шахи від початку гри до кінця методом повного перебору всіх комбінацій. Однак наразі та у найближчому майбутньому[2] розв'язати таку задачу практично неможливо. Наприклад, для обчислювальної машини, здатної прорахувати мільйон ігрових комбінацій за секунду з відкиданням явно неоптимальних гілок, на прорахунок 6 ходів наперед потрібна 1 секунда, на 12 ходів — 11 днів, а на 18 ходів — близько 32 000 років[2].
Примітки
- ↑ Web Dictionary of Cybernetics and Systems [Архівовано 2010-08-06 у Wayback Machine.] (англ.)
- ↑ а б в A Dictionary of Computing (англ.)
- ↑ Articles on Artificial Intelligence [Архівовано 2011-08-23 у Wayback Machine.] (англ.)
- ↑ Denys Duchier, Claire Gardent and Joachim Niehren. Concurrent Constraint Programming in Oz for Natural Language Processing [Архівовано 2011-08-12 у Wayback Machine.] (англ.)
Це незавершена стаття з інформатики. Ви можете допомогти проєкту, виправивши або дописавши її. |
Це незавершена стаття з математики. Ви можете допомогти проєкту, виправивши або дописавши її. |