Peruutusalgoritmi
Mikรค on backtracking-algoritmi?
Backtracking on algoritmi, joka etsii mahdollisia yhdistelmiรค ratkaistaviksi laskennallisia ongelmia. Se rakentaa asteittain ehdokkaita ja poistaa ne, jotka eivรคt tรคytรค annettuja rajoituksia. Tรคmรค tekniikka on erittรคin hyรถdyllinen tilanteissa, joissa sinun on valittava toteuttamiskelpoinen ratkaisu useiden mahdollisten tulosten joukosta.
Tรคtรค algoritmia pidetรครคn parempana ja tehokkaampana kuin Brute Force -lรคhestymistapa. Toisin kuin Bruteforce, joka kokeilee kaikkia mahdollisia ratkaisuja, Backtracking keskittyy vain yhden lopullisen ratkaisun lรถytรคmiseen annettujen tietojen mukaan. rajoitteet. Se myรถs sรครคstรครค aikaa ja muistia kumoamalla viimeisen vaiheen (backtrack) ja kokeilemalla toista vaihtoehtoa umpikujan saavuttamisen jรคlkeen. Lisรคksi se pysรคhtyy heti, kun kelvollinen ratkaisu lรถytyy.
Backtracking on laajalti kรคytetty tekniikka, koska se voi ratkaista monimutkaisia โโongelmia ilman kattavaa resurssien kulutusta. Se on erityisen hyรถdyllinen ongelmissa, joissa on tรคytettรคvรค lukuisia rajoituksia, kuten Sudoku, n queen -ongelma ja aikataulutus. Selaamalla รคlykkรครคsti mahdollisia ratkaisuja, backtracking voi lรถytรครค vastauksen, joka tรคyttรครค kaikki ehdot. Tรคmรค tekee siitรค korvaamattoman arvokkaan tehtรคviin, jotka vaativat sekรค tarkkuutta ettรค tehokkuutta.
Kuinka paluualgoritmi toimii?
Backtracking-algoritmit ovat ongelmanratkaisutekniikka, joka sisรคltรครค kelvollisten ratkaisujen lรถytรคmisen askel askeleelta. Jos vaiheen rajoitukset eivรคt tรคytรค tiettyjรค ehtoja, algoritmi palaa edelliseen vaiheeseen.
Sitten se jatkaa muilla mahdollisilla yhdistelmillรค, jotka tรคyttรคvรคt annetut rajoitukset. Koska mahdollisia yhdistelmiรค on useita, se valitsee yhden tyydyttรคvimmistรค vaihtoehdoista ja ratkaisee ongelman perรคkkรคin. Tรคmรค algoritmitekniikka on hyรถdyllinen, kun sinun on ratkaistava yksi tai useampi mahdollinen vaihtoehto. Peruuttaminen tarkoittaa valinnan peruuttamista aina, kun syntyy tilanne, joka ei tuota pรคtevรครค ratkaisua.
Peruutusalgoritmissa on yleensรค seuraavat vaiheet ongelman ratkaisemiseksi:
Vaihe 1) Alustus: Aloita tyhjรคstรค/osittaisesta ratkaisusta.
Vaihe 2) Valinta: Valitse tiettyjen kriteerien ja rajoitusten perusteella yksi vaihtoehto nykyisen ratkaisun laajentamiseksi.
Vaihe 3) Tutkimus: Ratkaise rekursiivisesti harkitsemalla valittua ehdokasta ja siirtymรคllรค eteenpรคin ongelmanratkaisuprosessissa.
Vaihe 4) Rajoitusten tarkistus: Tarkista joka vaiheessa, rikkooko nykyinen osaratkaisu rajoituksia. Jos nรคin on, palaa edelliseen vaiheeseen ja kokeile toista ehdokasta.
Vaihe 5) Pรครคttรคminen: Peruutusprosessi pysรคhtyy, kun joko kelvollinen ratkaisu lรถytyy tai kaikki yhdistelmรคt on kรคytetty loppuun.
Vaihe 6) Paluu: Jos nykyinen vaihtoehto ei ratkaise annettua ongelmaa, se palaa edelliseen tilaan. Sitten se harkitsee uutta vaihtoehtoa annetun ongelman ratkaisemiseksi.
Vaihe 7) Toista: Jatka nรคillรค vaiheilla, kunnes ongelma on ratkaistu tai kaikki vaihtoehdot on tutkittu.
Peruutusalgoritmin rekursiivinen luonne
Paluualgoritmit ovat luonteeltaan rekursiivisia. Tรคmรค tarkoittaa, ettรค algoritmi kutsuu itseรครคn eri parametreilla, kunnes se lรถytรครค ratkaisun tai on testannut kaikki mahdollisuudet:
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)
Peruutusongelmiin liittyvรคt yleiset termit
Nรคmรค ovat joitain Backtracking-tekniikkaan liittyviรค perustermejรค:
- Ratkaisuvektori: Esittรครค ratkaisuja n-monikoina, kuten (X1, X2, โฆ, Xn).
- rajoitteet: X-arvoja rajoittavat sรครคnnรถt, implisiittiset ja eksplisiittiset.
- Ratkaisutila: Kaikki kelvolliset X-arvot tรคyttรคvรคt nimenomaiset rajoitukset.
- Osavaltion avaruuspuu: Edustaa ratkaisuavaruutta puuna.
- Valtion avaruus: Kuvaa polut tila-avaruuspuussa.
- Ongelmatila: Hakupuun solmut, jotka edustavat osittaisia โโratkaisuja.
- Ratkaisuvaltiot: Tilat, jotka muodostavat kelvollisia ratkaisunumeroita S:ssรค.
- Vastaus valtiot: Tรคytรค implisiittiset rajoitukset ja tuo halutut ratkaisut.
- Lupaava Node: Johtaa haluttuihin ratkaisuihin ja pysyy toteuttamiskelpoisena.
- Lupaamaton solmu: Johtaa mahdottomiin tiloihin, ei tutkita enempรครค.
- Live Node: Luotu tutkimattomien lasten kanssa.
- E-solmu: Live-solmu, jossa on jatkuva lapsisukupolvi.
- Kuollut solmu: Kaikkia luotuja lapsia ei enรครค laajenneta.
- Depth-First Node Generation: Kรคyttรครค uusinta live-solmua seuraavana E-solmuna.
- Rajoitustoiminto: Maksimoi tai minimoi B(x1, x2, โฆ, Xa) optimointia varten.
- Staattiset puut: Puun muotoilu riippumaton ongelmainstanssista.
- Dynaamiset puut: Puun muotoilu vaihtelee ongelmatilanteen mukaan.
Milloin kรคyttรครค paluualgoritmia?
Voimme valita Backtracking-tekniikan monimutkaisen ongelman ratkaisemiseksi, kun:
- Vaihtoehtoja on monia: Backtracking on sopiva, jos ongelmanratkaisuprosessin jokaisessa vaiheessa on monia vaihtoehtoja. Nรคmรค vaihtoehdot voivat liittyรค kohteiden ja siirtojen valintaan.
- Ei selkeรครค parasta valintaa: Jos kรคytettรคvissรค ei ole riittรคvรคsti tietoa parhaan valinnan mรครคrittรคmiseksi kรคytettรคvissรค olevista vaihtoehdoista, voidaan kรคyttรครค Backtracking-algoritmia.
- Pรครคtรถs johtaa lisรครค valintoja: Voit valita paluutekniikkaa valintojen systemaattiseen tarkistamiseen.
- On tutkittava kaikki mahdolliset ratkaisut: Backtracking tutkii jรคrjestelmรคllisesti kaikkia ratkaisuja tekemรคllรค sarjan pรครคtรถksiรค, jotka perustuvat toisiinsa.
Peruutusongelmien tyypit
Peruutusalgoritmeissa on kolmenlaisia โโongelmia: pรครคtรถsongelmat, optimointiongelmat ja luettelointiongelmat. Opitaan niistรค alla.
- Pรครคtรถsongelma: Tรคmรคn tyyppisessรค ongelmassa tavoitteena on selvittรครค, onko mahdollista ratkaisua olemassa. Tarkistamme "kyllรค" ja "ei" vastaukset. Esimerkiksi n-kuningattaren ongelma. Se on pรครคtรถsongelma, joka tutkii todennรคkรถisyyttรค asettaa n kuningatarta n ร n shakkilaudalle hyรถkkรครคmรคttรค toisiaan vastaan.
- Optimointiongelma: Optimointitehtรคvissรค tavoitteena on lรถytรครค paras mahdollinen ratkaisu monien vaihtoehtojen joukosta. Tรคmรค voi sisรคltรครค tietyn funktion tai muuttujan enimmรคis- ja vรคhimmรคisarvojen mรครคrittรคmisen. Ajatellaan esimerkiksi reppuongelmaa, jossa tavoitteena on maksimoida laukussa olevien tavaroiden kokonaisarvo noudattaen samalla sen painorajaa.
- Luetteloongelma: Sen tavoitteena on lรถytรครค kaikki mahdolliset ratkaisut tiettyyn ongelmaan. Luetteloimme kaikki kelvolliset vaihtoehdot ilman puutteita. Esimerkki olisi kaikkien mahdollisten kirjainyhdistelmien luominen tietystรค merkkijoukosta.
Backtracking-sovellukset ja esimerkit
Backtracking-sovelluksella on useita sovelluksia. Jotkut niistรค selitetรครคn alla niiden pseudokoodilla.
- Sudoku Solver: Tรคmรค tehtรคvรค sisรคltรครค 3 ร 3 -aliruudukon, jossa on pรครคllekkรคisiรค numeroita. Takaisinseurantatekniikka nรคyttรครค ratkaisun palauttavan epรคtosi, mikรค osoittaa, ettรค numerot on sijoitettava eri tavalla.
- N-Queen ongelma: Peruutustapa mรครคrittรครค, kuinka kuningattaret esitetรครคn N ร N shakkilaudalla siten, ettรค mikรครคn niistรค ei uhkaa toisiaan.
- Osajoukon summa -ongelma: Sitรค kรคytetรครคn etsimรครคn tietystรค joukosta lukujen osajoukko, joka laskee yhteen tietyn tavoitesumman.
- Hamiltonin syklin ongelma: Backtrackinga voidaan kรคyttรครค sellaisen suljetun kiertomatkan lรถytรคmiseen kaaviosta, joka vierailee kussakin kรคrjessรค tรคsmรคlleen kerran.
- Rotta sokkeloongelmassa: Backtracking-tekniikkaa kรคytetรครคn etsimรครคn rotan polku sokkelon aloituspisteestรค uloskรคyntiin.
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
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
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)
Backtracking-algoritmin edut ja haitat
Backtracking-algoritmin edut
Backtracking-tekniikoita kรคytetรครคn monimutkaisten ongelmien ratkaisemiseen. Sillรค on monia etuja, kuten:
- Peruutustekniikka on tehokas rajoitusten kรคsittelyssรค.
- Tรคmรค menetelmรค on hyvรค optimointiongelmien ratkaisemiseen.
- Tekniikka toimii monenlaisiin ongelmiin.
- Tรคmรค menettely voi auttaa tarkistamaan kaikki mahdolliset ratkaisut.
- Koska se perรครคntyy, se sรครคstรครค enemmรคn muistia kuin Bruteforce-tekniikka.
Backtracking-algoritmin haitat
Backtracking-tekniikoilla on myรถs joitain rajoituksia, kuten aika monimutkaisuus. Tรคllรค tekniikalla on seuraavat haitat:
- Taattua ratkaisua ei ole.
- Se on hitaampi monien yhdistelmien vuoksi.
- Se on aika monimutkainen monien mahdollisuuksien vuoksi.
- Se ei sovellu reaaliaikaisiin rajoituksiin, koska parhaan ratkaisun lรถytรคminen voi kestรครค kauan.
- Tehokkuus riippuu ongelman monimutkaisuudesta.
Ero backtrackingin ja rekursion vรคlillรค
| Rekursio | vetรคytymistรค |
|---|---|
| Kutsuu itseรครคn, kunnes perustapaus saavutetaan. | Tarkastelee kaikkia mahdollisuuksia rekursion avulla, kunnes paras mahdollinen tulos lรถytyy. |
| Alhaalta ylรถs -lรคhestymistapa. | Ylhรครคltรค alas -lรคhestymistapa. |
| Mitรครคn arvoa ei hylรคtรค. | Epรคkelpoiset ratkaisut hylรคtรครคn. |
Yhteenveto
Backtracking on hyรถdyllinen algoritmistrategia monimutkaisten ongelmien ratkaisemiseen tutkimalla systemaattisesti toteutettavissa olevia ratkaisuja ja palaamalla tarvittaessa takaisin. Voimme odottaa paluutekniikoiden tehostavan laskentatehoa ja algoritmien tehokkuutta. Nรคmรค edistysaskeleet antavat heille mahdollisuuden kรคsitellรค suurempia ja monimutkaisempia ongelmia tehokkaasti.
Lisรคksi koneoppimismallit voivat ohjata perรครคntymispรครคtรถksiรค aiemmin opittujen mallien perusteella.
Kaikki nรคmรค teknologiset innovaatiot mullistavat paluualgoritmit tehden niistรค tehokkaan ja monipuolisen tyรถkalun monimutkaisten ongelmien ratkaisemiseen eri aloilla.
