program ozási módszerek backtracking (visszalépéses keresés) Általános bemutató
DESCRIPTION
Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató. L énárt Szabolcs Páll Boglárka. Alkalmazási terület. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/1.jpg)
Programozási módszerekBacktracking(Visszalépéses keresés) Általános bemutató
Lénárt SzabolcsPáll Boglárka
![Page 2: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/2.jpg)
Alkalmazási terület azon feladatok megoldásakor
alkalmazható, amelyeknek eredményét az M1 M2 ... Mn Descartes-szorzatnak azon elemei alkotják, amelyek eleget tesznek bizonyos belső feltételeknek.
M1 M2 ... Mn Descartes-szorzatot a megoldások terének nevezzük.
![Page 3: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/3.jpg)
1. Példa Példa: Irassuk ki az összes 6 / 49 lottón kisorsolható
lehetséges eseteket!
Ebben az esetben a megoldás tere:[1 .. 49] x [1 .. 49] x [1 .. 49] x [1 .. 49] x [1 .. 49] x [1 .. 49]
6 23 5 18 46 33
egy lehetséges megoldás A belső feltételek pedig:
a számok mind különböznek egymástól
![Page 4: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/4.jpg)
Megoldás:
[1 .. 49]
kiválasztjuk az első
számot az M1 halmazból
1
[1 .. 49]
kiválasztjuk a második
számot az M2 halmazból
1
x
nem tesz eleget a
belső feltételnek !!!
kiválasztjuk az új második
számot az M2 halmazból
2
[1 .. 49]
kiválasztjuk a harmadik
számot az M3 halmazból
1
x
nem tesz eleget a
belső feltételnek !!!
kiválasztjuk az új harmadik
számot az M3 halmazból
3
...
eljutunk az első megoldásig 1 2 3 4 5 6
...
x [1 .. 49] x [1 .. 49] x [1 .. 49]
![Page 5: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/5.jpg)
Megoldás: további megoldások megtalálása:
1 2 3 4 5 6
1 2 3 4 5 71 2 3 4 5 81 2 3 4 5 91 2 3 4 5 10...1 2 3 4 5 49
A megoldástér utolsó halmazának (itt M6) elemeit próbáljuk ki sorra
Ha elfogytak az elemek
visszalépünk és
változtatunk egyet az előzőleg betett elemen ( M5 halmazból választunk új elemet)
1 2 3 4 6 7
1 2 3 4 6 8...1 2 3 4 6 49
Megint a megoldástér utolsó halmazának (itt M6) elemeit próbáljuk ki sorra
Ha elfogytak az elemek
visszalépünk és
változtatunk egyet az előzőleg betett elemen ( M5 halmazból választunk új elemet)...
1 2 3 4 46 471 2 3 4 46 481 2 3 4 46 49 1 2 3 4 47 48 1 2 3 4 47 491 2 3 4 48 49
1 2 3 5 6 8...1 2 3 5 48 49
Ha elfogytak az elemek
visszalépünk és
változtatunk egyet az előzőleg betett elemen ( M4 halmazból választunk új elemet)
...1 2 3 46 47 481 2 3 46 47 491 2 3 46 48 491 2 3 47 48 49
Eljutunk az utolsó megoldáshoz:
44 45 46 47 48 49
![Page 6: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/6.jpg)
2. Példa Példa: Keressük meg az összes olyan
pontosan háromjegyű szigorúan pozitív természetes számot, amelyek számjegyeinek összege kisebb 15-nél, illetve a számjegyek szorzata nullától különböző páros szám.
Ebben az esetben a megoldás tere:{1,2,3…,9} x {1,2,3…,9} x {1,2,3…,9}
A belső feltételek pedig: Számjegyei összege kisebb legyen 15-nél és a számjegyek szorzata pedig páros szám legyen.
![Page 7: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/7.jpg)
Megoldás:
[1 .. 9]
kiválasztjuk az első
számot az M1 halmazból
1
[1 .. 9]
kiválasztjuk a második
számot az M2 halmazból
1
x [1 .. 9]
kiválasztjuk a harmadik
számot az M3 halmazból
1
x
kiválasztjuk az új harmadik
számot az M3 halmazból
2
eljutunk az első megoldásig 1 1 2
nem tesz eleget a
belső feltételnek !!!
![Page 8: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/8.jpg)
Megoldás: további megoldások megtalálása:
1 1 2
1 1 4 1 1 61 1 8
A megoldástér utolsó halmazának (itt M3) elemeit próbáljuk ki sorra
Ha elfogytak az elemek
visszalépünk és
változtatunk egyet az előzőleg betett elemen ( M2 halmazból választunk új elemet)
1 2 1
1 2 21 2 3...1 2 9
Megint a megoldástér utolsó halmazának (itt M3) elemeit próbáljuk ki sorra
Ha elfogytak az elemek
visszalépünk és
változtatunk egyet az előzőleg betett elemen ( M2 halmazból választunk új elemet)
...
2 1 1...9 4 1
Ha elfogytak az elemek
visszalépünk és
változtatunk egyet az előzőleg betett elemen ( M1 halmazból választunk új elemet)
Eljutunk az utolsó megoldáshoz:
9 4 1
1 4 11 4 2...1 4 9
![Page 9: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/9.jpg)
A módszer bemutatása A visszalépéses keresés nem generálja a Descartes-
szorzat minden x = (x1, x2, ..., xn) M1 M2 ... Mn
elemét, hanem csak azokat, amelyek esetében remélhető, hogy megfelelnek a belső feltételeknek.
Igy csökkenthetjük a próbálkozások számát.
Az eredményt általában egy tömbbe tároljuk. A 1.példánk esetében a megoldást egy hatelemes tömbbe fogjuk tárolni.
var szam:array[1..6] of 1..49;
![Page 10: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/10.jpg)
A módszer bemutatása Az algoritmusban a tömb elemei egyenként
kapnak értékeket: xi számára csak akkor „javasolunk értéket”, ha x1,
x2, ..., xi–1 már kaptak értéket az aktuálisan generált eredményben.
Az xi-re vonatkozó „javaslat”-ot akkor fogadjuk el,
amikor x1, x2, ..., xi–1 értékei az xi értékével együtt megvalósítják a belső feltételeket.
Ha az i-edik lépésben a belső feltételek nem teljesülnek, xi számára új értéket választunk az Mi halmazból.
![Page 11: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/11.jpg)
A módszer bemutatása Ha az Mi halmaz minden elemét kipróbáltuk,
visszalépünk az i–1-edik elemhez, amely számára új értéket „javasolunk” az Mi–1 halmazból
Ha az i-edik lépésben a belső feltételek teljesülnek, az algoritmus folytatódik ha teljesülnek a folytatási feltételek és akkor az xi+1-nek adunk értéket (példa: nem generáltuk mind a három számjegyet), különben a végeredményhez jutunk.
![Page 12: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/12.jpg)
Algoritmus (rekurzív megközelítés)
Algoritmus Rekurzív_Backtracking(i): Minden mj eleme Mi értékre végezd el:
xi := mj
Ha Megfelel(i) akkor {ha megfelel a belső feltételeknek} Ha i < n akkor {ha meg van folytatas} Rekurzív_Backtracking(i+1) {tovabblepek a kovetkezo elemhez} különben {ha a vegere ertem} Ki: x1, x2, ..., xn {eredmeny kiirasa}
vége(ha) vége(ha) vége(minden)Vége(algoritmus)
![Page 13: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/13.jpg)
Algoritmus (rekurzív megközelítés)
Algoritmus Megfelel(i): Megfelel := igaz Ha a belső feltételek x1, x2, ..., xi esetében nem teljesülnek akkor Megfelel := hamis vége(ha)Vége(algoritmus)
![Page 14: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/14.jpg)
![Page 15: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató](https://reader035.vdocuments.net/reader035/viewer/2022062801/56814351550346895dafc9ad/html5/thumbnails/15.jpg)