program ozási módszerek backtracking (visszalépéses keresés) Általános bemutató

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

Upload: istas

Post on 10-Jan-2016

25 views

Category:

Documents


3 download

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 Presentation

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ó