Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Lénárt Szabolcs Páll Boglárka
Programozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató Lénárt Szabolcs Páll Boglárka
2
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.
3
1. Példa Példa: Irassuk ki az összes 6 / 49 lottón kisorsolható lehetséges eseteket! Ebben az esetben a megoldás tere: [ ] x [ ] x [ ] x [ ] x [ ] x [ ] egy lehetséges megoldás A belső feltételek pedig: a számok mind különböznek egymástól
4
... ... Megoldás: x x 1 2 3 eljutunk az első megoldásig 1 2 3 4 5 6
[ ] [ ] [ ] x [ ] x [ ] x [ ] kiválasztjuk az első számot az M1 halmazból kiválasztjuk a második számot az M2 halmazból kiválasztjuk a harmadik számot az M3 halmazból nem tesz eleget a belső feltételnek !!! nem tesz eleget a belső feltételnek !!! 1 1 1 ... kiválasztjuk az új második számot az M2 halmazból kiválasztjuk az új harmadik számot az M3 halmazból ... 2 3 eljutunk az első megoldásig
5
Megoldás: további megoldások megtalálása:
Ha elfogytak az elemek visszalépünk és változtatunk egyet az előzőleg betett elemen ( M4 halmazból választunk új elemet) Megint a megoldástér utolsó halmazának (itt M6) elemeit próbáljuk ki sorra 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) ... Ha elfogytak az elemek visszalépünk és változtatunk egyet az előzőleg betett elemen ( M5 halmazból választunk új elemet) Eljutunk az utolsó megoldáshoz:
6
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.
7
Megoldás: x x 1 2 eljutunk az első megoldásig 1 1 2 [1 .. 9] [1 .. 9]
kiválasztjuk az első számot az M1 halmazból kiválasztjuk a második számot az M2 halmazból kiválasztjuk a harmadik számot az M3 halmazból nem tesz eleget a belső feltételnek !!! 1 1 1 kiválasztjuk az új harmadik számot az M3 halmazból 2 eljutunk az első megoldásig
8
Megoldás: további megoldások megtalálása:
1 1 2 1 2 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) Megint a megoldástér utolsó halmazának (itt M3) elemeit próbáljuk ki sorra A megoldástér utolsó halmazának (itt M3) elemeit próbáljuk ki sorra 1 2 2 1 2 3 ... 1 2 9 2 1 1 ... 9 4 1 1 1 4 1 1 6 1 1 8 Ha elfogytak az elemek visszalépünk és változtatunk egyet az előzőleg betett elemen ( M2 halmazból választunk új elemet) ... 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 4 1 1 4 2 ... 1 4 9 Eljutunk az utolsó megoldáshoz: 9 4 1
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;
10
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.
11
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.
12
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(minden) Vége(algoritmus)
13
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)
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.