tagasitrackuninga algoritm
⚡ Nutikas kokkuvõte
tagasitracKuninga algoritm on süstemaatiline probleemide lahendamise tehnika, mis loob järk-järgult kandidaatlahendusi ja hülgab osalised kandidaadid, mis ei vasta antud piirangutele. See kasutab rekursiooni olekuruumi puu uurimiseks, kärbib teostamatuid harusid ja naaseb eelmise otsuse juurde, kui jõutakse tupikusse. See artikkel selgitab põhiideed, tööetappe, rekursiivset struktuuri, terminoloogiat, klassikalisi rakendusi nagu N-kuningannad ja Sudoku, ning kompromisse toore jõu ja puhta rekursiooni vahel.
Mis on tagasitracKuninga algoritm?
tagasitrackuningas on algoritmiline meetod, mis otsib lahendamiseks kehtivaid kombinatsioone arvutusprobleemidSee loob järk-järgult kandidaatlahendusi ja jätab kõrvale need, mis ei vasta antud piirangutele. See lähenemisviis on eriti kasulik siis, kui peate valima teostatava tulemuse paljude võimalike tulemuste hulgast.
Seda algoritmi peetakse efektiivsemaks kui Brute Force'i meetodit. Erinevalt Brute Force'ist, mis uurib kõiki võimalikke kombinatsioone, on Back...trackuningas keskendub ühe kehtiva lahenduse leidmisele, mis vastab määratletud tingimustele piiranguidSee säästab aega ja mälu, tühistades viimase sammu ja proovides pärast tupikusse jõudmist teist võimalust. See peatub ka kohe, kui leitakse kehtiv lahendus.
tagasitracKingi kasutatakse laialdaselt, kuna see suudab lahendada keerulisi probleeme ilma ammendava ressursikuluta. See tehnika on eriti väärtuslik paljude piirangutega probleemide puhul, näiteks Sudoku, N-kuninganna probleem ja ajakava koostamine. Nutikalt potentsiaalsete lahenduste vahel navigeerides, Backtrackuningas leiab vastuse, mis vastab kõigile tingimustele, mis muudab selle asendamatuks ülesannete jaoks, mis nõuavad nii täpsust kui ka efektiivsust.
Kuidas tagasitracKas kuninga algoritm töötab?
SelgtracKingi algoritm on probleemide lahendamise tehnika, mis loob kehtivaid lahendusi samm-sammult. Kui antud sammu piirangud ei ole täidetud, naaseb algoritm eelmisele sammule ja valib uue kandidaadi.
Seejärel jätkatakse alternatiivsete kombinatsioonidega, mis vastavad piirangutele. Kuna võimalikke kombinatsioone on palju, valib algoritm kõige rahuldavama variandi ja lahendab probleemi järjestikku. See tehnika on kasulik alati, kui peate valima mitme kandidaadi hulgast. Tagasivõtmine tähendab valiku tühistamist alati, kui see ei saa viia kehtiva lahenduseni.
SelgtracKingi algoritm järgib probleemi lahendamiseks järgmisi üldisi samme:
1. samm) Initsialiseerimine: Alusta tühja või osalise lahendusega.
2. samm) Valik: Piirangute põhjal valige üks kandidaat praeguse lahenduse laiendamiseks.
3. samm) Uurimine: Lahendage probleem rekursiivselt, arvestades valitud kandidaati ja liikudes edasi.
4. samm) Piirangu kontroll: Igal sammul kontrollige, kas osaline lahendus rikub mingeid piiranguid. Kui rikub, siis tagasi.track ja proovi teist kandidaati.
5. samm) Lõpetamine: Protsess peatub, kui on leitud kehtiv lahendus või kõik kombinatsioonid on ammendatud.
6. samm) Tagasitrackuningas: Kui praegune variant probleemi lahendada ei suuda, naase eelmise oleku juurde ja proovi uut kandidaati.
7. samm) Korda: Jätkake tsüklit, kuni probleem on lahendatud või kõik võimalused on läbi uuritud.
Selja rekursiivne olemustrackuninga algoritm
tagasitracKingi algoritmid on oma olemuselt rekursiivsed. Funktsioon kutsub ennast erinevate parameetritega välja, kuni leiab kehtiva lahenduse või ammendab kõik võimalused:
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)
Seljaga seotud levinud terminidtracKuningaprobleemid
Need on tagaküljega seotud põhiterminidtracKuninga tehnika:
- Lahenduse vektor: Esitab lahendeid n-tuuplitena, näiteks (X1, X2, …, Xn).
- Piirangud: Reeglid, mis piiravad X väärtusi, nii kaudseid kui ka otseseid.
- Lahenduste ruum: Kõik kehtivad X-väärtused, mis vastavad selgesõnalistele piirangutele.
- Olekuruumi puu: Esitab lahendusruumi puu kujul.
- Oleku ruum: Kirjeldab olekuruumi puu sees olevaid teid.
- Probleemne olek: Otsingupuu sõlmed, mis esindavad osalahendusi.
- Lahenduse olekud: Olekud, mis moodustavad S-is kehtivaid lahendituupleid.
- Vastuste olekud: Rahulda kaudseid piiranguid ja anna soovitud lahendid.
- Paljutõotav sõlm: Viib kehtivate lahendusteni ja jääb teostatavaks.
- Mittepaljulubav sõlm: Viib teostamatutesse olekutesse ja seda ei uurita lähemalt.
- Aktiivne sõlm: Juba genereeritud, alles on jäänud uurimata alamobjektid.
- E-sõlm: Aktiivne sõlm, mis genereerib hetkel oma alamsõlmi.
- Surnud sõlm: Edasine laienemine pole võimalik, sest iga laps genereeritakse.
- Sügavusepõhine sõlme genereerimine: Kasutab järgmise E-sõlmena kõige uuemat aktiivset sõlme.
- Piirav funktsioon: Maksimeerib või minimeerib optimeerimiseks B(x1, x2, …, Xa).
- Staatilised puud: Puu formuleerimine on probleemi eksemplarist sõltumatu.
- Dünaamilised puud: Puu formulatsioon varieerub olenevalt probleemist.
Millal selga kasutadatracKuninga algoritm?
Kui tööetapid on selged, on järgmine küsimus, millal Tagasitrackuningas on sobiv valik. Saate valida tagaküljetrackuninglik tehnika keerulise probleemi lahendamiseks järgmistel juhtudel:
- Valikuid on palju: tagasitracKuningas sobib probleemidele, kus igal sammul on saadaval palju valikuid, näiteks eseme valimisel või käikudel.
- Selget parimat valikut pole: Kui parima variandi eelnevaks kindlaksmääramiseks pole piisavalt teavet, siis tagasitrackuningat saab rakendada süstemaatiliseks uurimiseks.
- Otsus toob kaasa rohkem valikuid: tagasitracKing aitab sul aheldatud valikuid struktureeritud viisil üle vaadata.
- Vaja on kaaluda kõiki võimalikke lahendusi: tagasitracKuningas uurib süstemaatiliselt iga lahendust, tehes rea üksteisele tuginevaid otsuseid.
Selja tüübidtracKuningaprobleemid
Kui sa otsustad, et tagasitracKui probleem sobib, peate ära tundma, millisesse kategooriasse see kuulub. Tagaplaanil on kolme tüüpi probleemetracKuninga algoritmid: otsustus-, optimeerimis- ja loendamise probleemid.
- Otsuse probleem: Eesmärk on kindlaks teha, kas teostatav lahendus on olemas. Vastus on kas jah või ei. Näiteks N-emandite probleem on otsustusülesanne, mis küsib, kas N emandat saab asetada N x N malelauale ilma üksteist ründamata.
- Optimeerimisprobleem: Eesmärk on leida paljude võimaluste hulgast parim võimalik lahendus. See võib hõlmata funktsiooni või muutuja maksimumi või miinimumi leidmist. Klassikaline näide on seljakotiprobleem, mille eesmärk on maksimeerida esemete koguväärtust, järgides samal ajal kaalupiirangut.
- Loendamisprobleem: Eesmärk on loetleda kõik kehtivad lahendused antud probleemile ilma ühtegi väljajätmist tegemata. Üks selline näide on antud tähemärkide komplektist kõigi võimalike tähekombinatsioonide genereerimine.
Selja rakendusedtrackuningas ja näited
tagasitracKingi rakendatakse paljudes reaalsetes ja akadeemilistes stsenaariumides. Mõned populaarsed rakendused on selgitatud allpool koos nende pseudokoodiga.
- Sudoku Solver: SelgtracKingi tehnika täidab tühjad lahtrid kehtivate numbritega ja tühistab paigutuse alati, kui see rikub Sudoku reegleid.
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-kuninganna probleem: SelgtracKuningastrateegia puhul asetab lipukesed N x N malelauale nii, et ükski neist ei ohustaks üksteist.
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
- Alamhulkade summa probleem: tagasitracking leiab antud hulgast arvude alamhulga, mille summa annab kindla sihtsumma.
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)
- Hamiltoni tsükli probleem: tagasitracFunktsiooni king rakendatakse graafi kinnise ringkäigu leidmiseks, mis külastab iga tippu täpselt üks kord.
- Rott labürindis Probleem: tagasitracKuningas leiab roti tee labürindi alguspunktist väljapääsuni, tühistades käigud, mis viivad seinteni.
Selja eelised ja puudusedtrackuninga algoritm
Nagu iga algoritmilise strateegia puhul, on ka BacktracKingil on selged tugevused ja piirangud, mida peaksite enne selle kasutuselevõttu kaaluma.
Selja eelisedtrackuninga algoritm
tagasitracKuninga tehnikad lahendavad keerulisi probleeme mitmel tõhusal viisil:
- SelgtracKuninga tehnika käsitleb piiranguid tõhusalt.
- Meetod sobib hästi optimeerimisülesannete lahendamiseks.
- See tehnika sobib paljude erinevate probleemitüüpidega.
- Protseduur aitab läbi vaadata kõikvõimalikud lahendused.
- Sest see tagasitracks, see säästab rohkem mälu kui jõhkra jõu tehnika.
Selja puudusedtrackuninga algoritm
tagasitracKingil on ka mõningaid piiranguid, eriti ajalise keerukuse osas. Puudused on järgmised:
- See ei garanteeri lahendust igas olukorras.
- See võib olla aeglane, kuna proovitavaid kombinatsioone on palju.
- See on paljude võimaluste tõttu ajaliselt keerukas.
- See ei sobi reaalajas piirangute jaoks, kuna parima lahenduse leidmine võib võtta kaua aega.
- Tõhusus sõltub probleemi keerukusest.
Erinevus selja vaheltrackuningas ja rekursioon
tagasitracking põhineb rekursioonil, kuid need kaks ei ole samad. Allolev tabel toob esile peamised erinevused.
| Rekursiooni | tagasitrackuningas |
|---|---|
| Helistab ise, kuni jõutakse baasjuhtumini. | Kasutab rekursiooni iga võimaluse ülevaatamiseks, kuni leitakse parim teostatav tulemus. |
| Alt-üles lähenemine. | Ülevalt alla lähenemine. |
| Ühtegi väärtust ei jäeta kõrvale. | Mitteelujõulised lahendused lükatakse tagasi. |
