You are on page 1of 9

BACKTRACKING

(VISSZALÉPÉSES KERESÉS)
Hozd létre n=3 összes permutációját.

Lehetséges megoldások: (1, 2, 3) vagy (2, 1, 3) vagy (3, 1, 2), stb


Helytelen megoldások: (1, 1, 3) vagy (2, 1, 2), stb.

Észrevesszük, hogy helytelen az a megoldás, amiben egy elem


ismétlődik...

Akkor miért hozzuk létre az


összes megoldást, ha nagyrésze
helytelen???
A backtracking olyan algoritmus, melyet akkor használunk, amikor egy
példának sok megoldása van. A backtracking csakis a helyes megoldásokat
hozza létre. A megoldást egy tömbbe teszi, melynek elemei egy véges halmaz
elemeiből kerülnek ki.
1.hely 2.hely 3.hely 1.hely 2.hely 3.hely
1 1 2 2
2 1 3 1
2 2
3 3
3 1 3 1 1
2 2
3 3
2 1 1 2 1
2 2
3 3
3
vége

Megoldások: (1,2,3), (1,3,2), (2,1, 3), (2,3,1), (3,1,2), (3,2,1)


A backtracking algoritmus
1.k=1 (első helyen állunk, első pozíciót töltjük)
2.van-e még fel nem használt érték a jelenlegi pozíción?
-ha van: -betesszük az első fel nem használt elemet,
-ellenőrizzük, hogy az újonnan betett elem a többi, előző helyeken levő
elemekkel együtt helyes megoldáshoz vezethet-e:
-ha igen, akkor :
-ha feltöltöttük x utolsó pozícióját, akkor kiiratjuk a
megoldást (x tömböt), majd ismételjük a lépéseket a 2.
lépéstől kezdve,

-ha nem töltöttük fel x tömb utolsó pozícióját, akkor x


következő pozíciójára lépünk (k=k+1), és ismételjük a
lépéseket a 2. lépéstől,

-ha nem, akkor ismételjük a lépéseket az 2. lépéstől,

-nincs – x-ben hátralépünk (k=k-1). Ellenőrizzük, hogy a k egyenlő-e 0-val, nulladik


helyen állunk?
-ha igen, az algoritmus megáll,
-ha nem ismételjük a lépéseket a 2.-től
Megj.
1.Valahányszor előre lépünk (k=k+1), a feltöltést az új helyen az első értékkel
kezdjük

2.Valahányszor hátra lépünk (k=k-1), a feltöltést az új helyen a következő, fel


nem használt értékkel folytatjuk

3.A backtracking-et kódfejtésre, lehetőségek generálására használjuk.


A következő, matematikából ismert fogalmakat használjuk:
-permutáció,
-variáció,
-kombináció,
-Descartes szorzat,
-halmazok, alhalmazok.
De amíg a matematikában a megoldások számára, az informatikában a
megoldásokra koncentrálunk.

Permutáció: olyan eljárás, amellyel különféle elemekből, számokból úgy


alkotunk csoportokat, hogy bennük minden egyes elem vagy szám előfordul, de
más és más sorrendben.

Variáció: n elemből k darab elemet használunk, minden elem csakis egyszer,


más és más sorrendben fordul elő.
Pl. {1,2,3,4} 3-ad osztályú variációi: (1,2,3), (1,2,4), (1,3,2), (1,3,4), (3,1,2) stb.

Kombináció: n elemből k darab elemet használunk, minden elem csakis


egyszer, szigorúan növekvő sorrendben fordul elő.
Pl. {1,2,3,4} 3-ad osztályú kombinációi: (1,2,3), (1,2,4), (1,3,4), stb.
Az (1,2,3) és (2,1,3) vagy (3,2,1) ugyanaz a megoldás

A n elem k-ad osztályú variációinak száma nagyobb, mint a kombinációé.


Példa: A 100 m-es gyorsúszás döntőjében 8-an indulnak. Hányféleképpen lehet az
érmeket kiosztani, ha tudjuk, hogy az első három helyezett kap érmet?
8 elemből 3-at használunk. De (2,5,1) nem ugyanaz, mint a (1,2,5)-es megoldás –
variáció

Példa: Hányféleképpen lehet 8 tanuló közül 3-t kiválasztani olyan esetekben,


amikor a sorrend közömbös?
8 elemből 3-at használunk. De (2,5,1) ugyanaz, mint a (1,2,5)-es megoldás –
kombináció
Vége

You might also like