обратноtracкралски алгоритъм
⚡ Умно обобщение
обратноtracАлгоритъмът на King е систематична техника за решаване на проблеми, която постепенно изгражда кандидат-решения и изоставя частични кандидати, които не могат да удовлетворят дадените ограничения. Той използва рекурсия, за да изследва дървото на пространството на състоянията, отстранява невъзможни клони и се връща към предишното решение, когато се стигне до задънена улица. Тази статия обяснява основната идея, работните стъпки, рекурсивната структура, терминологията, класическите приложения като N-Queens и Sudoku, както и компромисите срещу грубата сила и чистата рекурсия.
![]()
Какво е обратноtracкралски алгоритъм?
обратноtracцар е алгоритмична техника, която търси валидни комбинации за решаване изчислителни проблемиТой постепенно изгражда кандидат-решения и отхвърля тези, които не отговарят на дадените ограничения. Подходът е особено полезен, когато трябва да изберете осъществим резултат измежду много възможни резултати.
Този алгоритъм се счита за по-ефективен от подхода Brute Force. За разлика от Brute Force, който разглежда всяка възможна комбинация, BacktracКинг се фокусира върху намирането на едно-единствено валидно решение, което отговаря на определените ограниченияСпестява време и памет, като отменя последната стъпка и опитва друга опция, след като се стигне до задънена улица. Също така спира веднага щом се намери валидно решение.
обратноtracking се използва широко, защото може да решава сложни проблеми без изчерпателно потребление на ресурси. Техниката е особено ценна за проблеми с много ограничения, като судоку, проблема с N-дами и планиране. Чрез интелигентно навигиране в потенциалните решения, BacktracКинг намира отговор, който удовлетворява всички условия, което го прави незаменим за задачи, изискващи едновременно прецизност и ефективност.
Как обратноtracРаботи ли алгоритъмът на краля?
ГърбаtracАлгоритъмът на Кинг е техника за решаване на проблеми, която изгражда валидни решения стъпка по стъпка. Ако ограниченията на дадена стъпка не са изпълнени, алгоритъмът се връща към предишната стъпка и избира различен кандидат.
След това продължава с алтернативни комбинации, които отговарят на ограниченията. Тъй като съществуват много възможни комбинации, алгоритъмът избира най-задоволителната опция и решава проблема последователно. Тази техника е полезна, когато трябва да избирате от няколко кандидата. Оттеглянето означава анулиране на избор, когато той не може да доведе до валидно решение.
ГърбаtracАлгоритъмът на Кинг следва тези общи стъпки за решаване на задача:
Стъпка 1) Инициализация: Започнете с празно или частично решение.
Стъпка 2) Избор: Въз основа на ограниченията, изберете един кандидат за разширяване на текущото решение.
Стъпка 3) Проучване: Рекурсивно решете проблема, като вземете предвид избрания кандидат и продължите напред.
Стъпка 4) Проверка на ограниченията: На всяка стъпка проверявайте дали частичното решение нарушава някакви ограничения. Ако е така, върнете се обратно.track и опитайте с друг кандидат.
Стъпка 5) Прекратяване: Процесът спира, след като се намери валидно решение или всички комбинации са изчерпани.
Стъпка 6) Назадtracцар: Когато текущата опция не може да реши проблема, върнете се към предишното състояние и опитайте нов кандидат.
Стъпка 7) Повторете: Продължете цикъла, докато проблемът не бъде решен или не бъдат проучени всички опции.
Рекурсивна природа на гърбаtracкралски алгоритъм
обратноtracАлгоритмите на King са по своята същност рекурсивни. Функцията се извиква с различни параметри, докато не открие валидно решение или не изчерпи всички възможности:
def find_solutions(n, other_params): if found_a_solution(): increment_solutions_found() display_solution() if solutions_found >= solution_target: exit_program() return for val in range(first, last+1): if is_valid(val, n): apply_value(val, n) find_solutions(n + 1, other_params) remove_value(val, n)
Често срещани термини, свързани с гърбаtracпроблеми с краля
Това са основните термини, свързани с гърбаtracкралска техника:
- Вектор на решението: Представя решенията като n-кортежи, като например (X1, X2, …, Xn).
- Ограничения: Правила, които ограничават стойностите на X, както имплицитни, така и явни.
- Пространство за решения: Всички валидни X стойности, които удовлетворяват изричните ограничения.
- Дърво на състоянията: Представя пространството на решенията под формата на дърво.
- Пространство на състоянията: Описва пътища в рамките на дърво на състоянията.
- Проблемно състояние: Възли в дървото за търсене, които представляват частични решения.
- Състояния на решението: Състояния, които образуват валидни набори от решения в S.
- Отговор Щати: Удовлетворете имплицитните ограничения и получете желаните решения.
- Обещаващ възел: Води към валидни решения и остава осъществим.
- Неперспективен възел: Води до неосъществими състояния и не е изследвано по-нататък.
- Активен възел: Вече е генерирано с оставащи неизследвани деца.
- Е-възел: Активен възел, който в момента генерира своите дъщерни възли.
- Мъртъв възел: Не е възможно по-нататъшно разширяване, защото всяко дете е генерирано.
- Генериране на възли в дълбочина: Използва най-скорошния активен възел като следващ E-възел.
- Ограничаваща функция: Максимизира или минимизира B(x1, x2, …, Xa) за оптимизация.
- Статични дървета: Формулирането на дървото е независимо от екземпляра на проблема.
- Динамични дървета: Формулировката на дървото варира в зависимост от конкретния проблем.
Кога да използвате гръбtracкралски алгоритъм?
След като работните стъпки са ясни, следващият въпрос е кога обратноtracкрал е подходящият избор. Можете да изберете Задна частtracкралска техника за решаване на сложен проблем в следните случаи:
- Има много възможности за избор: обратноtracЦарят е подходящ за задачи, при които на всяка стъпка са налични много опции, като например избор на предмети или ходове.
- Няма ясен най-добър избор: Когато няма достатъчно информация, за да се определи най-добрият вариант предварително, обратноtracкрал може да се приложи за систематично изследване.
- Решението води до повече възможности за избор: обратноtracking ви помага да прегледате верижните избори по структуриран начин.
- Необходимо е да се проучат всички възможни решения: обратноtracКинг систематично изследва всяко решение, като взема поредица от решения, които се надграждат едно върху друго.
Видове гръбtracпроблеми с краля
След като решите, че обратноtracкралят отговаря на проблема, трябва да разпознаете към коя категория принадлежи проблемът. В „Назад“ има три вида проблемиtracалгоритми на King: проблеми с вземане на решения, оптимизация и изброяване.
- Проблем с решението: Целта е да се определи дали съществува осъществимо решение. Отговорът е или „да“, или „не“. Например, проблемът с N дами е проблем за вземане на решение, който пита дали N дами могат да бъдат поставени на шахматна дъска N x N, без да се атакуват една друга.
- Проблем с оптимизацията: Целта е да се намери най-доброто възможно решение измежду много опции. Това може да включва идентифициране на максимума или минимума на функция или променлива. Проблемът с раницата, където целта е да се максимизира общата стойност на предметите, като същевременно се спазва ограничението за тегло, е класически пример.
- Проблем с изброяването: Целта е да се изброят всички валидни решения на дадена задача без пропускане. Генерирането на всички възможни буквени комбинации от даден набор от знаци е един такъв пример.
Приложения на гърбаtracкрал и примери
обратноtracking се прилага в много реални и академични сценарии. Някои популярни приложения са обяснени по-долу с техния псевдокод.
- Sudoku Solver: ГърбаtracТехниката на краля запълва празните клетки с валидни числа и се връща в първоначалното им положение, когато дадено разположение наруши правилата на судоку.
function solveSudoku(board): if no empty cells: return true # Sudoku is solved for each empty cell (row, col): for num from 1 to 9: if num is valid in (row, col): place num in (row, col) if solveSudoku(board): return true remove num from (row, col) return false # No valid solution
- Проблем с N-дамата: ГърбаtracПодходът с царе поставя цариците на шахматна дъска N x N така, че никоя от тях да не се застрашава взаимно.
function solveNQueens(board, col): if col >= N: return true # All queens are placed for each row in the column col: if isSafe(board, row, col): place queen at (row, col) if solveNQueens(board, col + 1): return true remove queen from (row, col) return false # No valid solution in this branch
- Проблема със сумирането на подмножества: обратноtracКинг намира подмножеството от числа от даден набор, което се сумира до определена целева сума.
function subsetSum(nums, target, index, currentSubset): if target == 0: print(currentSubset) # Subset with the target sum found return if index >= len(nums) or target < 0: return currentSubset.add(nums[index]) subsetSum(nums, target - nums[index], index + 1, currentSubset) currentSubset.remove(nums[index]) subsetSum(nums, target, index + 1, currentSubset)
- Проблема с Хамилтоновия цикъл: обратноtracking се прилага за намиране на затворена обиколка в граф, която посещава всеки връх точно веднъж.
- Проблема с плъх в лабиринт: обратноtracКинг намира пътя на плъх от началната точка на лабиринта до изхода, отменяйки движенията, водещи до стени.
Предимства и недостатъци на гърбаtracкралски алгоритъм
Както всяка алгоритмична стратегия, Backtracking има ясни силни и ограничени страни, които трябва да прецените, преди да го приемете.
Предимства на гърбаtracкралски алгоритъм
обратноtracКралските техники решават сложни проблеми по няколко ефективни начина:
- ГърбаtracТехниката на краля се справя ефикасно с ограниченията.
- Методът работи добре за решаване на оптимизационни задачи.
- Техниката е подходяща за много различни видове проблеми.
- Процедурата помага да се прегледа всяко възможно решение.
- Защото се връща обратноtracks, това спестява повече памет от техниката Brute Force.
Недостатъци на гърбаtracкралски алгоритъм
обратноtracking също има някои ограничения, особено по отношение на времевата сложност. Недостатъците са следните:
- Това не гарантира решение във всеки сценарий.
- Може да е бавно поради големия брой комбинации за изпробване.
- Това носи висока времева сложност поради многото възможности.
- Не е подходящ за ограничения в реално време, защото намирането на най-доброто решение може да отнеме много време.
- Ефективността зависи от степента на сложност на проблема.
Разлика между гърбаtracкрал и рекурсия
обратноtracking е изграден на базата на рекурсия, но двете не са едно и също нещо. Таблицата по-долу подчертава ключовите разлики.
| Рекурсия | обратноtracцар |
|---|---|
| Извиква се до достигане на основния случай. | Използва рекурсия, за да прегледа всяка възможност, докато не се намери най-добрият възможен резултат. |
| Подход отдолу нагоре. | Подход отгоре надолу. |
| Нито една стойност не се отхвърля. | Нежизнеспособните решения се отхвърлят. |
