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. |
