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
Programozási módszerekBacktracking(Visszalépéses keresés) Általános bemutató
Lénárt SzabolcsPáll Boglárka
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.
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
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]
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
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.
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 !!!
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
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;
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.
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.
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)
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)