Programozási tételek specifikációja

Hasonló dokumentumok
PROGRAMOZÁSMÓDSZERTAN

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.

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

ELEMI PROGRAMOZÁSI TÉTELEK

Egyszerű programozási tételek

Bevezetés az informatikába

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

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

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

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

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

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

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

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

PROGRAMOZÁSMÓDSZERTAN

Térinformatikai algoritmusok Elemi algoritmusok

Térinformatikai algoritmusok Elemi algoritmusok

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

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

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

Algoritmizálás, adatmodellezés 1. 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.

Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

17. előadás: Vektorok a térben

Egyszerű programozási tételek

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

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

Funkcionálanalízis. n=1. n=1. x n y n. n=1

Adatszerkezetek II. 10. előadás

Összetett programozási tételek

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

RE 1. Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata.

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

Struktúra nélküli adatszerkezetek

Programozási segédlet

PROGRAMOZÁSI TÉTELEK

2014. szeptember 24. és 26. Dr. Vincze Szilvia

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

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

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

Egészrészes feladatok

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

Programozási alapismeretek 3. előadás

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 13.

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

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

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

Országos Középiskolai Tanulmányi Verseny 2009/2010 Matematika I. kategória (SZAKKÖZÉPISKOLA) 2. forduló feladatainak megoldása

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.

Logika es sz am ıt aselm elet I. r esz Logika 1/36

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

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

Halmaz típus Értékhalmaz:

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

Kombinatorikai algoritmusok

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

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

HHF0CX. k darab halmaz sorbarendezésének a lehetősége k! Így adódik az alábbi képlet:

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Boros Zoltán február

Programozási módszertan. Mohó algoritmusok

Elsőrendű logika szintaktikája és szemantikája. Logika (3. gyakorlat) 0-adrendű szemantika 2009/10 II. félév 1 / 1

3. előadás. Programozás-elmélet. A változó fogalma Kiterjesztések A feladat kiterjesztése A program kiterjesztése Kiterjesztési tételek Példa

DISZKRÉT MATEMATIKA RENDEZETT HALMAZOKKAL KAPCSOLATOS PÉLDÁK. Rendezett halmaz. (a, b) R a R b 1. Reflexív 2. Antiszimmetrikus 3.

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

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, adatmodellezés tanítása 6. előadás

Informatikai tehetséggondozás:

Analízis I. Vizsgatételsor

Sorozatok, sorok, függvények határértéke és folytonossága Leindler Schipp - Analízis I. könyve + jegyzetek, kidolgozások alapján

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

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

BOOLE ALGEBRA Logika: A konjunkció és diszjunkció tulajdonságai

Számláló rendezés. Példa

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

Bevezetés a programozásba. 5. Előadás: Tömbök

KOVÁCS BÉLA, MATEMATIKA I.

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei

Informatikai tehetséggondozás:

Adatszerkezetek 1. Dr. Iványi Péter

Multihalmaz, intervallumhalmaz

GPK M1 (BME) Interpoláció / 16

KOVÁCS BÉLA, MATEMATIKA I.

Beadható feladatok december Add meg az alábbi probléma állapottér-reprezentációját!

Programozási alapismeretek 11. előadás

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Számjegyes vagy radix rendezés

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Logika es sz am ıt aselm elet I. r esz Logika Negyedik el oad as 1/26

Nagy Gábor compalg.inf.elte.hu/ nagy

Formális nyelvek - 9.

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

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

Algoritmusok helyességének bizonyítása. A Floyd-módszer

1. Jelölje meg az összes igaz állítást a következők közül!

Programkonstrukciók A programkonstrukciók programfüggvényei Levezetési szabályok. 6. előadás. Programozás-elmélet. Programozás-elmélet 6.

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

Átírás:

Programozási tételek specifikációja Alapvető fogalmak és jelölések: H halmaz tetszőleges (véges) halmaz a szokásos halmaz műveletekkel és konstanosokkal (,,,,,,\,, Számosság) logikai értékek halmaza: {Igaz,Hamis} a szokásos műveletekkel (,,,, ), kvantorokkal (, ) és indivíduum változokkal, halmazokkal természetes számok halmaza {0,,...} a szokásos műveletekkel (+,-, *,Div,Mod) egész számok halmaza {.., -, 0,,...} a szokásos műveletekkel (+,-, *,Div,Mod) valós számok halmaza a szokásos műveletekkel (+,-,*,/,^) karakterek halmaza {,,, A,, z, } szövegek halmaza H-Sorozat H-beli elemek -esek ( ), amelyen alapműveletként értelmezzük az i. elem (i {..}) kiválasztását: si:= az S sorozat i. eleme 2, valamint az eleme relációt: x S, ha i: x=s i, és a sorozathossz függvényt, ekkor Hossz(S)= H halmaz H-beli -elemű sorozatok halmaza H * halmaz H-beli véges sorozatok halmaza, azaz H * = (i=0.. ) H i () H * üres sorozat S=() Hossz(S) [x..y] index-intervallum [x..y]:={x,x+,...,y-,y} x,y I[x..y] index-sorozat I[x..y]:=(x,x+,...,y-,y) y-x, ha y x I[x..y]:=(), egyébként F(H,S) függvényhalmaz F(H,S):={ f : f:h S } H-ból S-be képez Rendezés( H) H F(HxH, ) rendezési reláció (infix jelölésű bináris függvény) ha lehet: H helyett H halmaz RendezettHalmaz (H) S H * sorozat RendezettSorozat (S) S H * sorozat HalmazFölsorolás(S) X&Y konkatenációja X és Y sorozatoknak X Y X sorozat részsorozata Y sorozatnak ha a H: a a (reflexív), a,b,c H: a b és b c a c (tranzitív), a,b H: a b és b a a=b (antiszimmetrikus) a,b H: a b vagy b a (teljes) ha h,j H: h j vagy h j (ha H véges maximális, minimális eleme) ha RendezettHalmaz (H) és i [..): s i s i+ ha i,j [..]: i j s i s j X&Y:=(x,...,x,y,...,y M), ahol =Hossz(X) és M=Hossz(Y) x X: y Y: x=y és i,j [..Hossz(X)]: i<j: x i,x j X k,l [..Hossz(Y)]: k<l: (x i=y k és x j=y l) Pl. i H: T(i) logikai kifejezésben az i individuumváltozó, a H az individuumhalmaz. A kifejezést így értjük: létezik olyan H-beli i elem, amelyre teljesül a T predikátum. 2 Vegyük észre a jelölési finomságot : a sorozatot nagybetűvel, de annak valamely elemét kisbetűvel fogjuk jelölni.

R\r sorozat r H, R H : HalmazFölsorolás(R) P(R) az R H Permutációhalmaza X,Y a Z felbontása (X,Y,Z sorozatok) T i:h i [..K] H-partícionálása ha r R R\r H - és R=R &(r)&r 2 R\r=R &R 2 ha r R R\r R P(R):={S H : = S=R, > S=s&S és s R és S P(R\s)} ha Z=X&Y x H: (i=..k) T i(x)=igaz és (T i(x) T j(x)=hamis (i j)) Definíció: Az F:H * S * feladat elemenként feldolgozható, x H * x,x x-felbontásra igaz, hogy F(x)&F(x)=F(x). Lemma: Ha az F:H * S * feladat elemenként feldolgozható, akkor f:h S függvény, hogy f(h i)=s i i [..]. 2

Tételek szerkezete: bemenet, kimenet, előfeltétel, utófeltétel A függvényként (is) szerepeltetés célja, hogy már ránézésre is kitünjön, mely sémák (absztrakt algoritmusok) melyekkel kombinálódhatnak. Ez később nagy segítségünkre lesz a bonyolultabb feladatok megoldásánál. Megállapodások: A tételeket mint függvényeket is megadjuk (a fejsorban, az ún. szignatúrában), amelynek argumentuma tartalmazza azokat a kellékeket, amelyek a szükséges bemenetei, ill. az értékét, amely halmazba képez. A tétel-függvény paramétereinek sorrendje megegyezik a Be -részben szereplő adatok sorrendjével. A kimenet halmaza megegyezik a Ki -részben felsorolt adatok értékhalmazának direktszorzatával. A sorozatokat gyakorta két adattal írjuk le: a hosszával és az elemeket tartalmazó adatszerkezettel. E jelöléssel hívjuk föl a figyelmet arra, hogy pusztán ilyen szintaktikai természetű dolog (mint a paraméterek, ill. eredményhalmazok száma és mibenléte) is segítségünkre lehet a tételek összeépítésénél. A tétel-függvény szignatúrájának és a Be + Ki -résznek a kapcsolatát segíti értelmezni a 0.-ként említett tétel színezése. Szívesebben adunk meg egy sorozatot H * -beliként (H helyett), mivel a specifikációban legkevésbé így köti meg a kezünket (nem utal a leírás tömbre vagy más fixhosszúságú szerkezetre). Ekkor viszont a sorozat és hossza mint rendszerint megjelenő bemeneti információ kapcsolat nélkül marad; ezt a hiányzó információt kell beilleszteni az előfeltételbe, felhasználva a sorozatokra előredefiniált Hossz függvényt. A tétel-függvényben éppen ezen megfontolásból nem tüntetjük föl a sorozatok elemszámát szimbolizáló paramétereket. 0. Másolás(H *,F(H,S)):S * Be:, X H *, f:h S Ki: Y S * Ef: Hossz(X)= a feladat elemenként feldolgozható az f függvénnyel Hossz(Y)= i [..]: y i=f(x i). Sorozatszámítás(H *,F(H *,H)):H lehetne még Sorozatszámítás(H *,F(H *,H 2)):H 2 Be: Ki: Ef:, X H *, F:H * H S H Hossz(X)= ( f:h H H f 0 H): ( F((x,..,x ))=f(f(x,..,x -),x ) F(())=f 0 h H:f(f 0,h)=h ) S=F(X). Sorozatszámítás(H *,H,F(H H,H)):H lehetne még Sorozatszámítás(H *,S,F(H 2 H,S)):H 2 Be: Ki: Ef: Def:, X H *, f:h H H, f 0 H S H Hossz(X)= h H:f(f 0,h)=h S=F(X) F:H * H F((x,..,x ))=f(f(x,..,x -),x )) F(())=f 0 ) 2. Eldöntés(H *,F(H,L)):L Ki: VA L Ef: Hossz(X)= VA i [..] : T(x i) 3. Kiválasztás(H *,F(H,L)): Ki: SORSZ Ef: Hossz(X)= i [..]: T(x i) SORSZ [..] T(x SORSZ) 3

4. (Lineáris) keresés(h *,F(H,L)):L L Ki: VA L, SORSZ Ef: Hossz(X)= VA i [..] : T(x i) VA SORSZ [..] és T(x SORSZ) 5. Megszámolás(H *,F(H,L)): Ki: DB Ef: Hossz(X)= DB = i T ( x i ) 6a. Maximum-kiválasztás(H *,F(H H,L)): (index) Be:, X H *, F(H H,L) Ki: MAXI Ef: Hossz(X)= Rendezés( RendezettHalmaz (H) MAXI [..] i [..]: x MAXI x i 6b. Maximum-kiválasztás(H *,F(H H,L)):H Be:, X H *, F(H H,L) Ki: MAX H Ef: Hossz(X)= Rendezés( RendezettHalmaz (H) MAX X i [..]: MAX x i 7a. Kiválogatás(H *,F(H,L)): * (index-sorozat) Ki: DB, Y * Ef: Hossz(X)= Uf : Uf 2: DB= i T ( x DB= i T ( x i ) i ) Y [..] DB ( T(x yi ) i [..DB] ) HalmazFölsorolás(Y) Y [..] DB ( T(x yi ) i [..DB] ) Y 7b. Kiválogatás(H *,F(H,L)):H * (értéksorozat) Ki: DB, Y H * Ef: Hossz(X)= DB= i T ( x i ) Y H DB Y X T(y i) i [..DB] 8. BelsőRendezés(H *,F(H H,L)):H * Be:, X H *, F(H H,L) Ki: X' H * (X új értéke) Ef: Hossz(X)= Rendezés( X' P(X) RendezettSorozat (X') 4

9. IndexesRendezés(H *,F(H H,L)): * (index-sorozat) Be:, X H *, F(H H,L) Ki: F * (felsoroló vektor) Ef: Hossz(X)= Rendezés( X=X' F P((,2,,)) RendezettSorozat (X F) (azaz i,j [..]: (i<j) x fi x fj f i f j) második változat: Be: Ki: Ef:, X H *, F(H H,L) S * (sorrend-vektor) Hossz(X)= Rendezés( X=X' S P((,2,,)) i,j [..]: (i<j) x i x j s i s j 0. Szétválogatás(H *,F i(h,l) (i=..k)):(h * ) K Be: Ki: Ef:, X H *, K, T i:h L (i=..k) DB i, Y i H * (i=..k) Hossz(X)= K 2 T i (i=..k) H partícionálása DB i= Y i H DB i Y i X j [..DB i]: T i(y ij ) (i=..k) j Ti ( x j ) Megjegyzések:. Alapvariációja : indexsorozatokkal történő szétválogatás Szétválogatás(H *,F i(h,l) (i=..k)):( * ) K 2. Kétfelé szétválogatás: (T :=T, T 2:= nem-t) Szétválogatás(H *,F(H,L)):( H * ) 2 a. Külön, két outputsorozatba b. Helyben: elválasztó indextől balra a T-, jobbra a nem-t-tulajdonságúakat. Metszet(H *,H * ):H * Be:, X H *, M, Y H * Ki: DB, Z H * [pontosabban Z H DB, DB min(,m)] 3 Ef: Hossz(X)= HalmazFölsorolás(X) Hossz(Y)=M HalmazFölsorolás(Y) DB = Z H DB HalmazFölsorolás(Z) i xi Y ( z i X z i Y i [..DB] ) 2. Egyesítés(H *,H * ):H * Be:, X H *, M, Y H * Ki: DB, Z H * [pontosabban Z H DB, DB +M] Ef: Hossz(X)= HalmazFölsorolás(X) Hossz(Y)=M HalmazFölsorolás(Y) M DB = + Z H DB HalmazFölsorolás(Z) j y X j ( z i X z i Y i [..DB] ) 3 Ez a megjegyzés a deklaráció szempontjából lehet fontos. 5

3. Összefuttatás(H *,H *,F(H H,L)):H * Be: Ki: Ef:, X H *, M, Y H *, F(HxH,L) DB, Z H * [pontosabban Z H DB, DB +M] Rendezés( Hossz(X)= HalmazFölsorolás(X) Hossz(Y)=M HalmazFölsorolás(Y) RendezettSorozat (X) RendezettSorozat (Y) M DB = + Z H DB HalmazFölsorolás(Z) RendezettSorozat (Z) j y X j ( z i X z i Y i [..DB] ) Keresések Új fogalmak: L H * lehetségesek sorozata az eredeti X egy alkalmasan választott rész-sorozata: L X. : H * hossz sorozat hossza (elemszáma) : H * H * szűkítés L H * : (L)=L L > L : H * elemkiválasztás L H * : (L) [..L] Ezen fogalmakkal az általános keresés tétel megfogalmazása: L:=X Ciklus amíg L >0 és nem T(X( (L))) L:= (L) Van:= L >0 Ha Van akkor Sorsz:= (L) ézzük a lineáris keresés tétel újrafogalmazását! L:={x i: i [e..]} (elejétől végig, e: ahol tartunk=..+) L azonosítható, sőt helyettesíthető is az első elemének indexével: L:=L(e) e (L(e)):=x e (első elem) (L(e)):= {x i i [e+..]} {x i i [e..]} L(e) :=-e+ L:=X [i:=,.-nél kezdődik a... sorozat] Ciklus amíg L >0 [i, azaz még van hol keresni] és nem T(X( (L))) [T(X(i)), azaz az i. olyan-e] L:= (L( (L))) [i:=i+, a következőnél kezdődik a... sorozat] Van:= L >0 [i, azaz lenne még hol keresni, de megvan] Ha Van akkor SORSZ:= (L).sorsz [SORSZ:=e] A közismert keresésekben az alábbi értelmezésű függvényeket szoktuk használni:. ((x i,...,x j)):=i (első) 2. u((x i,...,x j)):=j (utolsó) 3. k((x i,...,x j)):=(i+j) DIV 2 (középső) 4. ((x i,...,x j)):=(x i+,...,x j) (első elem nélkül) 5. u((x i,...,x j)):=(x i,...,x j-) (utolsó elem nélkül) 6'. k<((x i,...,x j)):=(x l,...,x m) (x i,...,x j), ahol l=i és m=(i+j DIV 2)- 6". k>((x i,...,x j)):=(x l,...,x m) (x i,...,x j), ahol l=(i+j DIV 2)+ és m=j 7. <((x i,...,x j)):=(x' l,...,x' k) (x i,...,x j) x' m<x i m [l..k] (elsőnél kisebbek) 6

4. LineárisKeresésRendezetben(H *,H,F(H H,L)):L L Be:, X H *, y H, T y:h L (T y(h) h=y h H), F(H H,L) Ki: VA L, SORSZ Ef: Hossz(X)= Rendezés( RendezettSorozat (X) VA i [..] : x i=y VA SORSZ [..] x SORSZ=y Absztrakt algoritmus: L:={x i: i [e..]} (elejétől végig, e: ahol tartunk=..+) Az e a sorozat elejét jelöli, amelyben még lehet a keresett. Figyelem: az L sorozat még annak előtte, hogy az. eleméhez érnénk, véget érhet! (Ha x>y bekövetkezett.) L azonosítható, sőt helyettesíthető is az első elemének indexével: L:=L(e) e (L(e)):= (L(e)):=e (a mindenkori első elem) (L(e)):={x i: i [e+..]}, ha x e y () (L(e)):={x i: i [+..]}, ha x e>y (2) () és (2) {x i: i [e..]} L(e):=-e+ (L(e)>0 -e+>0 e) e:= Ciklus amíg e és X(e) y Elágazás X(e)<y esetén e:=e+ X(e)>y esetén e:=+ Elágazás vége Van:= e Ha Van akkor SORSZ:=e Vegyük észre:. a ciklusból kilépünk, ha 'nem e vagy X(e)=y' teljesül; <e találunk nagyobbat: X(e)>y (l. definícióját) vagy egyszerűen a sorozat végére érünk: +=e 2. Így a ciklusfeltételre következő igaz: e és X(e) y nem (X(e)>y vagy +=e) és X(e) y X(e) y és +>e és X(e) y +>e és X(e)<y e és X(e)<y 3. Ezen átalakítás után a ciklusmagban fölöslegessé vált az elágazás, hiszen az első ág triviálisan igaz, a másik meg sohasem igaz. 4. Ezzel viszont a kilépés okát már nem jelzi egyértelműen az ' e' feltétel (hiszen az L sorozat üresre állítását nem végzi el senki): egybemosódott a sikeres és az értelmetlen keresést meggátoló kilépés. A sikerességet jelenti az ' e és X(e)=y' feltétel teljesülése. Vagyis: e:= Ciklus amíg e és X(e)<y e:=e+ Van:= e és X(e)=y Ha Van akkor SORSZ:=e 5. Egyszerűsödik az algoritmus, ha sikerül egyszerűsíteni e szétválás érzékelése. A trükk mindössze annyi, hogy az utolsó elem előtt kilépünk, s ennek vizsgálatára redukáljuk a problémát: e:= Ciklus amíg e és X(e)<y e:=e+ Van:=X(e)=y Ha Van akkor SORSZ:=e 7

5. LogaritmikusKeresés(H *,H,F(H H,L)):L L Be:, X H *, y H, T y:h L (T y(h) h=y h H), F(H H,L) Ki: VA L, SORSZ Ef: Hossz(X)= Rendezés( és RendezettSorozat (X) elem:h H szelekciós függvény: elem(x,i)=x i VA i [..] : x i=y VA SORSZ [..] x SORSZ=y Absztrakt algoritmus: L:={x i: i [e..v]} (a mindenkori eleje, vége, kezdetben: (,)) L azonosítható, sőt helyettesíthető is az első és az utolsó elemének indexével: L:=L(e,v) (e,v) (L(e,v)):= k(l(e,v)):=(e+v) DIV 2 (középső elem) (L(e,v)):= k (L(e,v)), ha x L(e,v)<y () (L(e,v)):= k (L(e,v)), ha x L(e,v)>y (2) L(e,v) :=v-e+ ( L(e,v) >0 v-e+>0 v e) (e,v):=(,) Ciklus amíg v e és X((e+v) DIV 2) y Elágazás X((e+v) DIV 2))>y esetén (e,v):=(e,((e+v) DIV 2)-) X((e+v) DIV 2))<y esetén (e,v):=(((e+v) DIV 2)+,v) Elágazás vége Van:=v e Ha Van akkor SORSZ:=(e+v) DIV 2 Az egyszerűbb leírhatóság érdekében tároljuk az (L(e,v))-dik (=(e+v) DIV 2) elem indexrészét a k változóban, e leválasztás viszont a külön kiszámolást jelenti! Másrészt az 'X(k) y' feltétel kétirányúra egyszerűsíti a ciklusmagot. Így az alábbi algoritmus marad: (e,v):=(,); k:=(e+v) DIV 2 Ciklus amíg v e és X(k) y Ha X(k)>y akkor v:=k- különben e:=k+ k:=(e+v) DIV 2 Van:=v e Ha Van akkor SORSZ:=k 6. VisszalépésesKeresés((H * H * 2...),F(H H 2...,L)):L L * Be: K, M * (K hosszú méretsorozat), Y i H * i ( i [..K]) (M i elemszámú lehetőségsorozatok), K i l: H j L i = j (lehetőségek összeférése), Ki: VA L, X * (az összeférő lehetőségek indexeinek sorozata) Ef: K 2 Hossz(M)=K HalmazFölsorolás(Y i) i [..K] j [..K], i [..j] l(h,...,h j) l(h,...,h i) VA Z Y Y 2... Y K: l(z) VA y ( x i) Y i és l( y (,..., ) i x ) y ( x k) k Absztrakt algoritmus: K L: A keresett megoldás a x i Y i K-dimenziós tér egy pontja, amely kielégíti az l-t. Ennek megadását az X-tömb végzi az Y i-beli komponensek indexeinek felsorolásával. A megoldás keresése során e teret kell 8

ügyesen bejárnunk, lehetőleg úgy, hogy ne kelljen mind az M *...*M K pontjának vizsgálatát elvégeznünk. Ezt úgy tesszük, hogy szisztematikusan szűkítjük a teret egyre szűkülő alterek uniójára, azáltal, hogy újabb és újabb komponensét kötjük meg a leendő megoldásnak. Kezdetben csak az. dimenzióban lesz kötött érték. Ekkor tehát a térnek azt a K- dimenziós alterét szemeltük ki további vizsgálatra, amelynek. komponense éppen a rögzített érték. A vizsgálatra szoruló pontok halmaza még a teljes tér. Amikor kiderül a komponensek konkretizálása során, hogy a koncentrált altér nem tartalmazhatja a megoldást, akkor a teljes alteret elvetve vesszük a szomszédos (valamelyik soron következő, azaz a megfelelő Y i-beli későbbi elem által meghatározott) alteret. Ezek után az L a következő indexsorozatok halmaza: az (,,..., ), első elemek sorozatától az (m,m 2,...,m K) utolsó sorozatig tart. (Az m i= Y i.) (Formális okok miatt egészítsük ki a fenti teret olyan elemekkel is, amelyek bármely koordinátája a 0 is lehet.) Ezt a halmazt tesszük pontok sorozatává az és függvények segítségével. A gondolatmenetből nyilvánvaló, hogy a pontfelsorolás alapja az L-beli sorozatok kezdőszeletei lesznek. Az aktuális L azonosítására mód van a kiinduló sorozat nem triviális (azaz rögzített) elemeket tartalmazó kezdőszelete által: L:=L(x,x 2,...x i) (az x i-k az indexeket jelentik), elvárjuk, hogy L(x,x 2,...x i)=l(x,x 2,...x i,0,...,0). Vegyük észre az L alábbi tulajdonságait!. Az összes lehetőség L halmaza: L(,,...,). 2. Monoton csökkenés: a. L(x,...,x i) L(x,...,x i+) x i+ [..m i+], azaz előrehaladáskor nem csökken a vizsgálatban szereplők száma; b. L(x,...,x i) L(x,...,x' i-) x' i- (x i-..m i-]. azaz visszalépéskor éppen annyival csökken, ahány dimenziós alteret sikerült kizárni a további vizsgálatból, pontosabban éppen az {(x,...,x i-,x'i,...,x'k) : j (i..k] x'j [..m j] } alteret, ami elemszáma m ; c. L(x,...,x i) L(x,...,x' i) x' (x i..m i], azaz többszörös visszalépés után az átlépett alterekbeli elemekkel csökkenthető a vizsgálat; d. a b. és a c.-ből következik, hogy a legkisebb L(x,...,x i) az L(), amely az L(x m )-ből való visszalépés után adódik. Ebben 0 darab elem van. Az L-mérték nyomon követését végzi a. függvény, így elkerülhetetlen ennek matematikai megragadása. yilvánvaló lehetőség lenne az előbbiekre építve a még ki nem szórt pontok számával mérni. Ennél lényegesen egyszerűbb mód is van. A d. figyelembe vételével az L üressé válását észlelhetjük az éppen a lerögzített elemek számának figyelésével: amikor az 0-ra csökken, akkor ürült ki a tér is. Az értelmezése következik: (L(x,...,x i)):=(x,...x i,0,...,0) ézzük a meghatározását! L( x,..., xi, xi (L(x,...,x i)):=, ( L( x,..., xi K j i j ),0)),i K l( x,..., x, x ), i l( x,..., x, x ) * j [.. i) : z i i i i ( x.. m ]: l( x,..., z ) * j j j j Magyarázatok, jelölések, megállapodások és megállapítások:. * x' v jelentése: x' v (x v..m v] és az első olyan..., illetve ha x' v korábbi értéke (azaz x' v=0), akkor x' v [..m v] és olyan. 2. Természetesen a második ágra csak az első ág feltételének nem teljesülése esetén kerülhet sor. 3. Az i jelölje a vizsgált megoldássorozat nem triviális kezdőszeletének hosszát! Ekkor L>0 i. 4. A keresett elemig akkor jutunk, amikor i>k. 5. incs meg a keresett elem (azaz L= ), ha i<. 6. (Mint nyilvánvaló:) az L-t az i és az X együtt határozzák meg! Így pl. L:=X i:=: X:=0 9

Az algoritmus: Típus Keresett=Rekord(van:Logikai,melyik:Egész) i:= [i. kezdőszeletnél tartunk] X(..):=0 [még nincs rögzített] Ciklus amíg i és i K ker:=jóelem(i) [az i.-ig lehetséges-e a kiválasztás?] Elágazás I K és ker.van esetén X(i):=ker.melyik; i:+ i esetén X(i):=0; i:- Elágazás vége Van:=i [X-ben található a megoldás, ha létezik] Mivel a ciklusban csak i és i K esetben vagyunk, s csak ekkor történhet az i növelése, vagy csökkentése, ezért a kétirányú elágazás helyett írható Ha-típusú elágazás is, egyszerűbb feltétellel. Így kapjuk: i:= [i. kezdőszeletnél tartunk] X(..):=0 [még nincs rögzített] Ciklus amíg i és i K ker:=jóelem(i) [az i.-ig lehetséges-e a kiválasztás?] Ha ker.van akkor X(i):=ker.melyik; i:+ különben X(i):=0; i:- Van:=i [X-ben található a megoldás, ha létezik] Függvény JóElem(i:Egész): Keresett [i.-ig nem triviális sorozat megoldás-e?] j:=x(i)+ Ciklus amíg j M(i) és nem Lehetséges(i,j) j:+ JóElem.van:=j M(i) Ha JóElem.van akkor JóElem.melyik:=j Függvény vége. Függvény Lehetséges(i,j:Egész): Logikai [i. komponens összefér-e az eddigiekkel?] Lehetséges:=l(Y()(X()),...,Y(i-)(X(i-)), Y(i)(j)) Függvény vége. A visszalépéses keresés (backtrack) elvének beépítése más tételekbe Mindössze annyi az észreveendő, hogy. L>0 i 2. T( (L)) i K 3. (L, (L)) keresett:=jóelem(i) Ha keresett.van akkor X(i):=keresett.melyik; i:+ különben X(i):=0; i:- Így pl. a megszámolás tétel variánsa a következő lesz. Annyi előzetes átalakításra szükség van, hogy a megszámolás tétel számlálásos ciklusát amíg -osra kell átírni. Db:=0 i:=; X(..K):=0 0

Ciklus amíg i Ha i>k akkor Db:+; i:- [visszalép a K. komponenshez] keresett:=jóelem(i) Ha keresett.van akkor X(i):=keresett.melyik; i:+ különben X(i):=0; i:-... vagy a maximum-kiválasztás... (Itt feltételezzük, hogy rendezés az L téren, ami X megoldásokat összevethetővé tesz. Az egyszerűség kedvéért föltesszük, hogy az L legkisebb eleme az (0,...,0).) i:=; X(..K):=0 Max:=X [az eddigi legnagyobb, legjobb megoldás] Ciklus amíg i Ha i>k akkor Ha Max<X akkor Max:=X i:- [visszalép a K. komponenshez] Elágazás vége keresett:=jóelem(i) Ha keresett.van akkor X(i):=keresett.melyik: i:+ különben X(i):=0 : i:- Van:=i [Max-ban található a megoldás, ha létezik]