Top Banner
Programozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató Lénárt Szabolcs Páll Boglárka
15

Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató

Jan 10, 2016

Download

Documents

istas

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 Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató

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ó

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ó

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ó

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ó

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ó

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ó

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ó

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ó

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ó

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ó

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ó

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ó

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ó
Page 15: Program ozási módszerek Backtracking (Visszalépéses keresés) Általános bemutató