a backtracking módszer

14
A backtracking módszer. XI. osztály

Upload: zilya

Post on 12-Jan-2016

66 views

Category:

Documents


0 download

DESCRIPTION

A backtracking módszer. XI. oszt ály. A backtracking nem rekurzív változata, azaz az iteratív alakja. p←1; st [p] ← 0; amíg p>0 végezd el kezdet ha < ha még létezik a p szinten ki nem próbált halmazelem > a kkor kezdet - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: A  backtracking  módszer

A backtracking módszer.

XI. osztály

Page 2: A  backtracking  módszer

A backtracking nem rekurzív változata, azaz az iteratív alakja

p←1;st[p] ← 0;amíg p>0 végezd el kezdet ha <ha még létezik a p szinten ki nem próbált halmazelem> akkor kezdet st[p] ←<egy újabb érték a lehetséges megoldások halmazából> ha <megfelel(p) függvény igazat térít vissza> akkor ha <végső megoldáshoz értünk> akkor meghív kiír_vagy_elment_mátrixba_vagy_vektorba_vektor (p) különben kezdet p ←p+1; st[p] ←0; vége vége különben p ←p-1;vége

Page 3: A  backtracking  módszer

A backtracking nem rekurzív változata, azaz az iteratív alakja

p←1;st[p] ← 0;amíg p>0 végezd el kezdet ha <ha még létezik a p szinten ki nem próbált halmazelem> akkor kezdet st[p] ←<egy újabb érték a lehetséges megoldások halmazából> ha <megfelel(p) függvény igazat térít vissza> akkor ha <végső megoldáshoz értünk> akkor meghív kiír_vagy_elment_mátrixba_vagy_vektorba_vektor (p) különben kezdet p ←p+1; st[p] ←0; vége vége különben p ←p-1;vége

Page 4: A  backtracking  módszer

A backtracking rekurzív változataMinden pval <v1> -től <vn> -ig végezd el kezdet st[p]← pval ha <megfelel(p) függvény igazat térít vissza> akkor ha <végső megoldáshoz értünk> akkor meghív kiír_vagy_elment_mátrixba_vagy_vektorba_vektor (p) különben önmagát_hívja_meg_a bktr (p+1) vége.

Page 5: A  backtracking  módszer

A backtracking rekurzív változataMinden pval <v1> -től <vn> -ig végezd el kezdet st[p]← pval ha <megfelel(p) függvény igazat térít vissza> akkor ha <végső megoldáshoz értünk> akkor meghív kiír_vagy_elment_mátrixba_vagy_vektorba_vektor (p) különben önmagát_hívja_meg_a bktr (p+1) vége.

Page 6: A  backtracking  módszer

Megválaszolandó kérdések

Honnan veszi a lehetséges részmegoldásokat, egy egy megoldás esetén?

Mikor jutunk egy megoldáshoz?

Mikor jó egy részmegoldás?

Hány megoldásra számíthatunk? Lehete meghatározni ezt előre? Hogyan?

Kell –e a megoldások halmazából optimálisat kiválasztani, vagy T tulajdonságuakat, vagy más

utólagos műveletet végezni ezekkel, mely ezen megoldások összehasonlítását ígényli?

Page 7: A  backtracking  módszer

Vektorral dolgozunk, melynek vagy az elemeit, vagy az elemeinek az indexeit mentjük egy - egy

verem szintre.

De megtörténhet az is, hogy egy – egy veremszintre más - más vektor eleme kerül (vagy vektorban

alvektor eleme), nem ugyan az a vektoré. Lásd a Descartes szorzatot is.

Ha mátrixból nyerjük, akkor a mátrix sora lesz a VEREM SZINTJE és az oszlopa a SZINTRE KERÜLŐ

ELEM értéke vagy egy másik mátrixot használunk a verem helyett, ahhoz, hogy bejelöljük azokat az

elemeket, amiket egy megoldásba lehetséges jó részmegoldásként érintettünk már. Lásd a Labirintus

feladatot.

Verem szerkezet

Legfelső szint

Legalsó szint

elemek elérési sorrendje

Page 8: A  backtracking  módszer

Vegyel egy A4-es kockás lapot, rajzolj egy labirintust, úgy, hogy az utakat ábrázoló kockákat

besatírozod halványan ceruzával.

Majd rajzold le mégegyszer ugyanazt a labirintust és helyezd el a kiinduló pontba Bodrit, majd

keresd meg, hány kivezető utat találhat, minden talált utat satírozd be különböző színnel.

Page 9: A  backtracking  módszer

Vegyel egy A4-es kockás lapot, rajzolj egy labirintust, úgy, hogy az utakat ábrázoló kockákat

besatírozod halványan ceruzával.

Majd rajzold le mégegyszer ugyanazt a labirintust és helyezd el a kiinduló pontba Bodrit, majd

keresd meg, hány kivezető utat találhat, minden talált utat satírozd be különböző színnel.

Hány utat találsz, tudod –e mindig előre?

Bodri eljut mindig a csonthoz?

Van –e kapcsolat a, közös a talált utak között?

Hogyan találta meg az utat? Ird le a lépéseit Bodrinak. A

különböző lépést külön sorszámmal tüntesd fel.

http://prog.ide.sk/pas2.php?s=40

Page 10: A  backtracking  módszer

1

2

3 4 5

6

7 8 9

10

11

12 Mit helyettesítettünk egy egy csomóval?

8 3 1

1

2

3

4

5

6

7

8

1 2 3 4 5 6 7 8

sor index oszlop index

lépésszám

Folytasd!

Page 12: A  backtracking  módszer

A backtracking rekurzív változata a permutációra

Alprogram bktr(p) {eljárás}Minden pval 1 -től n -ig végezd el kezdet st[p]← pval ha megfelel(p) akkor ha p=n akkor meghív kiír_vektor(p, st) különben bktr (p+1) vége.

Algoritmus megfelel(p) {függvény}megfelel:=igaz;Minden j 1 -től p-1 -ig végezd el kezdet ha st[p] = st[j] akkor megfelel:=hamisvége

Page 13: A  backtracking  módszer

A backtracking rekurzív változata a variációra

Alprogram bktr(p) {eljárás}Minden pval 1 -től n -ig végezd el kezdet st[p]← pval ha megfelel(p) akkor ha p=k akkor meghív kiír_vektor(p, st) különben bktr (p+1) vége.

Algoritmus megfelel(p) {függvény}megfelel:=igaz;Minden j 1 -től p-1 -ig végezd el kezdet ha st[p] = st[j] akkor megfelel:=hamisvége

Változás: csak a p=n változott p=k -ra

Page 14: A  backtracking  módszer

A backtracking rekurzív változata a variációra

Alprogram bktr(p) {eljárás}Minden pval 1 -től n -ig végezd el kezdet st[p]← pval ha megfelel(p) akkor ha p=k akkor meghív kiír_vektor(p, st) különben bktr (p+1) vége.

Algoritmus megfelel(p) {függvény}megfelel:=igaz;Minden j 1 -től p-1 -ig végezd el kezdet ha (st[p] <= st[j]) akkor megfelel:=hamisvége

Változás: 1. csak a p=n változott p=k -ra

2. (st[p] = st[j]) feltétel változott (st[p] <= st[j]) -re