Tilbaketrackongealgoritme
⚡ Smart oppsummering
Tilbaketracking-algoritmen er en systematisk problemløsningsteknikk som trinnvis bygger kandidatløsninger og forlater delvise kandidatløsninger som ikke kan oppfylle de gitte begrensningene. Den bruker rekursjon for å utforske tilstandsrommet, beskjærer umulige grener og går tilbake til den forrige avgjørelsen når en blindvei nås. Denne artikkelen forklarer kjerneideen, arbeidstrinn, rekursiv struktur, terminologi, klassiske applikasjoner som N-dronninger og Sudoku, pluss avveiningene mot råstyrke og ren rekursjon.
Hva er tilbaketracKongens algoritme?
Tilbaketrackonge er en algoritmisk teknikk som søker etter gyldige kombinasjoner for å løse beregningsproblemerDen bygger gradvis opp mulige løsninger og forkaster de som ikke oppfyller de gitte begrensningene. Tilnærmingen er spesielt nyttig når du må velge et gjennomførbart resultat blant mange mulige utfall.
Denne algoritmen anses som mer effektiv enn Brute Force-tilnærmingen. I motsetning til Brute Force, som undersøker alle mulige kombinasjoner, er BacktracKing fokuserer på å finne en enkelt gyldig løsning som oppfyller de definerte kravene. begrensningerDet sparer tid og minne ved å angre det siste trinnet og prøve et annet alternativ etter å ha nådd en blindvei. Det stopper også så snart en gyldig løsning er funnet.
Tilbaketracking er mye brukt fordi den kan løse komplekse problemer uten uttømmende ressursforbruk. Teknikken er spesielt verdifull for problemer med mange begrensninger, som Sudoku, N-dronninger-problemet og planlegging. Ved å navigere intelligent i potensielle løsninger, TilbaketracKing finner et svar som oppfyller alle betingelser, noe som gjør den uunnværlig for oppgaver som krever både presisjon og effektivitet.
Hvordan tilbaketracFungerer king-algoritmen?
BaksidentracKing-algoritmen er en problemløsningsteknikk som bygger gyldige løsninger ett trinn om gangen. Hvis begrensningene i et gitt trinn ikke er oppfylt, går algoritmen tilbake til forrige trinn og velger en annen kandidat.
Deretter fortsetter den med alternative kombinasjoner som oppfyller begrensningene. Fordi det finnes mange mulige kombinasjoner, velger algoritmen det mest tilfredsstillende alternativet og løser problemet sekvensielt. Denne teknikken er nyttig når du må velge mellom flere kandidater. Tilbaketrekking betyr å avbryte et valg når det ikke kan føre til en gyldig løsning.
Baksidentracking-algoritmen følger disse generelle trinnene for å løse et problem:
Trinn 1) Initialisering: Begynn med en tom eller delvis løsning.
Trinn 2) Utvalg: Basert på begrensningene, velg én kandidat for å utvide den nåværende løsningen.
Trinn 3) Utforskning: Løs problemet rekursivt ved å vurdere den valgte kandidaten og gå videre.
Trinn 4) Begrensningssjekk: Ved hvert trinn, kontroller om den delvise løsningen bryter med noen begrensninger. Hvis den gjør det, gå tilbaketrack og prøv en annen kandidat.
Trinn 5) Avslutning: Prosessen stopper når en gyldig løsning er funnet eller alle kombinasjoner er uttømt.
Trinn 6) Tilbaketrackonge: Når det nåværende alternativet ikke kan løse problemet, gå tilbake til forrige tilstand og prøv en ny kandidat.
Trinn 7) Gjenta: Fortsett syklusen til problemet er løst eller alle alternativer er utforsket.
Rekursiv natur av tilbaketrackongealgoritme
Tilbaketracking-algoritmer er iboende rekursive. Funksjonen kaller seg selv med forskjellige parametere inntil den oppdager en gyldig løsning eller uttømmer alle muligheter:
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)
Vanlige begreper relatert til ryggtrackongeproblemer
Dette er de grunnleggende begrepene knyttet til ryggentrackongeteknikk:
- Løsningsvektor: Representerer løsninger som n-tupler, slik som (X1, X2, …, Xn).
- Begrensninger: Regler som begrenser X-verdier, både implisitte og eksplisitte.
- Løsningsrom: Alle gyldige X-verdier som tilfredsstiller de eksplisitte begrensningene.
- Statlig romtre: Representerer løsningsrommet i treform.
- Statlig rom: Beskriver stier innenfor et tilstandsromtre.
- Problemtilstand: Noder i søketreet som representerer delvise løsninger.
- Løsningstilstander: Tilstander som danner gyldige løsningstupler i S.
- Svarstater: Tilfredsstill implisitte begrensninger og gi de ønskede løsningene.
- Lovende node: Leder til gyldige løsninger og forblir gjennomførbare.
- Ikke-lovende node: Fører til umulige tilstander og utforskes ikke videre.
- Levende node: Allerede generert med uutforskede underordnede elementer igjen.
- E-node: En aktiv node genererer for øyeblikket sine undernoder.
- Død node: Ingen ytterligere utvidelse er mulig fordi hvert barn genereres.
- Generering av dybdeførste node: Bruker den nyeste aktive noden som neste E-node.
- Avgrensningsfunksjon: Maksimerer eller minimerer B(x1, x2, …, Xa) for optimalisering.
- Statiske trær: Treformulering er uavhengig av problemforekomsten.
- Dynamiske trær: Treformuleringen varierer med problemforekomsten.
Når du skal bruke en ryggtracKongens algoritme?
Når arbeidstrinnene er klare, er neste spørsmål når Tilbaketrackonge er det riktige valget. Du kan velge baksidentrackongeteknikk for å løse et komplekst problem i følgende tilfeller:
- Mange valg finnes: Tilbaketrackongedraktproblemer der mange alternativer er tilgjengelige i hvert trinn, for eksempel valg av gjenstand eller trekk.
- Ikke noe klart beste valg: Når det ikke er tilstrekkelig informasjon til å bestemme det beste alternativet på forhånd, Tilbaketracking kan brukes til å utforske systematisk.
- Avgjørelsen fører til flere valg: Tilbaketracking hjelper deg med å gjennomgå sammenhengende valg på en strukturert måte.
- Må utforske alle mulige løsninger: TilbaketracKing utforsker systematisk alle løsninger ved å ta en rekke beslutninger som bygger på hverandre.
Typer ryggtrackongeproblemer
Når du bestemmer deg for at tilbaketracHvis kongen passer til problemet, må du gjenkjenne hvilken kategori problemet tilhører. Det finnes tre typer problemer i TilbaketracKing-algoritmer: beslutnings-, optimaliserings- og opplistingsproblemer.
- Beslutningsproblem: Målet er å avgjøre om det finnes en gjennomførbar løsning. Svaret er enten ja eller nei. For eksempel er N-dronninger-problemet et avgjørelsesproblem som spør om N dronninger kan plasseres på et N x N sjakkbrett uten å angripe hverandre.
- Optimaliseringsproblem: Målet er å finne den best mulige løsningen blant mange alternativer. Dette kan innebære å identifisere maksimum eller minimum for en funksjon eller variabel. Ryggsekkproblemet, der målet er å maksimere den totale verdien av gjenstander samtidig som vektgrensen respekteres, er et klassisk eksempel.
- Opptellingsproblem: Målet er å liste opp alle gyldige løsninger på et gitt problem uten utelatelser. Å generere alle mulige bokstavkombinasjoner fra et gitt sett med tegn er et slikt eksempel.
Bruksområder for ryggtrackonge og eksempler
Tilbaketracking brukes i mange virkelige og akademiske scenarier. Noen populære applikasjoner forklares nedenfor med pseudokoden deres.
- Sudoku Solver: BaksidentracKing-teknikken fyller tomme celler med gyldige tall og tilbakestilles når en plassering bryter Sudoku-reglene.
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-dronning-problem: BaksidentracKongetilnærmingen plasserer dronninger på et N x N sjakkbrett slik at ingen av dem truer hverandre.
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
- Problem med delmengdesum: Tilbaketracking finner delmengden av tall fra et gitt sett som summerer seg til en spesifikk målsum.
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)
- Hamiltonsk syklusproblem: Tilbaketracking brukes til å finne en lukket tur i en graf som besøker hvert hjørne nøyaktig én gang.
- Rotte i en labyrint-problem: TilbaketracKongen finner veien til en rotte fra startpunktet i en labyrint til utgangen, og angrer bevegelser som fører til vegger.
Fordeler og ulemper med ryggtrackongealgoritme
Som alle algoritmiske strategier, Tilbaketracking har klare styrker og begrensninger som du bør veie før du tar det i bruk.
Fordeler med ryggentrackongealgoritme
TilbaketracKing-teknikker løser komplekse problemer på flere effektive måter:
- BaksidentracKing-teknikken håndterer begrensninger effektivt.
- Metoden fungerer bra for å løse optimaliseringsproblemer.
- Teknikken tilpasser seg mange forskjellige problemtyper.
- Prosedyren bidrar til å gjennomgå alle mulige løsninger.
- Fordi det er tilbaketracks, den sparer mer minne enn Brute Force-teknikken.
Ulemper med ryggentrackongealgoritme
TilbaketracKing har også noen begrensninger, spesielt rundt tidskompleksitet. Ulempene er som følger:
- Det garanterer ikke en løsning i alle scenarioer.
- Det kan være tregt på grunn av det store antallet kombinasjoner å prøve.
- Det medfører høy tidskompleksitet på grunn av mange muligheter.
- Det er uegnet for sanntidsbegrensninger fordi det kan ta lang tid å finne den beste løsningen.
- Effektiviteten avhenger av kompleksitetsnivået til problemet.
Forskjellen mellom ryggtrackonge og rekursjon
Tilbaketracking er bygget på rekursjon, men de to er ikke det samme. Tabellen nedenfor fremhever de viktigste forskjellene.
| Rekursjon | Tilbaketrackonge |
|---|---|
| Ringer seg selv til grunntilfellet er nådd. | Bruker rekursjon til å gjennomgå alle muligheter inntil det best mulige resultatet er funnet. |
| Bottom-up-tilnærming. | Top-down tilnærming. |
| Ingen verdi forkastes. | Ikke-levedyktige løsninger avvises. |
