Backtracking-algoritm

Vad รคr Backtracking Algorithm?

Backtracking รคr en algoritm som sรถker efter mรถjliga kombinationer att lรถsa berรคkningsproblem. Den bygger stegvis upp kandidater och tar bort de som inte uppfyller givna begrรคnsningar. Denna teknik รคr mycket anvรคndbar i situationer dรคr du mรฅste vรคlja en genomfรถrbar lรถsning bland flera mรถjliga resultat.

Denna algoritm anses vara bรคttre och mer effektiv รคn Brute Force-metoden. Till skillnad frรฅn Bruteforce, som provar alla mรถjliga lรถsningar, fokuserar Backtracking pรฅ att endast hitta en slutlig lรถsning enligt given begrรคnsningar. Det sparar ocksรฅ tid och minne genom att รฅngra det sista steget (backtrack) och prova ett annat alternativ efter att ha nรฅtt en รฅtervรคndsgrรคnd. Dessutom stoppas det sรฅ snart en giltig lรถsning hittas.

Backtracking รคr en mycket anvรคnd teknik eftersom den kan lรถsa komplexa problem utan uttรถmmande resursfรถrbrukning. Det รคr sรคrskilt anvรคndbart fรถr problem dรคr mรฅnga begrรคnsningar mรฅste uppfyllas, sรฅsom Sudoku, n queen-problem och schemalรคggning. Genom att intelligent navigera genom potentiella lรถsningar kan backtracking hitta ett svar som uppfyller alla villkor. Detta gรถr den ovรคrderlig fรถr uppgifter som krรคver bรฅde precision och effektivitet.

Hur fungerar backtracking-algoritmen?

Backtracking-algoritmer รคr en problemlรถsningsteknik som gรฅr ut pรฅ att hitta giltiga lรถsningar steg fรถr steg. Om begrรคnsningarna fรถr ett steg inte uppfyller vissa villkor, รฅtergรฅr algoritmen till fรถregรฅende steg.

Backtracking-algoritm

Den fortsรคtter sedan med andra mรถjliga kombinationer som uppfyller de givna begrรคnsningarna. Eftersom det finns mรฅnga mรถjliga kombinationer, vรคljer den ett av de mest tillfredsstรคllande alternativen och lรถser problemet sekventiellt. Denna algoritmiska teknik รคr anvรคndbar nรคr du behรถver lรถsa ett eller flera mรถjliga alternativ. Uttag innebรคr att du avbryter ditt val nรคr en situation uppstรฅr som inte ger en giltig lรถsning.

Backtracking-algoritmen har fรถljande steg i allmรคnhet fรถr att lรถsa ett problem:

Steg 1) Initiering: Bรถrja med en initial tom/dellรถsning.

Steg 2) Urval: Baserat pรฅ specifika kriterier och begrรคnsningar, vรคlj ett alternativ fรถr att utรถka den nuvarande lรถsningen.

Steg 3) Utforskning: Lรถs rekursivt genom att รถvervรคga den valda kandidaten och gรฅ vidare i problemlรถsningsprocessen.

Steg 4) Kontroll av begrรคnsningar: Kontrollera om den aktuella dellรถsningen bryter mot nรฅgra begrรคnsningar vid varje steg. Om den gรถr det, gรฅ tillbaka till fรถregรฅende steg och fรถrsรถk med en annan kandidat.

Steg 5) Uppsรคgning: Backtracking-processen stoppas nรคr antingen en giltig lรถsning hittas eller alla kombinationer har fรถrbrukats.

Steg 6) Backtracking: Om det aktuella alternativet inte lรถser det givna problemet, รฅtergรฅr det till det tidigare tillstรฅndet. Den รถvervรคger sedan det nya alternativet fรถr att lรถsa det givna problemet.

Steg 7) Upprepa: Fortsรคtt med dessa steg tills problemet รคr lรถst eller alla alternativ har utforskats.

Rekursiv karaktรคr av backtracking-algoritm

Backtracking-algoritmer รคr rekursiva till sin natur. Det betyder att algoritmen anropar sig sjรคlv med olika parametrar tills den hittar en lรถsning eller har testat alla mรถjligheter:

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)

Vanliga termer relaterade till bakรฅtspรฅrningsproblem

Det hรคr รคr nรฅgra grundlรคggande termer relaterade till Backtracking-tekniken:

  • Lรถsningsvektor: Representerar lรถsningar som n-tupler, som (X1, X2, โ€ฆ, Xn).
  • begrรคnsningar: Regler som begrรคnsar X-vรคrden, implicita och explicita.
  • Lรถsningsutrymme: Alla giltiga X-vรคrden som uppfyller explicita begrรคnsningar.
  • Statens rymdtrรคd: Representerar lรถsningsutrymmet som ett trรคd.
  • State Space: Beskriver sรถkvรคgar i ett tillstรฅndsrymdtrรคd.
  • Problemtillstรฅnd: Noder i sรถktrรคdet som representerar dellรถsningar.
  • Lรถsningsstater: Stater som bildar giltiga lรถsningstupler i S.
  • Svar stater: Tillfredsstรคlla implicita begrรคnsningar och ge รถnskade lรถsningar.
  • Lovande nod: Leder till รถnskade lรถsningar och fรถrblir genomfรถrbara.
  • Icke-lovande nod: Leder till omรถjliga tillstรฅnd, inte undersรถkt vidare.
  • Live Node: Genereras med outforskade barn.
  • E-nod: Live nod med pรฅgรฅende barngenerering.
  • Dรถd nod: Ingen ytterligare expansion av alla barn genereras.
  • Djup-fรถrsta nodgenerering: Anvรคnder den senaste livenoden som nรคsta E-nod.
  • Begrรคnsande funktion: Maximerar eller minimerar B(x1, x2, โ€ฆ, Xa) fรถr optimering.
  • Statiska trรคd: Trรคdformulering oberoende av probleminstansen.
  • Dynamiska trรคd: Trรคdets formulering varierar med probleminstansen.

Nรคr ska man anvรคnda en bakรฅtspรฅrningsalgoritm?

Vi kan vรคlja Backtracking-tekniken fรถr att lรถsa ett komplext problem nรคr:

  • Det finns mรฅnga val: Backtracking รคr lรคmpligt om det finns mรฅnga alternativ vid varje steg i problemlรถsningsprocessen. Dessa alternativ kan relatera till valet av fรถremรฅl och drag.
  • Inget klart bรคsta val: Nรคr det inte finns tillrรคcklig information fรถr att bestรคmma det bรคsta valet bland tillgรคngliga alternativ, kan en Backtracking-algoritm anvรคndas.
  • Beslutet leder till fler val: Du kan vรคlja backtracking-teknik fรถr att se รถver val systematiskt.
  • Behรถver utforska alla mรถjliga lรถsningar: Backtracking utforskar systematiskt alla lรถsningar genom att fatta en rad beslut som bygger pรฅ varandra.

Typer av bakรฅtspรฅrningsproblem

Det finns tre typer av problem i backtracking-algoritmer: beslutsproblem, optimeringsproblem och upprรคkningsproblem. Lรฅt oss lรคra oss om dem nedan.

  1. Beslutsproblem: I denna typ av problem รคr mรฅlet att avgรถra om det finns en genomfรถrbar lรถsning. Vi kontrollerar "ja" och "nej" svaren. Till exempel problemet med n-queens. Det รคr ett beslutsproblem som undersรถker sannolikheten fรถr att placera n damer pรฅ ett n ร— n schackbrรคde utan att attackera varandra.
  2. Optimeringsproblem: I optimeringsproblem รคr mรฅlet att hitta den bรคsta mรถjliga lรถsningen bland mรฅnga alternativ. Detta kan innebรคra att bestรคmma maximi- och minimivรคrdena fรถr en viss funktion eller variabel. Tรคnk till exempel pรฅ ryggsรคcksproblemet, dรคr mรฅlet รคr att maximera det totala vรคrdet av fรถremรฅlen i vรคskan samtidigt som viktgrรคnsen respekteras.
  3. Upprรคkningsproblem: Dess mรฅl รคr att hitta alla mรถjliga lรถsningar pรฅ ett givet problem. Vi listar alla giltiga alternativ utan nรฅgra utelรคmnanden. Ett exempel skulle vara att generera alla mรถjliga bokstavskombinationer frรฅn en given uppsรคttning tecken.

Tillรคmpningar av backtracking & exempel

Det finns olika tillรคmpningar av Backtracking. Nรฅgra av dem fรถrklaras nedan med sin pseudokod.

  1. Sudoku Solver: Det hรคr problemet innehรฅller ett 3ร—3-undernรคt med dubbletter av nummer. Backtracking-tekniken visar att lรถsningen returnerar falskt, vilket indikerar behovet av en annan nummerplacering.
  2. 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
    
  3. N-Queen-problem: Backtracking-metoden avgรถr hur damer ska presenteras pรฅ ett N ร— N schackbrรคde sรฅ att ingen av dem hotar varandra.
  4. 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
    
  5. Delmรคngd Summa Problem: Den anvรคnds fรถr att hitta delmรคngden av tal frรฅn en given uppsรคttning som summerar till en viss mรฅlsumma.
  6. 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)
    
  7. Hamiltons cykelproblem: Backtracking kan anvรคndas fรถr att hitta en sluten tur i en graf som besรถker varje vertex exakt en gรฅng.
  8. Problem med rรฅtta i labyrint: Backtracking-tekniken anvรคnds fรถr att hitta vรคgen fรถr en rรฅtta frรฅn startpunkten fรถr labyrinten till utgรฅngen.

Fรถrdelar och nackdelar med Backtracking Algorithm

Fรถrdelar med Backtracking Algorithm

Backtracking-tekniker anvรคnds fรถr att lรถsa komplexa problem. Det har mรฅnga fรถrdelar som:

  • Backtracking-tekniken รคr effektiv fรถr att hantera begrรคnsningar.
  • Denna metod รคr bra fรถr att lรถsa optimeringsproblem.
  • Tekniken fungerar fรถr olika typer av problem.
  • Denna procedur kan hjรคlpa till att granska alla mรถjliga lรถsningar.
  • Eftersom den backar sparar den mer minne รคn Bruteforce-tekniken.

Nackdelar med Backtracking Algorithm

Backtracking-tekniker har ocksรฅ vissa begrรคnsningar, sรฅsom tidskomplexitet. Denna teknik har fรถljande nackdelar:

  • Det finns ingen garanterad lรถsning.
  • Det รคr lรฅngsammare pรฅ grund av mรฅnga kombinationer.
  • Det har hรถg tidskomplexitet pรฅ grund av mรฅnga mรถjligheter.
  • Det รคr olรคmpligt fรถr realtidsbegrรคnsningar eftersom det kan ta lรฅng tid att hitta den bรคsta lรถsningen.
  • Effektiviteten beror pรฅ problemets komplexitetsnivรฅ.

Skillnaden mellan backtracking och rekursion

Rekursion backa
Anropar sig sjรคlv tills basfallet nรฅs. Anvรคnder rekursion fรถr att granska alla mรถjligheter tills bรคsta mรถjliga resultat hittas.
Tillvรคgagรฅngssรคtt nedifrรฅn och upp. Uppifrรฅn och ner tillvรคgagรฅngssรคtt.
Inget vรคrde kasseras. Icke genomfรถrbara lรถsningar fรถrkastas.

Slutsats

Backtracking รคr en anvรคndbar algoritmisk strategi fรถr att lรถsa komplexa problem genom att systematiskt utforska genomfรถrbara lรถsningar och backtracka vid behov. Vi kan fรถrvรคnta oss att bakรฅtspรฅrningstekniker fรถrbรคttras med fรถrbรคttringar i berรคkningskraft och algoritmisk effektivitet. Dessa framsteg gรถr det mรถjligt fรถr dem att tackla stรถrre och mer komplexa problem effektivt.

Dessutom kan maskininlรคrningsmodeller vรคgleda bakรฅtspรฅrningsbeslut baserat pรฅ tidigare inlรคrda mรถnster.

Alla dessa tekniska innovationer kommer att revolutionera backtracking-algoritmer, vilket gรถr dem till ett kraftfullt och mรฅngsidigt verktyg fรถr att ta itu med komplicerade problem inom olika domรคner.

Sammanfatta detta inlรคgg med: