ПЕРЕБИРАННЯ ВАРІАНТІВ В ПРОГРАМУВАННІ
begin
нехай A – вузол на верхівці магазина;
if A є листком then
begin
обробити листок A;
виштовхнути A з магазина;
if A не є правим сином свого батька then
заштовхнути в магазин правого брата A;
end
else {A – проміжний вузол}
if A є допустимим і дерево з коренем A ще не оброблено then
заштовхнути в магазин лівого сина A
else {дерево з коренем A вже оброблено або A не є допустимим}
begin
виштовхнути A з магазина;
if A не є правим сином свого батька і не є коренем then
заштовхнути правого брата A в магазин;
end
end.
Наведений опис задає так званий вичерпний пошук у дереві пошуку варіантів, оскільки рано чи пізно ми дістаємося кожного допустимого вузла дерева. Зазначимо, що цей опис є схемою багатьох алгоритмів розв'язання різноманітних задач, пов'язаних із перебиранням варіантів.
3. Метод розгалужень і меж
Обхід усіх вузлів дерева пошуку варіантів може виявитися надто довгим. Наприклад, якщо в дереві всі вузли є допустимими, кожний проміжний вузол має m синів, а глибина дерева n, то всього в дереві 1+m+m2+ … +mn=(mn+1-1)/(m-1) вузлів. Уже за m=10 та n=10 це більш, ніж 1010. Якщо припустити, що комп'ютер здатний обробити 105 вузлів за секунду, то обхід такого дерева триватиме 105 секунд, або приблизно добу.
Існує багато практичних задач, де вимагається відшукати чи побудувати не всі можливі варіанти, а лише один із них, найкращий у деякому розумінні, визначеному в задачі. Отже, тут з'являється таке поняття, як цінність варіантів. Загальним принципом розв'язання таких задач є скорочення обходу дерева варіантів. У ньому відкидаються деякі гілки, про які можна стверджувати, що вони не містять варіантів більш цінних, ніж уже знайдені. Розглянемо приклад.