Problémamegoldási stratégiák

Hasonló dokumentumok
Algoritmizálás, adatmodellezés tanítása 7. előadás

Feladatmegoldási stratégiák

Informatikai tehetséggondozás:

Informatikai tehetséggondozás:

Algoritmusok és adatszerkezetek I. 7. előadás

Algoritmizálás, adatmodellezés tanítása 8. előadás

Visszalépéses keresés korlátozással

Informatikai tehetséggondozás:

Visszalépéses maximumkiválasztás

Backtrack-es feladat-variációk

Informatikai tehetséggondozás:

Informatikai tehetséggondozás:

Visszalépéses kiválogatás

Oszd meg és uralkodj stratégia

Adatszerkezetek II. 10. előadás

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Dinamikus programozás II.

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Kombinatorikai algoritmusok

Adatszerkezetek I. 1. előadás

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Visszalépéses keresés

PROGRAMOZÁSI TÉTELEK

2. Visszalépéses keresés

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008

BACKTRACKING Visszalépéses keresés

Rekurzív algoritmusok

Algoritmizálás és adatmodellezés tanítása 2. előadás

Optimalizációs stratégiák 2.

Algoritmizálás, adatmodellezés tanítása 1. előadás

Amortizációs költségelemzés

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Algoritmizálás, adatmodellezés tanítása 1. előadás

Algoritmuselmélet 2. előadás

Összetett programozási tételek

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

ELEMI PROGRAMOZÁSI TÉTELEK

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

A 2011/2012 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Felvételi tematika INFORMATIKA

Programozási tételek. PPT 2007/2008 tavasz.

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Dinamikus programozás vagy Oszd meg, és uralkodj!

2. Visszalépéses stratégia

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Algoritmizálás, adatmodellezés 1. előadás

A 2008/2009 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Branch-and-Bound. 1. Az egészértéketű programozás. a korlátozás és szétválasztás módszere Bevezető Definíció. 11.

Algoritmizálás, adatmodellezés tanítása 2. előadás

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Programozási módszertan. Mohó algoritmusok

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai. felhasználásával)

Korlátozás és szétválasztás elve. ADAGOLO adattípus

Mesterséges Intelligencia MI

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Számítógép és programozás 2

Egyszerű programozási tételek

Programozási tételek. Dr. Iványi Péter

Fibonacci számok. Dinamikus programozással

Adatbázis rendszerek Gy: Algoritmusok C-ben

Optimalizációs stratégiák 1.

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Mohó stratégia. Feladat: Megoldás:

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus

Hatékonyság 1. előadás

Algoritmizálás és adatmodellezés 2. előadás

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

PROGRAMOZÁSMÓDSZERTAN

Struktúra nélküli adatszerkezetek

Multihalmaz, intervallumhalmaz

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

REKURZIÓ. Rekurzív: önmagát ismétlő valami (tevékenység, adatszerkezet stb.) Rekurzív függvény: függvény, amely meghívja saját magát.

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Összetett programozási tételek 2.

Kupacrendezés. Az s sorban lévő elemeket rendezzük a k kupac segítségével! k.empty. not s.isempty. e:=s.out k.insert(e) not k.

A félév során előkerülő témakörök

Algoritmusok és adatszerkezetek I. 4. előadás

Egyszerű programozási tételek

Informatikai tehetséggondozás:

V. Kétszemélyes játékok

Adatszerkezetek II. 1. előadás

Informatikai tehetséggondozás:

Elemi algoritmusok (a programozási tételek után)

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008

A 2015/2016 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Újrahasznosítási logisztika. 7. Gyűjtőrendszerek számítógépes tervezése

Az összetett programozási tételek is egy tőről fakadnak

Diszkrét matematika 2.C szakirány

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2010/2011 1/363

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Programozási Módszertan definíciók, stb.

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

11. Előadás. 11. előadás Bevezetés a lineáris programozásba

Általános algoritmustervezési módszerek

Átírás:

Problémamegoldási stratégiák

Kumulatív összegzés Algoritmusok kumulatív összegzés Adott egy N elemű számsorozat, adjuk meg a sorozat azon [a,b] intervallumát, ahol az elemek összege maximális! Bemenet: N N, X N * Kimenet: a,b H * Ef: n>0 Uf: 1 a b N és p,q 1 p q N : b i a q X i X i p i 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 2/68

Algoritmusok kumulatív összegzés Alapmegoldás: MaxÉrt:=- Ciklus i=1-től N-ig Ciklus j=i-től N-ig s:=összeg(i,j) Ha s>maxért akkor MaxÉrt:=s; a:=i; b:=j Eljárás vége. összeg(i,j): S:=0 Ciklus k=i-től j-ig S:=S+X(k) összeg:=s Függvény vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 3/68

Algoritmusok kumulatív összegzés Kumulatív összegzés: s(0):=0; MaxÉrt:=- Ciklus i=1-től N-ig s(i):=s(i-1)+x(i)... i 0 i N : s i i j 1 x j i 1 i N s i s i 1 x i, s 0 0 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 4/68

Algoritmusok kumulatív összegzés x... i s b s a 1 i a Ciklus i=1-től N-ig Ciklus j=i-től N-ig Ha s(j)-s(i-1)>maxért akkor MaxÉrt:=s(j)-s(i-1); a:=i; b:=j Eljárás vége. b 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 5/68

Algoritmusok kumulatív összegzés A megoldások összehasonlítása Alapmegoldás: 3 egymásba ágyazott ciklus O(N 3 ) Kumulatív összegzés: 2 egymásba ágyazott ciklus O(N 2 ) Meggondolandók ez az elv milyen struktúrákra alkalmazható? ez az elv milyen feladattípusokra alkalmazható? 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 6/68

Oszd meg és uralkodj! Több részfeladatra bontás, amelyek hasonlóan oldhatók meg, lépései: a triviális eset (amikor nincs rekurzív hívás) felosztás (megadjuk a részfeladatokat, amikre a feladat lebontható) uralkodás (rekurzívan megoldjuk az egyes részfeladatokat) összevonás (az egyes részfeladatok megoldásából előállítjuk az eredeti feladat megoldását) 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 7/68

Ezek alapján a következőképpen fogunk gondolkodni: Mi a leállás (triviális eset) feltétele? Hogyan oldható meg ilyenkor a feladat? Mi az általános feladat alakja? Mik a paraméterei? Ebből kapjuk meg a rekurzív eljárásunk specifikációját. Milyen paraméterértékekre kapjuk a konkrét feladatot? Ezekre fogjuk meghívni kezdetben az eljárást! 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 8/68

Ezek alapján a következőképpen fogunk gondolkodni: Hogyan vezethető vissza a feladat hasonló, de egyszerűbb részfeladatokra? Hány részfeladatra vezethető vissza? Melyek ilyenkor az általános feladat részfeladatainak a paraméterei? Ezekkel kell majd meghívni a rekurzív eljárást! Hogyan építhető fel a részfeladatok megoldásaiból az általános feladat megoldása? 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 9/68

Oszd meg és uralkodj Gyorsrendezés (quicksort): felbontás: X 1,..., X k-1 X k X k+1,..., X n szétválogatás ahol i,j (1 i<k; k<j n): X i X j uralkodás: mindkét részt ugyanazzal a módszerrel felbontjuk két részre, rekurzívan összevonás: automatikusan történik a helyben szétválogatás miatt triviális eset: n 1 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 10/68

Oszd meg és uralkodj Gyorsrendezés (quicksort): Quick(E,U): Szétválogatás(E,U,K) Ha E<K-1 akkor Quick(E,K-1) Ha k+1<u akkor Quick(K+1,U) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 11/68

Oszd meg és uralkodj Gyorsrendezés (quicksort): Szétválogatás(E,U,K): Y:=X(1) Ciklus amíg E<U Ciklus amíg E<U és X(U)>Y U:=U-1 Ha E<U akkor X(E):=X(U); E:=E+1 Ciklus amíg E<U és X(E)<Y E:=E+1 Ha E<U akkor X(U):=X(E); U:=U-1 X(E):=Y Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 12/68

Oszd meg és uralkodj Összefésüléses rendezés (mergesort): felbontás: a sorozat két részsorozatra bontása (középen) X 1,..., X k X k+1,..., X n uralkodás: a két részsorozat rendezése (rekurzívan) összevonás: a két rendezett részsorozat összefésülése triviális eset: n 1 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 13/68

Oszd meg és uralkodj Összefésüléses rendezés (mergesort): Rendez(E,U): Ha E<U akkor K:=(E+U)/2 Rendez(E,K); Rendez(K+1,U) Összefésül(E,K,U) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 14/68

Oszd meg és uralkodj Összefésüléses rendezés (mergesort): Összefésül(E,K,U): i:=e; j:=k+1; a:=0; Y:=X Ciklus amíg i K és j U a:=a+1 Ha Y(i) Y(j) akkor X(a):=Y(i); i:=i+1 különben X(a):=Y(j); j:=j+1 Ciklus b=i-től K-ig a:=a+1; X(a):=Y(b) Ciklus b=j-től U-ig a:=a+1; X(a):=Y(b) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 15/68

Oszd meg és uralkodj i-edik legkisebb kiválasztása: felbontás: X 1,..., X k-1 X k X k+1,..., X n szétválogatás (ahol i,j (1 i k; k j n): X i X j ) uralkodás: i<k esetén az első, i>k esetén a második részben keresünk tovább, rekurzívan összevonás: automatikusan történik a helyben szétválogatás miatt triviális eset: i=k 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 16/68

Oszd meg és uralkodj i-edik legkisebb kiválasztása: Kiválasztás(E,U,i,Y): Szétválogatás(E,U,K) Ha i=k akkor Y:=X(K) különben ha i<k akkor Kiválasztás(E,K-1,i,Y) különben Kiválasztás(K+1,U,i-K,Y) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 17/68

Hanoi tornyai: Feladatmegoldási stratégiák Oszd meg és uralkodj Adott 3 rudacska. Az elsőn egyre csökkenő sugarú korongok vannak. Az a feladat, hogy tegyük át a harmadik rudacskára a korongokat egyenként úgy, hogy az átpakolás közben és természetesen a végén is minden egyes korongon csak nála kisebb lehet. Az átpakoláshoz lehet segítségül felhasználni a középső rudacskát. 2017.02.24. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 18/68 18

Hanoi tornyai: Oszd meg és uralkodj 2017.02.24. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 19/68 19

Hanoi tornyai: 2017.02.24. Feladatmegoldási stratégiák Oszd meg és uralkodj Hanoi(n,A,B,C): Ha n>0 akkor Hanoi(n-1,A,C,B) Ki: N,A,B Hanoi(n-1,C,B,A) Elágazás vége Eljárás vége. Hanoi(n,A,B,C): Ha n>1 akkor Hanoi(n-1,A,C,B) Ki: n,a,b Hanoi(n-1,C,B,A) különben Ki: n,a,b Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 20/68 20

Logaritmikus keresés: Oszd meg és uralkodj N elemű sorozatban keresés visszavezetése N/2 elemű sorozatban keresésre. Logker(X,T,E,U,Van,K): Ha E>U akkor Van:=hamis különben K:=(E+U)/2 Ha X=T(K) akkor Van:=igaz különben ha X<T(K) akkor Logker(X,T,E,U-1,Van,K) különben Logker(X,T,E+1,U,Van,K) Eljárás vége 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 21/68

Oszd meg és uralkodj Legnagyobb üres téglalap: Szétbontás: Egy téglalapban levő N ponthoz a legnagyobb résztéglalap keresése, amely egyetlen pontot sem tartalmaz egy meg-vizsgálandó téglalapot minden belső pont négy megvizsgálandó részre vág (ezek átfedők). Uralkodás: Ezekre rekurzívan alkalmazható az eljárás. Összevonás: a négy eredmény maximumát kell megadni! 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 22/68

Oszd meg és uralkodj Legnagyobb üres téglalap 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 23/68

Oszd meg és uralkodj Legnagyobb üres téglalap: Legnagyobb(P,T,L,i,n): Ha i>n akkor L:=T különben t1:=t; t1.jax:=p(i).x-1; {balra} Legnagyobb(P,t1,L1,i+1,n) t2:=t; t2.bfy:=p(i).y+1 {alul} Legnagyobb(P,t2,L2,i+1,n) t3:=t; t3.bfx:=p(i).x+1; {jobbra} Legnagyobb(P,t3,L3,i+1,n) t4:=t; t4.jay:=p(i).y+1 {felül} Legnagyobb(P,t4,L4,i+1,n) 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 24/68

Oszd meg és uralkodj Legnagyobb üres téglalap: L:=L1 Ha terület(l)<terület(l2) akkor L:=L2 Ha terület(l)<terület(l3) akkor L:=L3 Ha terület(l)<terület(l4) akkor L:=L4 Elágazás vége Eljárás vége. Az eljárás javítható, hatékonyabbá tehető. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 25/68

Visszalépéses keresés Visszalépéses keresés (backtrack) A visszalépéses keresés lényege a feladat megoldásának előállítása rendszeres próbálgatással. Adott N sorozat, amelyek rendre M(1), M(2),... M(N) elemszámúak. Ki kell választani mindegyikből egy-egy elemet úgy, hogy az egyes sorozatokból való választások másokat befolyásolnak. Másképp fogalmazva: egy adott tulajdonsággal rendelkező szám N-est kell megadni úgy, hogy ne kelljen az összes lehetőséget végignézni! 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 26/68

Visszalépéses keresés N vezér elhelyezése egy NxN-es sakktáblán Helyezzünk el egy NxN-es sakktáblán N vezért úgy, hogy ne üssék egymást! Egy lehetséges megoldás N=5-re és N=4-re: V V V V V V V V V 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 27/68

Visszalépéses keresés Munkásfelvétel: N állás N jelentkező Egy vállalkozás N különböző állásra keres munkásokat. Pontosan N jelentkező érkezett, ahol minden jelentkező megmondta, hogy mely munkákhoz ért. A vállalkozás vezetője azt szeretné, ha az összes jelentkezőt fel tudná venni és minden munkát elvégeztetni. Darab Állások: 1. 2. 3. 1. jelentkező: 2 1 4 2. jelentkező: 1 2 3. jelentkező: 2 1 2 4. jelentkező: 1 3 5. jelentkező: 3 1 3 5 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 28/68

Visszalépéses keresés A visszalépéses keresés megoldási elve E feladatok közös jellemzője, hogy eredményük egy sorozat. E sorozat minden egyes tagját valamilyen sorozatból kell kikeresni (vezért egy oszlop valamely helyére, egy munkásnak a vállalt munkák közül valamelyiket), de az egyes keresések összefüggenek egymással (vezért nem lehet oda tenni, ahol egy korábban letett vezér ütné; egy munkát nem lehet két munkásnak adni). 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 29/68

Visszalépéses keresés A visszalépéses keresés olyan esetekben használható, amikor a keresési tér fastruktúraként képzelhető el, amiben a gyökérből kiindulva egy csúcsot keresünk. Az algoritmus lényege, hogy a kezdőpontból kiindulva megtesz egy utat a feladatot részproblémákra bontva, és ha valahol az derül ki, hogy már nem juthat el a célig, akkor visszalép egy korábbi döntési ponthoz, és ott más utat más részproblémát választ. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 30/68

Visszalépéses keresés Először megpróbálunk az első sorozatból kiválasztani egy elemet, ezután a következőből,... Ha nincs jó választás, akkor visszalépünk az előző sorozathoz, s megpróbálunk abból egy másik elemet választani. Visszalépésnél törölni kell a választást abból a sorozatból, amelyikből visszalépünk. Az eljárás akkor ér véget, ha minden sorozatból sikerült választani, vagy pedig a visszalépések sokasága után már az első sorozatból sem lehet újabb elemet választani (ekkor a feladatnak nincs megoldása). 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 31/68

Visszalépéses keresés Visszalépéses keresés algoritmus: Keresés(N,Van,Y): i:=1 Ciklus amíg i 1 és i N {lehet még és nincs még kész} Jóesetkeresés(i,Van,j) Ha Van akkor Y(i):=j; i:=i+1 {előrelépés} különben Y(i):=0; i:=i-1 {visszalépés} Van:=(i>N) Eljárás vége. A megoldás legfelső szintjén keressünk az i. sorozatból megfelelő elemet! Ha ez sikerült, akkor lépjünk tovább az i+1. sorozatra, különben lépjünk vissza az i-1.-re, s keressünk abban újabb elemet! 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 32/68

Visszalépéses keresés Visszalépéses keresés algoritmus: Jóesetkeresés(i,Van,j): j:=y(i)+1 Ciklus amíg j M(i) és (rossz(i,j) vagy tilos(j)) j:=j+1 Van:=(j M(i)) Eljárás vége. Megjegyzés: az i-edik lépésben a j-edik döntési út nem választható, ha az előzőek miatt rossz, vagy ha önmagában rossz. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 33/68

Visszalépéses keresés Visszalépéses keresés algoritmus: rossz(i,j): {1. változat} k:=1 Ciklus amíg k<i és szabad(i,j,k,y(k)) k:=k+1 rossz:=(k<i) Eljárás vége. Megjegyzés: Rossz egy választás, ha valamelyik korábbi választás miatt nem szabad eldöntés. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 34/68

Visszalépéses keresés Visszalépéses keresés algoritmus: rossz(i,j): {2. változat} s:=f0 Ciklus k=1-től i-1-ig s:=f(s,k,y(k)) rossz:=nem szabad(s,i,j) Eljárás vége. Megjegyzés: Rossz egy választás, ha a korábbiak összessége miatt nem szabad sorozatszámítás, megszámolás, 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 35/68

Visszalépéses keresés Visszalépéses keresés algoritmus: rossz(i,j): {3. változat} rossz:=i>1 és nem szabad(i,j,i-1,y(i-1)) Eljárás vége. Megjegyzés: Rossz egy választás, ha az előző választás miatt nem szabad feltétel vizsgálat. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 36/68

Visszalépéses keresés Visszalépéses kiválogatás rekurzív algoritmus: Visszalépéses kiválogatás(n,db,y): Db:=0; X:=(0,,0); Backtrack(1,N,X,Db,Y) Eljárás vége. Backtrack(i,N,X,Db,Y): Ha i=n+1 akkor Db:=Db+1; Y(Db):=X különben Ciklus j=1-től N-ig Ha ft(i,j) és nem Rossz(i,j) akkor X(i):=j Backtrack(i+1,N,X,Db,Y) Elágazás vége Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 37/68

Visszalépéses keresés Visszalépéses maximumkeresés rekurzív algoritmus: Visszalépéses maximumkeresés(n,van,y): X:=(0,,0); Y:=X; Backtrack(1,N,X,Y) Van:=Y (0,,0) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 38/68

Visszalépéses keresés Visszalépéses maximumkeresés rekurzív algoritmus: Backtrack(i,N,X,Y): Ha i=n+1 akkor ha nagyobb?(x,y) akkor Y:=X különben Ciklus j=1-től N-ig Ha ft(i,j) és nem Rossz(i,j) akkor X(i):=j Backtrack(i+1,N,X,Y) Elágazás vége Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 39/68

Visszalépéses keresés Visszalépéses keresés: 8 vezér a sakktáblán Keresés(Van,Y): i:=1 Ciklus amíg i 1 és i 8 {lehet még és nincs még kész} Jóesetkeresés(i,Van,j) Ha Van akkor Y(i):=j; i:=i+1 {előrelépés} különben Y(i):=0; i:=i-1 {visszalépés} Van:=(i>8) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 40/68

Visszalépéses keresés Visszalépéses keresés algoritmus: Jóesetkeresés(i,Van,j): j:=y(i)+1 Ciklus amíg j 8 és rossz(i,j) j:=j+1 Van:=(j 8) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 41/68

Visszalépéses keresés Visszalépéses keresés algoritmus: rossz(i,j): k:=1 Ciklus amíg k<i és (j Y(k) vagy i-k abs(j-y(k)) k:=k+1 rossz:=(k<i) Eljárás vége. Megjegyzés: Rossz egy választás, ha valamelyik korábbi vezér üti. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 42/68

Visszalépéses keresés Visszalépéses keresés: N munka N munkás Keresés(N,Van,Y): i:=1 Ciklus amíg i 1 és i N {lehet még és nincs még kész} Jóesetkeresés(i,Van,j) Ha Van akkor Y(i):=j; i:=i+1 {előrelépés} különben Y(i):=0; i:=i-1 {visszalépés} Van:=(i>N) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 43/68

Visszalépéses keresés Visszalépéses keresés algoritmus: Jóesetkeresés(i,Van,j): j:=y(i)+1 Ciklus amíg j N és (rossz(i,j) vagy nem E(i,j)) j:=j+1 Van:=(j N) Eljárás vége. Nem adható neki a munka, ha nem ért hozzá. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 44/68

Visszalépéses keresés Visszalépéses keresés algoritmus: rossz(i,j): k:=1 Ciklus amíg k<i és j Y(k) k:=k+1 rossz:=(k<i) Eljárás vége. Megjegyzés: Rossz egy választás, ha azt a munkát valamelyik korábbi munkás megkapta. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 45/68

Visszalépéses keresés Visszalépéses keresés: N üzlet M pékség Keresés(N,Van,Y): i:=1 Ciklus amíg i 1 és i N {lehet még és nincs még kész} Jóesetkeresés(i,Van,j) Ha Van akkor Y(i):=j; i:=i+1 {előrelépés} különben Y(i):=0; i:=i-1 {visszalépés} Van:=(i>N) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 46/68

Visszalépéses keresés Visszalépéses keresés algoritmus: Jóesetkeresés(i,Van,j): j:=y(i)+1 Ciklus amíg j M és (rossz(i,j) vagy nem K(i,j)) j:=j+1 Van:=(j M) Eljárás vége. Nem szállíthat az i. üzletbe a j. pékség, ha nincsenek kapcsolatban. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 47/68

Visszalépéses keresés Visszalépéses keresés algoritmus: rossz(i,j): s:=van(j) Ciklus k=1-től i-1-ig Ha Y(k)=j akkor s:=s-igény(k) rossz:=s<igény(i) Eljárás vége. Megjegyzés: Rossz egy választás, ha abban a pékségben nem maradt az i. üzlet által igényelt menniység. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 48/68

Visszalépéses maximumkeresés Példa: (1. változat) Egy vállalkozás N különböző állásra keres munkásokat. Pontosan N jelentkező érkezett, ahol minden jelentkező megmondta, hogy mely munkákhoz ért, illetve amihez ért, arra mennyi fizetést kérne. Minden munkát el kell végeztetni valakivel, mindenkinek munkát kell adni, de a legolcsóbban! Állások: 1. 2. 3. 4. 5. 1. jelentkező: 100 0 0 100 0 2. jelentkező: 0 200 0 0 0 3. jelentkező: 200 100 0 0 0 4. jelentkező: 0 0 200 0 400 5. jelentkező: 500 0 400 0 200 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 49/68

Visszalépéses maximumkeresés Ha egy megoldás elkészül, akkor a költségét így számíthatjuk ki: költség(x): S:=0 Ciklus i=1-től N-ig S:=S+F(i,X(i)) Függvény vége. Kezdetben olyan fiktív megoldásból kell kiindulni, aminél minden valódi megoldás jobb. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 50/68

Visszalépéses maximumkeresés Legjobb állás(n,i): Ha i>n akkor Ha költség(x)<költség(y) akkor Y:=X különben Ciklus j=1-től N-ig Ha nem volt(i,j) és F(i,j)>0 akkor X(i):=j; Legjobb állás(n,i+1) Elágazás vége Eljárás vége. Ebben a megoldásban feleslegesen sokszor hívjuk a Költség függvényt. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 51/68

Visszalépéses maximumkeresés Legjobb állás(n,i): Ha i>n akkor Ykölt:=költség(Y) Ha maxkölt<ykölt akkor Y:=X; maxkölt:=ykölt különben Ciklus j=1-től N-ig Ha nem volt(i,j) és F(i,j)>0 akkor X(i):=j; Legjobb állás(n,i+1) Elágazás vége Eljárás vége. Itt feleslegesen nem hívjuk a Költség függvényt, jó maxkölt kezdőérték kell! 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 52/68

Visszalépéses maximumkeresés Már csak egy apróságra gondolhatunk: ha van egy megoldásunk és a most készülő megoldásról látszik, hogy már biztosan rosszabb lesz többe fog kerülni, akkor azt már nem érdemes tovább vinni. Legyen az eljárás paramétere az eddigi költség, s az eljárást csak akkor folytassuk, ha még nem érjük el a korábban kiszámolt maximális költséget! Emiatt nem a megoldások elkészültekor kell számolni költséget, hanem menet közben, folyamatosan. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 53/68

Visszalépéses maximumkeresés Legjobb állás(n,i,költ): Ha i>n akkor Ha költ<maxkölt akkor Y:=X; maxkölt:=költ különben Ciklus j=1-től N-ig Ha nem volt(i,j) és F(i,j)>0 és költ+f(i,j)<maxkölt akkor X(i):=j Legjobb állás(n,i+1,költ+f(i,j)) Elágazás vége Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 54/68

Visszalépéses maximumkeresés Példa: (2. változat) Egy vállalkozás N különböző állásra keres munkásokat. Pontosan M jelentkező érkezett (M<N), ahol minden jelentkező megmondta, hogy mely munkákhoz ért, illetve amihez ért, arra mennyi fizetést kérne. Állások: 1. jelentkező: 1. 100 2. 0 3. 0 4. 100 5. 0 Mindenkinek munkát kell adni (csak egyet mindenkinek), de a legolcsóbban! 2. jelentkező: 0 200 0 0 0 3. jelentkező: 200 100 0 0 0 4. jelentkező: 0 0 200 0 400 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 55/68

Visszalépéses maximumkeresés Legjobb állás(n,m,i,költ): Ha i>m akkor Ha költ<maxkölt akkor Y:=X; maxkölt:=költ különben Ciklus j=1-től N-ig Ha nem volt(i,j) és F(i,j)>0 és költ+f(i,j)<maxkölt akkor X(i):=j Legjobb állás(n,m,i+1,költ+f(i,j)) Elágazás vége Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 56/68

Visszalépéses maximumkeresés Példa: (3. változat) Egy vállalkozás N különböző állásra keres munkásokat. Pontosan M jelentkező érkezett (M>N), ahol minden jelentkező megmondta, hogy mely munkákhoz ért, illetve amihez ért, arra mennyi fizetést kérne. Mindenkinek munkát el kell végezni, egy-egy embernek, de a legolcsóbban! Állások: 1. 2. 3. 4. 1. jelentkező: 100 0 0 100 2. jelentkező: 0 200 0 0 3. jelentkező: 200 100 0 0 4. jelentkező: 0 0 200 0 5. jelentkező: 500 0 400 0 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 57/68

Visszalépéses maximumkeresés Legjobb állás(n,m,i,költ): Ha i>n akkor Ha költ<maxkölt akkor Y:=X; maxkölt:=költ különben Ciklus j=1-től M-ig Ha nem volt(j,i) és F(j,i)>0 és költ+f(j,i)<maxkölt akkor X(i):=j Legjobb állás(n,m,i+1,költ+f(j,i)) Elágazás vége Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 58/68

Visszalépéses keresés További visszalépéses keresés feladatok: Labirintusban útkeresés Permutációk, kombinációk előállítása Térképszínezés Pénzfelbontás adott címletekre 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 59/68

Visszalépéses keresés Visszalépéses keresés feladatok: Úthossz-korlát: Fává egyenesítünk, végtelen fát állítunk elő. Nem engedjük, hogy az aktuális út hossza meghaladja az úthossz-korlátot. Ha túl rövidre választjuk az úthossz-korlátot (túl alacsonyan vágjuk el a gráfot) akkor nem találunk megoldást. Ha a start csúcsban áll elő a visszalépési feltétel, akkor: nincs megoldás túl rövidre választottuk az úthosszkorlátot 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 60/68

Visszalépéses keresés Visszalépéses keresés feladatok: Kör kiküszöbölése lesz egy újabb visszalépési feltétel: az aktuális csúcs szerepelt-e már az aktuális úton ha igen: rögtön visszalépés (így nem zárjuk be a kört). 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 61/68

A visszalépéses stratégia Visszalépéses keresés véges fákban mindig terminál (véges fákban teljes); végtelen gráfban úthossz-korláttal terminál (kör kizárása: az aktuális út csúcsait nem engedjük ismételni); egy zsákutcát többször is bejár, ha több út vezet hozzá. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 62/68

Elágazás és korlátozás A backtrack alkalmas-e optimális megoldás keresésére? Van költség, és a legkisebb költségű megoldást szeretnénk előállítani. Van egy induló költségkorlát (felső becslés). Ennél a költségkorlátnál nem költségesebb megoldást keresünk. Drágább részmegoldás esetén is visszalépünk. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 63/68

Elágazás és korlátozás Az aktuális pontot tetszőlegesen választhatjuk az aktív pontok közül. A lényeg, hogy a választott aktuális pontból elérhető összes pontot generáljuk, és ha lehetséges megoldás, akkor betesszük az aktív pontok halmazába. Tehát az algoritmus egy, az aktív pontokat tartalmazó adagolót használ az aktív pontok tárolására. A visszalépéses stratégia esetén elég volt egy pontot, az aktuális pontot tárolni, mert a következő aktív pont mindig ennek fia, testvére, vagy apja. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 64/68

Elágazás és korlátozás Adott a C(X) valós értékű célfüggvény, és olyan X megoldást keresünk, amelyre a célfüggvény C(X) értéke minimális. A megoldáskezdeményekre meg tudunk adni olyan AK(X) alsó korlát függvényt, amelyekre teljesül az alábbi egyenlőtlenség: Az Y megoldás bármely X részmegoldására: AK(X) C(Y) Ekkor az adagoló lehet az AK szerinti minimumos prioritási sor, tehát az aktív pontok közül mindig a legkisebb alsó korlátú pontot választjuk aktuálisnak. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 65/68

Elágazás és korlátozás Korlátozás(F): Minért:=+ ; Betesz(A,F) Ciklus amíg nem üres?(a) Kivesz(A,F) Ciklus p=f-ből kapható megoldáslépések Ha Megoldás(p) akkor Ha C(p)<Minért akkor Minért:=C(p) Min:=p különben ha AK(p)<Minért akkor Betesz(A,p) Eljárás vége. 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 66/68

Elágazás és korlátozás Ha a megoldáskezdeményekre meg tudunk adni felső korlátot is, akkor az adagoló lehet a felső korlát szerinti minimumos prioritási sor. Felső korlát olyan FK(X) függvény, amelyre teljesül, hogy minden Y megoldás minden X részmegoldására: C(Y) FK(X). Azaz egy részmegoldásnál járva tudjuk, hogy az ebből kiinduló megoldásoknak mi a felső korlátja. Mindig a legkisebb felső korlátú ágat válasszuk! 2017.02.24. 8:53 Zsakó László: Problémamegoldási stratégiák 67/68

Problémamegoldási stratégiák