You are on page 1of 6

1.

gyakorlat
Adatstruktúrák, algoritmusok

Adatstruktúrák tervezése

A programozási feladatok megoldása során először az algoritmus vázlatát készítjük el, majd a
szükséges adatstruktúrák definícióját: milyen objektumokat akarunk tárolni, és ezekkel
milyen műveleteket akarunk végezni, például
• üres adatstruktúra létrehozása,
• elem berakása az adatstruktúrába,
• speciális műveletek (pld. keresés, a legkisebb kulcsú elem kivétele).

Ezután az algoritmust fokozatosan pontosítjuk, egyre részletesebben kidolgozzuk. A


finomítások során készítjük el az eljárásokat, amelyek előállítása során a fenti lépések
ismétlődnek meg. Ehhez hasonló módon definiáljuk és finomítjuk az adatstruktúrákat is. Az,
hogy milyen adatokat akarunk tárolni az adott adatstruktúrában és milyen műveleteket
akarunk végezni rajtuk, fogja meghatározni, hogy milyen megvalósítást választunk.

A tervezés fontos része az elemzés: minden művelethez kiszámoljuk a végrehajtási idejét, és


ennek segítségével az egész algoritmus lépésszámát. Igyekszünk az algoritmus által
gyakrabban használt műveletek idejét csökkenteni. Általában nincs „univerzálisan legjobb”
adatstruktúra, a felhasználás határozza meg, hogy melyik lesz a legmegfelelőbb (pld.: nem
feltétlenül az az adatstruktúra lesz a legjobb, amelyben a leglassabb művelet elvégzésének
ideje minimális). Azt a megvalósítást érdemes választani, ahol az algoritmus által
leggyakrabban használt műveletek a leggyorsabban valósíthatók meg. Továbbá,
természetesen, a gyakorlatban nem mindig az az adatstruktúra a leghatékonyabb, aminek az
elméleti futási ideje a legjobb.
(Király Zoltán: Adatstruktúrák, 2008 - http://www.cs.elte.hu/~kiraly/Adatstrukturak.pdf)

Alapvető adatszerkezetek:
• egyszerű: egy változó egy érték,
• sor és verem,
• tömb,
• halmaz,
• láncolt lista.

Algoritmus fogalma: Az algoritmus több, esetleg végtelen sok azonos jellegű, egymástól
csak a kiindulópontban különböző feladatok megoldására használható eljárás, amelyek során
utasításszerűen előre meghatározott lépéseket kell adott sorrendben elvégeznünk.
Röviden:
Egy probléma megoldásának véges számú részlépésben történő egyértelmű és teljes leírását
algoritmusnak nevezzük.

Követelmények:
• Az egyes részlépéseknek végrehajthatónak kell lennie.
• A lépéseknek egyértelműnek kell lenni. Ez biztosítja, hogy tetszőlegesen sokszor
végrehajtva, mindig ugyanazt a részeredményt kapjuk.
• A részlépéseket véges sokszor kell végrehajtani.
Az algoritmus részei:
• szekvenciák (utasítások egymás utánisága),
• iterációk más néven ciklusok (utasítások ismétlése, amíg teljesül egy vizsgált feltétel),
• szelekciók (az algoritmus feltételtől függő elágaztatása).

Az algoritmus készítésénél első lépés, hogy elkészítsük a problémamegoldás tervét.


Algoritmusleíró eszközök:
• szöveges leírás,
• pszeudokód,
• folyamatábra vagy blokkdiagram,
• struktogram,
• Jackson diagram.

Folyamatábra elemei: Struktogram elemei:

Első lépésnél fentről lefelé módszerrel célszerű készíteni, a megoldásnál pedig lentről felfelé.
A tervet átültetjük konkrét programozási nyelvekre. A feladat lépéseit a különféle utasítások
jelentik:
• I/O utasítás,
• értékadó utasítás,
• feltételvizsgáló vagy tesztelő utasítás,
• adatátalakító utasítás.

Az algoritmus tulajdonságai:
1. Meg kell adni a végrehajtandó műveleteket, azaz le kell írni, hogy mely adatokkal
milyen átalakítást kell végezni. Valamint azt, hogy az eredményül kapott adatokat a
tevékenység későbbi fázisában fel kell-e használni, alkalmazni.
2. Meg kell fogalmazni azokat a különleges eseteket, melyek az átlagosnál eltérő
megoldást igényelnek.
3. Meg kell adni a műveletek sorrendjét az összes esetre vonatkozólag.
4. Csak olyan instrukciókat tartalmazzon, amely egyértelműen hajtható végre.
5. Mindezeket az információkat a végrehajtó számára érthető és egyértelműen
értelmezhető formában, szimbólumrendszerben kell közvetítenie.

Példa algoritmusok

1. LNKO algoritmus

Pszeudokód:
BEGIN
INPUT (m, n)
r := m%n
WHILE (r>0)
m := n
n := r
r :=m%n
END
OUTPUT (n)
END

2. Két egész szám maximuma 3. Három egész szám maximuma


BEGIN BEGIN
INPUT: a,b INPUT: a,b,c
IF (a>b) IF (a>b)
max := a IF (a>c)
ELSE max := a
max := b ELSE
END max := c
OUTPUT: max END
END ELSE
IF (b>c)
max := b
ELSE
max := c
END
END
OUTPUT: max
END
4. N elem összege 5. N elem átlaga
BEGIN BEGIN
INPUT: a[N] INPUT: a[N]
i := 1, s := 0 i := 1, s := 0
WHILE i <= N WHILE i <= N
s := s + a[i] s := s + a[i]
i := i + 1 i := i + 1
END END
OUTPUT: s OUTPUT: s/N
END END
6. N elem közül a maximális kiválasztása 7. Pozitív egész szám faktoriálisa
BEGIN BEGIN
INPUT: a[N] INPUT: n
max := a[1], i := 2 f := 1
WHILE (i<=N) WHILE (n>1)
IF (a[i]>max) f := f*n
max := a[i] n := n-1
END END
i := i+1 OUTPUT: f
END END
OUTPUT: max
END

8. Egész szám abszolút értéke 9. Két elem cseréje


BEGIN BEGIN
INPUT: a INPUT: a,b
IF a<0 c := a
a := a*(-1) a := b
END b := c
OUTPUT: a OUTPUT: a,b
END END
10. N elem közül a pozitívak mértani átlaga x g = n x1 * x2 *...* xn

BEGIN
INPUT: a[N]
i := 1, s := 1, g := 0, ma := 0
WHILE i<=N
IF a[i] >0
s := s*a[i]
g := g+1
END
i := i+1
END
ma := s*exp(1/g)
OUTPUT: ma
END

Házi feladat: Tetszőleges egész szám n-edik hatványa


N elem közül a párosak darabszáma

You might also like