You are on page 1of 43

Programozás elmélet

1
Programozás elmélet
Programozási gondolkodásmód

• A programtervezés a megoldandó problémára összpontosít,


nem pedig az elkészítendő programra.

• A programtervezés független a programozási környezettől.

• A programtervezésnél alkalmazott módszerek helyessége


matematikai alapossággal igazolható.

2
Programozás elmélet
Alapfogalmak

A feladat megoldásához szükséges ismernünk a benne szereplő


lényeges adatokat és azok tulajdonságait.
Az adatok tulajdonságai:
1. Érték
2. Az értékekkel végezhető műveletek

Egy adat típusát az adat által felvehető lehetséges értékek halmaza,


az úgynevezett típusérték-halmaz, és az ezen értelmezett műveletek,
az úgynevezett típusműveletek együttesen határozzák meg, vagyis
specifikálják.

3
Programozás elmélet
Néhány nevezetes adattípus
Természetes szám típus. Típusérték-halmaza a természetes számokat
(pozitív egész számokat és a nullát) tartalmazza, jele: N (N+ a nullát nem
tartalmazó természetes számok halmaza).
Típusműveletei az összeadás (+), kivonás (–), szorzás (*), az egész osztás
(div), az osztási maradékot előállító művelet (mod), esetleg a hatványozás,
valamint megengedett két természetes szám összehasonlítása (=, ≠, <, ≤, >,
≥).
Egész szám típus. Típusérték-halmaza (jele: Z) az egész számokat
tartalmazza (Z + a pozitív, Z- a negatív egész számok halmaza).
Típusműveletei a természetes számoknál bevezetett műveletek.
Valós szám típus. Típusérték-halmaza (jele: R) a valós számokat tartalmaz-
za (R + a pozitív, R- a negatív valós számok halmaza, R a 0pozitív valós
számokat és a nullát tartalmazó halmaz).
Típusműveletei az összeadás (+), kivonás (–), szorzás (*), osztás (/), a
hatványozás, valamint megengedett két valós szám összehasonlítása (=, ≠,
<, ≤, >, ≥) is.

4
Programozás elmélet
Logikai típus. Típusérték-halmaza (jele: L) a logikai értékeket tartalmazza.
Típusműveletei a logikai „és” (), logikai „vagy” (v), a logikai „tagadás” (¬) és
logikai „egyenlőség” (=) illetve „nem-egyenlőség” (≠).
Karakter típus. Típusérték-halmaza (jele: K) a karaktereket (a nagy és
kisbetűk, számjegyek, írásjelek, stb.) tartalmazza.
Típusműveletei a két karakter összehasonlításai (=, ≠, <, ≤, >, ≥).
Halmaz típus. Típusértékei olyan véges elemszámú halmazok, amelyek egy
meghatározott alaphalmaz részei. E alaphalmaz esetén a jele: 2E.
Típusműveletek a szokásos elemi halmazműveletek: halmaz ürességének
vizsgálata, elem kiválasztása halmazból, elem kivétele halmazból
(kivonás), elem berakása a halmazba (unió).
Sorozat típus. Típusértékei olyan véges hosszúságú sorozatok, amelyek
egy meghatározott alaphalmaz elemeiből állnak. E alaphalmaz esetén a
jele: E*.
Típusműveletei: egy sorozat hosszának (elemszámának) lekérdezése (|s|);
sorozat adott sorszámú elemére történő hivatkozás (s), azaz az elem
kiolvasása illetve megváltozatása; sorozatba új elem beillesztése; adott
elem kitörlése.

5
Programozás elmélet
Vektor típus. (Egydimenziós tömb) Típusértékei olyan véges, azonos
hosszúságú sorozatok, más néven vektorok, amelyek egy meghatározott
alaphalmaz elemeiből állnak. A sorozatokat m-től n-ig terjedő egész
számokkal számozzuk meg, más néven indexeljük. Ezeknek halmazát E
alaphalmaz esetén az Em..n jelöli, m = 1 esetén egyszerűen En.
Típusművelete egy adott indexű elemre történő hivatkozás, azaz az elem
kiolvasása illetve megváltozatása. A vektor első és utolsó eleme
indexének (az m és az n értékének) lekérdezése is lényegében egy-egy
típusművelet.
Mátrix típus. (Kétdimenziós tömb) Vektorokat tartalmazó vektor. Speciális
esetben azonos módon indexelt El..m -beli vektoroknak (úgynevezett
soroknak) a vektora (E vagy másképp El..m x k..n, ahol E az elemi értékek
halmazát jelöli), amelyet k=l=1 esetén egyszerűen Em x n-mel is
jelölhetünk.
Típusművelete egy adott sorbeli adott elemre (oszlopra) történő hivatkozás,
azaz az elem kiolvasása, illetve megváltoztatása. Típusművelet még a
mátrix egy teljes sorára történő hivatkozás, valamint a sorokat tartalmazó
vektor indextartományának illetve az egyes sorok indextartományának
lekérdezése.

6
Programozás elmélet
Állapottér
Amikor egy feladat minden lényeges adata felvesz egy-egy értéket, akkor
ezt az érték-együttest a feladat egy állapotának nevezzük.
Az állapotteret megadhatjuk úgy, hogy felsoroljuk a komponenseit, azaz az
állapottér lényeges adatainak típusérték-halmazait egyedi címkékkel ellátva.
Az állapottér címkéit a továbbiakban az állapottér változóinak nevezzük.
Az összes lehetséges állapot alkotja az állapotteret.

Feladat
A feladat egy olyan kapcsolat (leképezés), amelyik bizonyos állapotokhoz
(kezdőállapotokhoz) állapotokat (célállapotokat) rendel.
Megoldás
Egy program akkor old meg egy feladatot, ha a feladat bármelyik
kezdőállapotából elindulva biztosan terminál, és olyan állapotban áll
meg, amelyet célállapotként a feladat az adott kezdőállapothoz rendel.

7
Programozás elmélet
Program fogalma
A program kiinduló állapotainak terét a program alap-állapotterének
nevezzük, változói az alapváltozók. A működés során megjelenő újabb
komponenseket segédváltozóknak fogjuk hívni. Egy új segédváltozó
nevének különböznie kell a többi változó nevétől, kezdő értéke a
megjelenésekor nem-definiált (tetszőleges).

A program az általa befutható összes lehetséges végrehajtás együtte-


se. Alap-állapotterének bármelyik állapotából el tud indulni, és ahhoz
olyan végrehajtási sorozatokat rendel, amelyik első állapota a kiinduló
állapot.
Ugyanahhoz a kiinduló állapothoz akár több végrehajtási sorozat is
tartozhat.
Egy végrehajtási sorozat további állapotai az alap-állapottér kompo-
nensein kívül segéd komponenseket is tartalmazhatnak, de ezek a
véges hosszú végrehajtások esetén legkésőbb az utolsó lépésében
megszűnnek, így ezek a végrehajtások az alap-állapottérben
terminálnak.

8
Programozás elmélet
Specifikáció
A feladat specifikálása során meghatározzuk a bemenő adatok
tetszőlegesen rögzített értékeihez tartozó kezdőállapotok halmazát,
valamint az ehhez tartozó célállapotok halmazát. A feladat specifikációja
tartalmazza:
1. az állapotteret, azaz a feladat lényeges adatainak típusérték-halmazait az
egyes adatokhoz tartozó változó nevekkel együtt
2. az előfeltételt, amely a kezdőállapotok azon halmazát leíró logikai állítás,
amely rögzíti a bemenő változók egy lehetséges, de tetszőleges kezdőérté-
két (ezeket általában a megfelelő változónév vesszős alakjával jelöljük)
3. az utófeltételt, amely a fenti kezdőállapotokhoz rendelt célállapotok
halmazát megadó logikai állítás

Meg lehet mutatni, hogy ha rendelkezünk egy feladatnak a specifikációjával


és találunk olyan programot, amelyről belátható, hogy egy az előfeltételt
kielégítő állapotból elindulva a program az utófeltételt kielégítő valamelyik
állapotba terminál, akkor a program megoldja a feladatot.
Ez a specifikáció tétele.

9
Programozás elmélet
Programozási tételek

10
Programozás elmélet
Programozási tételek főbb típusai
I. Sorozathoz érték rendelése:
1. Sorozatszámítás
2. Eldöntés
3. Kiválasztás
4. Lineáris keresés (Logaritmikus keresés)
5. Megszámlálás
6. Maximumkiválasztás
II. Sorozathoz sorozat rendelése
1. Másolás
2. Kiválogatás
1. Sorszámok kiválogatása
2. Elemek kiválogatása
3. Kiválogatás helyben
4. Kiválogatás kihúzással
III. Sorozathoz sorozatok rendelése
1. Szétválogatás
1. Két tömbbe
2. Egy tömbbe
3. Helyben
11
Programozás elmélet
IV. Sorozatokhoz sorozat rendelése
1. Metszet
2. Unió
3. Összefuttatás
4. Összefésülés (A ∩ B = { 0 })
5. Visszalépéses keresés (Backtrack)
Rendezések
1. Egyszerű cserés
2. Minimumkiválasztásos
3. Buborékos
4. Javított buborékos
5. Beillesztéses (kártyás)
6. Javított beillesztéses (javított kártyás)
Speciális rendezések:
1. Szétosztó
2. Számlálva szétosztó
3. Számláló
4. Shell

12
Programozás elmélet
I. Sorozathoz érték rendelése
I/1 Sorozatszámítás
Adott egy N elemű sorozat, és a sorozaton értelmezett ƒ függvény. Adjuk meg a
bemeneti sorozatra az ƒ függvény értékét!
Specifikáció:
Bemenet: N Є N0, X Є HN, ƒ : H* → G
Kimenet: SЄG
Ef.:  ƒ 0 Є G  ƒ() = ƒ 0   ƒ : G x H → G 
ƒ(X1,…,XN) = ƒ (ƒ(X1,…,XN-1), XN)
Uf.: S = ƒ(X1,…,XN)
Sorozatszámítás (N, X, S):
S:= ƒ 0
Ciklus i=1-től N-ig
S:= ƒ (S, X( i ))
Ciklus vége
Eljárás vége
13
Programozás elmélet
I/2 Eldöntés (a)
a. Adott egy N elemű sorozat, és a sorozat elemein értelmezett T tulajdonság.
Adjuk meg, hogy a bemeneti sorozatnak van-e T tulajdonságú eleme!
Specifikáció:
Bemenet: N Є N0, X Є HN, T: H → L
Kimenet: VAN Є L
Ef.: -
Uf.: VAN ≡ ( i (1 ≤ i ≤ N): T(Xi)

Eldöntés1 (N, X, VAN):


i:= 1
Ciklus amíg i ≤ N és nem T( X( i ))
i:= i + 1
Ciklus vége
VAN:= (i ≤ N)
Eljárás vége

14
Programozás elmélet
I/2 Eldöntés (b)
b. Adott egy N elemű sorozat, és a sorozat elemein értelmezett T tulajdonság.
Adjuk meg, hogy a bemeneti sorozatban az összes elem T tulajdonságú-e!

Eldöntés2 (N, X, MIND):


i:= 1
Ciklus amíg i ≤ N és T( X( i ))
i:= i + 1
Ciklus vége
MIND:= (i >N)
Eljárás vége

15
Programozás elmélet
I/3 Kiválasztás
Adott egy N elemű sorozat, és a sorozat elemein értelmezett T tulajdonság.
Tudjuk, hogy a sorozatnak van T tulajdonságú eleme. Adjuk meg ennek az
elemnek az indexét (sorszámát)!
Specifikáció:
Bemenet: N Є N0, X Є HN, T: H → L
Kimenet: SORSZ Є N0
Ef.:  i (1 ≤ i ≤ N): T(Xi)
Uf.: 1 ≤ SORSZ ≤ N)  T(XSORSZ)

Kiválasztás (N, X, SORSZ):


i:= 1
Ciklus amíg nem T( X( i ))
i:= i + 1
Ciklus vége
SORSZ:= i
Eljárás vége

16
Programozás elmélet
I/4 Lineáris keresés
Adott egy N elemű sorozat, és a sorozat elemein értelmezett T tulajdonság.
Adjuk meg, hogy a sorozatban van-e T tulajdonságú elem, és ha igen, akkor
adjuk meg az indexét (sorszámát) is! 
Specifikáció:
Bemenet: N Є N0, X Є HN, T: H → L
Kimenet: VAN Є L, SORSZ Є N0
Ef.: -
Uf.: (VAN ≡ ( i (1 ≤ i ≤ N): T(Xi) ))  (1 ≤ SORSZ ≤ N  T(XSORSZ))

Lineáris keresés (N, X, VAN, SORSZ):


i:= 1
Ciklus amíg i ≤ N és nem T( X( i ))
i:= i + 1
Ciklus vége
VAN:= (i ≤ N)
Ha VAN akkor SORSZ:= i
Eljárás vége
17
Programozás elmélet
I/5 Megszámlálás
Adott egy N elemű sorozat, és a sorozat elemein értelmezett T tulajdonság.
Adjuk meg a sorozat T tulajdonságú elemeinek a darabszámát!
Specifikáció:  1, ha T(Xi)
Bemenet: N Є N0, X Є HN, T: H → L, : H → {0,1}  (x) = 
 0, egyébként
Kimenet: DB Є N0
Ef.: - N

Uf.: DB=   X 
i 1
i

Megszámlálás (N, X, DB):


DB:= 0
Ciklus i = 1-től N-ig
Ha T( X( i )) akkor DB:=DB+1
Ciklus vége
Eljárás vége

18
Programozás elmélet
I/6 Maximumkiválasztás
Adott egy N elemű sorozat. Adjuk meg a sorozat legnagyobb elemének indexét
(sorszámát)!
Specifikáció:
Bemenet: N Є N0, X Є HN
Kimenet: MAXINDEX Є N0
Ef.: H-n értelmezhető egy rendezési reláció,  N ≥ 1
Uf.: 1 ≤ MAXINDEX ≤ N  i (1 ≤ i ≤ N): XMAXINDEX ≥ Xi

Maximumkiválasztás (N, X, DB):


MAXINDEX:= 1
Ciklus i = 2-től N-ig
Ha X( i ) > X( MAXINDEX ) akkor MAXINDEX := i
Ciklus vége
Eljárás vége

19
Programozás elmélet
II. Sorozathoz sorozat rendelése
II/1 Másolás
Adott egy N elemű sorozat, és a sorozaton értelmezett F függvény. Állítsunk
elő egy másik sorozatot, amely a bemenő sorozat elemeit tartalmazza az ƒ
függvénnyel megváltoztatva!
Specifikáció:
Bemenet: N Є N0, X Є HN, ƒ: H → G
Kimenet: Y Є GN
Ef.: -
Uf.: i (1 ≤ i ≤ N): Yi = ƒ( Xi )
Másolás (N, X, Y):
Ciklus i=1-től N-ig
Y( i ) := ƒ ( X( i ))
Ciklus vége
Eljárás vége

20
Programozás elmélet
II/2 Kiválogatás
a. Adott egy N elemű sorozat, és a sorozaton értelmezett T tulajdonság.
Válogassuk ki egy másik sorozatba a T tulajdonságú elemek sorszámát!
Specifikáció:  1, ha T(Xi)
Bemenet: N Є N0, X Є HN, T: H → L, : H → {0,1}  (x) = 
 0, egyébként
Kimenet: DB Є N0, Y Є {1..N}N
Ef.: - N

Uf.: DB=   X 
i 1
i ,  j (1 ≤ j ≤ DB): T( X Yi)

Kiválogatás_index (N, X, DB, Y):


DB:=0
Ciklus i=1-től N-ig
Ha T( X( i )) akkor DB := DB + 1 : Y( DB ) := i
Ciklus vége
Eljárás vége
21
Programozás elmélet
II/2 Kiválogatás
b. Adott egy N elemű sorozat, és a sorozaton értelmezett T tulajdonság.
Válogassuk ki egy másik sorozatba a T tulajdonságú elemeket!
Kiválogatás_elem (N, X, DB, Y):
DB:=0
Ciklus i=1-től N-ig
Ha T( X( i )) akkor DB := DB + 1 : Y( DB ) := X( i )
Ciklus vége
Eljárás vége

c. Kiválogatás helyben: adott egy N elemű sorozat, és a sorozaton értelmezett T


tulajdonság. Válogassuk ki a T tulajdonságú elemeket ugyanebben a sorozatban!
Kiválogatás_helyben (N, X, DB):
DB:=0
Ciklus i=1-től N-ig
Ha T( X( i )) akkor DB := DB + 1 : X( DB ) := X( i )
Ciklus vége
Eljárás vége

22
Programozás elmélet
II/2 Kiválogatás
d. Kiválogatás kihúzással: adott egy N elemű sorozat, és a sorozaton értelmezett
T tulajdonság. Válogassuk ki a T tulajdonságú elemeket ugyanebben a
sorozatban úgy, hogy a nem T tulajdonságú elemek helyére tegyünk egy
speciális értéket!

Kiválogatás_kihúzással (N, X, DB, Y):


DB:=0
Ciklus i=1-től N-ig
Ha nem T( X( i )) akkor DB := DB + 1 : X( i ) := spec. érték
Ciklus vége
Eljárás vége

23
Programozás elmélet
III. Sorozathoz sorozatok rendelése
III/1 Szétválogatás
a. Szétválogatás két tömbbe: adott egy N elemű sorozat, és a sorozaton értelmezett
T tulajdonság. Válogassuk szét két külön sorozatba a T, illetve nem T tulajdonságú
elemeket!
Specifikáció:  1, ha T(Xi)
Bemenet: N Є N0, X Є HN, T: H → L, : H → {0,1}  (x) = 
 0, egyébként
Kimenet: DBY Є N0, DBZ Є N0, Y Є HN, Z Є HN
Ef.: - N

Uf.: DBY=  Xi   DBZ = N – DBY  Z  X  Y  X 


i 1

 j (1 ≤ j ≤ DBY): T( Y i)   j (1 ≤ j ≤ DBZ): ¬ T( Z j)
Szétválogatás_két_tömbbe (N, X, DBY, Y, DBZ, Z):
DBY:=0 : DBZ:=0
Ciklus i=1-től N-ig
Ha T( X( i )) akkor DBY := DBY + 1 : Y( DBY ) := X( i )
különben DBZ := DBZ + 1 : Z( DBZ ) := X( i )
Ciklus vége
Eljárás vége 24
Programozás elmélet
III/1 Szétválogatás

b. Szétválogatás egy tömbbe: adott egy N elemű sorozat, és a sorozaton értelmezett


T tulajdonság. Válogassuk szét a T, illetve nem T tulajdonságú elemeket egy másik
sorozatba úgy, hogy a sorozat elején legyenek a T, a sorozat végén pedig a nem T
tulajdonságú elemek!

Szétválogatás_egy_tömbbe (N, X, DB1, Y, DB2, Z):


DB1:=0 : DB2:=N + 1
Ciklus i=1-től N-ig
Ha T( X( i )) akkor DB1 := DB1 + 1 : Z( DB1 ) := X( i )
különben DB2 := DB2 - 1 : Z( DB2 ) := X( i )
Ciklus vége
Eljárás vége

25
Programozás elmélet
III/1 Szétválogatás
c. Szétválogatás helyben: adott egy N elemű sorozat, és a sorozaton értelmezett T
tulajdonság. Válogassuk szét a T, illetve nem T tulajdonságú elemeket a bemenő
sorozatban úgy, hogy a sorozat elején legyenek a T, a sorozat végén pedig a nem T
tulajdonságú elemek!
Szétválogatás_helyben (N, X, DB):
E := 1 : U :=N : segéd := X( E )
Ciklus amíg E < U
Ciklus amíg E < U és nem T( X (U ))
U := U -1
Ciklus vége
Ha E < U akkor
X( E ) := X( U ) : E := E +1
Ciklus amíg E < U és T( X ( E ))
E := E + 1
Ciklus vége
Ha E < U akkor X( U ) := X( E ) : U := U – 1
Elágazás vége
Ciklus vége
X( E ) := segéd
Ha T( X ( E )) akkor DB := E különben DB := E - 1
26
Eljárás vége Programozás elmélet
I. Sorozatokhoz sorozatok rendelése
III/1 Szétválogatás
a. Szétválogatás két tömbbe: adott egy N elemű sorozat, és a sorozaton értelmezett
T tulajdonság. Válogassuk szét két külön sorozatba a T, illetve nem T tulajdonságú
elemeket!
Specifikáció:  1, ha T(Xi)
Bemenet: N Є N0, X Є HN, T: H → L, : H → {0,1}  (x) = 
 0, egyébként
Kimenet: DBY Є N0, DBZ Є N0, Y Є HN, Z Є HN
Ef.: - N

Uf.: DBY=  Xi   DBZ = N – DBY  Z  X  Y  X 


i 1

 j (1 ≤ j ≤ DBY): T( Y i)   j (1 ≤ j ≤ DBZ): ¬ T( Z j)
Szétválogatás_két_tömbbe (N, X, DBY, Y, DBZ, Z):
DBY:=0 : DBZ:=0
Ciklus i=1-től N-ig
Ha T( X( i )) akkor DBY := DBY + 1 : Y( DBY ) := X( i )
különben DBZ := DBZ + 1 : Z( DBZ ) := X( i )
Ciklus vége
Eljárás vége 27
Programozás elmélet
IV. Sorozathoz sorozatok rendelése
Halmazfelsorolás
Adott egy sorozat, amelyben lehetnek azonos elemek, készítsünk egy új sorozatot,
amelyben az eredeti sorozat minden eleme csak egyszer fordul elő!

Halmazfelsorolás (N, X, DB, Z):


DB:= 0
Ciklus i= 1-től N-ig
j := 1
Ciklus amíg j ≤ DB és X( i ) <> Z(j )
j := j + 1
Ciklus vége
Ha j > DB akkor
DB := DB + 1 : Z( DB ) := X( i )
Elágazás vége
Ciklus vége
Eljárás vége

28
Programozás elmélet
IV. Sorozathoz sorozatok rendelése
IV/1 Metszet
Adott két sorozat, amelyek egy-egy halmazt reprezentálnak. Adjuk meg egy
harmadik sorozatban a két halmaz metszetét!
Specifikáció:  1, ha x Є Y
Bemenet: N Є N0, X Є HN, M Є N0, Y Є HN, : H → {0,1}  (x) = 
 0, egyébként
Kimenet: DB Є N0, Z Є Hmin(N,M)
Ef.: X és Y halmazfelsorolás
N
 Xi 
Uf.: DB=  i 1  Z halmazfelsorolás   j (1 ≤ j ≤ DB): (Zj Є X  Zj Є Y)
Metszet (N, X, M, Y, DB, Z):
DB:= 0
Ciklus i= 1-től N-ig
j := 1
Ciklus amíg j ≤ M és X( i ) ≠ Y(j )
j := j + 1
Ciklus vége
Ha j ≤ M akkor DB := DB + 1 : Z( DB ) := X( i )
Ciklus vége
29
Eljárás vége Programozás elmélet
IV/1 Unió
Adott két sorozat, amelyek egy-egy halmazt reprezentálnak. Adjuk meg egy
harmadik sorozatban a két halmaz unióját!
Specifikáció:  1, ha y  X
Bemenet: N Є N0, X Є HN, M Є N0, Y Є HN, : H → {0,1}  (y) = 
 0, egyébként
Kimenet: DB Є N0, Z Є H N + M
Ef.: X és Y halmazfelsorolás
M

Uf.: DB= N +   (Y )
j 1
j  Z halmazfelsorolás   i (1 ≤ i ≤ DB): (Zi Є X  Zi Є Y)

Unió (N, X, M, Y, DB, Z):


Z:= X : DB:= N
Ciklus j= 1-től M-ig
i := 1
Ciklus amíg i ≤ N és X( i ) ≠ Y(j )
i := i + 1
Ciklus vége
Ha i > N akkor DB := DB + 1 : Z( DB ) := Y( j )
Ciklus vége
Eljárás vége 30
Programozás elmélet
IV/2 Összefuttatás
Adott két rendezett sorozat, amelyek egy-egy halmazt reprezentálnak. Adjuk meg a két halmaz
unióját egy harmadik – szintén rendezett sorozatban!
Specifikáció:  1, ha y  X
Bemenet: N Є N0, X Є HN, M Є N0, Y Є HN, : H → {0,1}  (y) = 
 0, egyébként
Kimenet: DB Є N0, Z Є H N + M
Ef.: X és Y halmazfelsorolás   i (1 ≤ i < N): Xi ≤ X i+1   j (1 ≤ j < M): Yj ≤ Y j+1
M

Uf.: DB= N +   (Y )  Z halmazfelsorolás   i (1 ≤ i ≤ DB): (Zi Є X  Zi Є Y)


j 1
j

 i (1 ≤ i < DB): Zi ≤ Z i+1


Unió (N, X, M, Y, DB, Z):
Z:= X : DB:= N
Ciklus j= 1-től M-ig
i := 1
Ciklus amíg i ≤ N és X( i ) ≠ Y(j )
i := i + 1
Ciklus vége
Ha i > N akkor DB := DB + 1 : Z( DB ) := Y( j )
Ciklus vége
Eljárás vége 31
Programozás elmélet
IV/2 Összefuttatás
Összefuttatás (N, X, M, Y, DB, Z):
DB:= 0 : i := 1 : j :=1
Ciklus amíg i ≤ N és j ≤ M
DB := DB + 1
Elágazás
X( i ) < Y( j ) esetén Z( DB ) := X( i ) : i := i + 1
X( i ) > Y( j ) esetén Z( DB ) := Y( j ) : j := j + 1
X( i ) = Y( j ) esetén Z( DB ) := X( i ) : i := i + 1 : j := j + 1
Elágazás vége
Ciklus vége
Ciklus amíg i ≤ N
DB := DB + 1 : Z( DB ) := X( i )
Ciklus vége
Ciklus amíg j ≤ M
DB := DB + 1 : Z( DB ) := Y( j )
Ciklus vége
Eljárás vége
32
Programozás elmélet
IV/2 Összefuttatás
Az utolsó két ciklus kiiktatható, ha utolsó elem utánra egy megfelelően nagy
elemet veszünk fel.
Összefuttatás2 (N, X, M, Y, DB, Z):
DB:= 0 : i := 1 : j :=1
X( N + 1) := + : Y( M + 1) := + (az elemtípus maximális értéke)
Ciklus amíg i ≤ N vagy j ≤ M
DB := DB + 1
Elágazás
X( i ) < Y( j ) esetén Z( DB ) := X( i ) : i := i + 1
X( i ) > Y( j ) esetén Z( DB ) := Y( j ) : j := j + 1
X( i ) = Y( j ) esetén Z( DB ) := X( i ) : i := i + 1 : j := j + 1
Elágazás vége
Ciklus vége
Eljárás vége

33
Programozás elmélet
IV/2 Összefésülés
Amennyiben feltesszük, hogy a két sorozatban (halmazban) nincs közös elem
(nincs metszetük), akkor egyszerűbben is megoldható a feladat.
Összefésülés (N, X, M, Y, DB, Z):
DB:= 0 : i := 1 : j :=1
X( N + 1) := + : Y( M + 1) := + (az elemtípus maximális értéke)
Ciklus amíg i < N + 1 vagy j < M + 1
DB := DB + 1
Ha X( i ) < Y( j ) akkor
Z( DB ) := X( i ) : i := i + 1
különben
Z( DB ) := Y( j ) : j := j + 1
Elágazás vége
Ciklus vége
Eljárás vége

34
Programozás elmélet
Rendezések
•Cserés
•Minimum-kiválasztásos
•Buborék
•Javított buborék
•Beillesztéses (kártyás)
•Javított beillesztéses

•Szétosztó
•Számlálva szétosztó
•Számláló

35
Programozás elmélet
1. Cserés rendezés
Lényege:
A sorozat első elemét összehasonlítjuk a mögötte állókkal. Ha az első elem
nagyobb valamelyiknél akkor kicseréljük őket. Így előre jön a legkisebb elem.
Ezután ezt a műveletet ismételjük a sorozat maradék elemeivel, egészen a
végéig. A kisebb elemek sorban előre kerülnek növekvő sorrendben.
Algoritmus
Cserés:
Ciklus i = 1-től N-1-ig
Ciklus j = i + 1-től N-ig
Ha X( j ) < X( i ) akkor Csere ( X( j ), X( i ))
Ciklus vége
Ciklus vége
Eljárás vége
Sebesség
hasonlítások száma:  N  1   N  2  ...  1  N  N  1
2
N 1
mozgatások száma: 0… 3  N 
2
- egy csere három mozgatásból áll

36
Programozás elmélet
Egyszerű cserés példa
Algoritmus
III. i=3
Cserés: I. j=5
j=4
Ciklus i = 1-től N-1-ig
Ciklus j = i + 1-től N-ig 2; 3; 12; 6; 7; cs=1
Ha X( j ) < X( i ) akkor Csere ( X( j
), X( i )) IV. i=4
Ciklus vége I. j=5
Ciklus vége 2; 3; 6; 12; 7; cs=1
Eljárás vége
Sorozat: 6; 3; 12; 2; 7
I.i=1
j=2
j=4
I. j=5
j=3
6; 3; 12; 2; 7; cs=2

II. i=2
I. j=5
j=4
j=3
2; 6; 12; 3; 7; cs=1
37
Programozás elmélet
2. Minimum - kiválasztásos rendezés
Lényege:
A sorozatból kiválasztjuk a legkisebbet és ezt kicseréljük a legelső elemmel.
Ezután a ezt a műveletet ismételjük a sorozat maradék tagjaira.

Algoritmus
Minimum - kiválasztásos:
Ciklus i = 1-től N-1-ig
min:= i
Ciklus j = i + 1-től N-ig
Ha X( j ) < X( min ) akkor min:= j
Ciklus vége
Csere ( X( i ), X( min ))
Ciklus vége
Eljárás vége
Sebesség N 1
hasonlítások száma: N
2
3   N  1
mozgatások száma:
- egy csere három mozgatásból áll
38
Programozás elmélet
Minimum - kiválasztásos példa
Algoritmus II. i=2
Minimum - kiválasztásos: I. min= 2 j= 4
35
Ciklus i = 1-től N-1-ig
2; 3; 12; 6; 7;
min:= i
Ciklus j = i + 1-től N-ig
Ha X( j ) < X( min ) akkor min:= j
III. i=3
Ciklus vége I. min= 4
3 j= 45
Csere ( X( i ), X( min ))
2; 3; 12; 6; 7;
Ciklus vége
Eljárás vége
Sorozat: 6; 3; 12; 2; 7 IV. i=4
I.i=1 I. min= 4 j= 5
I. min= 4 1
2 j= 4
2
3
5
2; 3; 6; 12; 7;
6; 3; 12; 2; 7;

39
Programozás elmélet
3. Buborék rendezés
Lényege:
A sorozat legnagyobb eleme többszörös cserékkel átkerül a sorozat végére,
majd a maradék N-1 elemből a legnagyobb átkerül az utolsó előtti helyre, és így
tovább.
Algoritmus
Buborék:
Ciklus i = N-től 2-ig visszafelé
Ciklus j = 1-től i - 1-ig
Ha X( j ) > X( j + 1 ) akkor Csere ( X( j ), X( j + 1 ))
Ciklus vége
Ciklus vége
Eljárás vége
Sebesség N 1
N
hasonlítások száma: 2
N 1
mozgatások száma: 0… 3  N  2
- egy csere három mozgatásból áll

40
Programozás elmélet
3. Javított buborék rendezés
Lényege:
A módszer kihasználja ha a sorozat egy része, vagy esetleg az egész sorozat rendezett.
Ilyen esetben gyorsabb a hagyományos buborék rendezésnél, teljesen rendezetlen sorozat
esetén viszont nem. A következő ciklus mindig csak az előző csere helyéig rendez, hiszen
ez után a sorozat már rendezett.
Sebesség N 1
Algoritmus  N  1 N
hasonlítások száma: … 2
Javított buborék: N  1
3  N
mozgatások száma: 0… 2
i:= N - egy csere három mozgatásból áll
Ciklus amíg i > 1
cs:= 0
Ciklus j = 1-től i - 1-ig
Ha X( j ) > X( j + 1 ) akkor
Csere ( X( j ), X( j + 1 ))
cs:= j
elágazás vége
Ciklus vége
i:= cs
Ciklus vége
Eljárás vége
41
Programozás elmélet
3. Beillesztéses (kártyás) rendezés
Lényege:
Az eddigi módszerekkel szemben ennek a módszernek nincs szüksége a rendezéshez a
sorozat összes elemére. A sorozat elejéről kezdjük a rendezést és így egyre hosszabb
rendezett részsorozatokat kapunk. A következő elemet mindig a megfelelő helyre visszük.

Sebesség N 1
Algoritmus N
hasonlítások száma:  N  1 … 2
Beillesztéses: N 1
mozgatások száma: 0… 3  N  2
Ciklus amíg i = 2-től N-ig - egy csere három mozgatásból áll
j:= i - 1
Ciklus amíg j > 0 és X( j ) < X( j + 1 )
Csere ( X( j ), X( j + 1 ))
j:= j - 1
Ciklus vége
Ciklus vége
Eljárás vége

42
Programozás elmélet
3. Javított beillesztéses rendezés
Lényege:
A beillesztendő elemet nem tesszük be egyből a sorozatba, hanem először a többi elemet
hátratoljuk az adott lépésben végleges helyére, majd csak ezután helyezzük el a
beillesztendő elemet.

Sebesség N 1
Algoritmus  N  1 … N  2
hasonlítások száma:
Javított beillesztéses: N 1
2   N  1 2 N  1  N 
mozgatások száma: … 2
Ciklus amíg i = 2-től N-ig - egy csere három mozgatásból áll
y:= X( i )
j:= i - 1
Ciklus amíg j > 0 és X( j ) < y
X( j + 1 ):= X( j )
j:= j - 1
Ciklus vége
X( j + 1):= y
Ciklus vége
Eljárás vége

43
Programozás elmélet

You might also like