5
1144-2. tétel Milyen módszerekkel optimalizálná egy már kész program futását, ha abban sokszor kell tömbökben, listákban keresni? Információtartalom vázlata Programozási tételek (alapalgoritmusok) Keresés, logaritmikus keresés Adatszerkezetek, objektumok Tömbök, listák bejárása Programtervezési módszerek Keresések optimalizálása Tesztelés, hibakeresés Túlcsordulások kezelése Programozási tételek (alapalgoritmusok) Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században élt perzsa tudós nevének pontatlan fordítása. Az algoritmus problémamegoldásra szolgáló elemi lépések olyan sorozata, amely: - véges – azaz véges számú lépés után befejeződik, és eredményt szolgáltat; - egyértelmű – a lépések sorozatát úgy határozzuk meg, hogy bármely végrehajtott lépés után egyértelműen adódik a következő; - determinisztikus – ugyanazon kiindulási adatokra tetszőleges számú végrehajtás esetén ugyanazt az eredményt szolgáltatja; - teljes – nemcsak egy konkrét esetre alkalmazható, hanem az összes azonos jellegű feladatra. Keresés A probléma általános megfogalmazása: adott egy N elemű sorozat, keressük meg azt az elemet (határozzuk meg a helyét a sorozatban), mely megfelel egy megadott tulajdonságnak. - Ha több ilyen van, akkor a keresőalgoritmusok általában az első ilyen elemet találják meg. - A konkrét megvalósításoknál mi egy adott értéket keresünk. logaritmikus keresés - Más néven: felezéses keresés.

1144. 2.tétel

Embed Size (px)

Citation preview

Page 1: 1144. 2.tétel

1144-2. tétel Milyen módszerekkel optimalizálná egy már kész program futását, ha abban sokszor kell tömbökben, listákban keresni?

Információtartalom vázlata

–Programozási tételek (alapalgoritmusok)– Keresés, logaritmikus keresés

–Adatszerkezetek, objektumok– Tömbök, listák bejárása

–Programtervezési módszerek– Keresések optimalizálása

–Tesztelés, hibakeresés– Túlcsordulások kezelése

Programozási tételek (alapalgoritmusok)Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században élt perzsa tudós nevének pontatlan fordítása.Az algoritmus problémamegoldásra szolgáló elemi lépések olyan sorozata, amely:

- véges – azaz véges számú lépés után befejeződik, és eredményt szolgáltat;- egyértelmű – a lépések sorozatát úgy határozzuk meg, hogy bármely végrehajtott

lépés után egyértelműen adódik a következő;- determinisztikus – ugyanazon kiindulási adatokra tetszőleges számú végrehajtás

esetén ugyanazt az eredményt szolgáltatja;- teljes – nemcsak egy konkrét esetre alkalmazható, hanem az összes azonos jellegű

feladatra.

KeresésA probléma általános megfogalmazása: adott egy N elemű sorozat, keressük meg azt az elemet (határozzuk meg a helyét a sorozatban), mely megfelel egy megadott tulajdonságnak. - Ha több ilyen van, akkor a keresőalgoritmusok általában az első ilyen elemet

találják meg. - A konkrét megvalósításoknál mi egy adott értéket keresünk. logaritmikus keresés- Más néven: felezéses keresés. - Csak rendezett sorozaton valósítható meg.

Algoritmus:- A logaritmikus keresési algoritmus rendezett tömbön működik - Meghatározzuk a középső elemet, majd megvizsgáljuk ez-e a keresett. - Ha nem, akkor ha a keresett kisebb a középsőnél, akkor a sorozat alsó, egyébként a

felső részébe folytatjuk a keresést.A keresés két esetben fejeződhet be:- megtaláltuk a keresett adatot;- a részsorozat alsó indexe (E) nagyobb a felső (U), nincs benne a sorozatban a

keresett adat.

algoritmus Bináris_keresésváltozó Alsó, Felső, Közép, Hely:egészváltozó Adat: ElemTípus

Page 2: 1144. 2.tétel

változó Talált: logikaiAlsó:=1; Felső:=N; Közép:=(Alsó+Felső)/2

amíg (Alsó<=Felső) és (A[Közép]<>Adat) ismételha Adat<A[Közép] akkor

Felső:=Közép-1különben

Alsó:=Közép+1hvégeKözép:=(Alsó+Felső)/2

avégeTalált := Alsó<=Felsőha Talált akkor

Hely:=Középhvége

Adatszerkezetek, objektumok- tömb- karakterlánc- rekord- állomány

Tömb- A legalapvetőbb, leggyakrabban használt adatszerkezet.- Olyan homogén adatszerkezet, melynek elemeit a sokaságon belül elfoglalt helyük

azonosítja. Tehát:- elemei azonos típusúak,- az elemeket nem névvel, hanem a tömbön belüli helyükkel, az index-ükkel

azonosítjuk.

Objektumok- Az objektumok olyan zárt programozási egységek, amelyek a kezelni kívánt

adatokon kívül tartalmazzák azokat az eljárásokat és függvényeket is amelyek az objektumok megfelelő kezelésére képesek.

- 3 tulajdonság- Egységbe zárás- Öröklődés- Többrétűség (polimorfizmus)

Tömbök, listák bejárása?- Bejárás: Az adatszerkezet valamennyi

elemének egyszeri elérése (feldolgozása).- Ez a feldolgozás lehet tetszőleges művelet a lista egy elemének a tartalmával. A

teljes listára vonatkozó műveleteket így az egyes elemekre külön-külön elvégezhető műveletek sorozatára kell bontani (pl. átlagszámítás: összegzés, megszámlálás).

Programtervezési módszerekA programtervezés alapja a részekre bontás. A feladatot „ bonyolultságától függően „ részekre kell szedni. A törekvés az hogy a részek minél függetlenebbek legyenek egymástól, hiszen így a program sokkal áttekinthetőbb, a hibakeresés, karbantartás, továbbfejlesztés sokkal könnyebb, egyértelműbb.

Page 3: 1144. 2.tétel

A programtervezési módszerek állandóan változnak. Hosszú ideig a moduláris programozás volt a jellemző. Lényege, hogy a programot felülről lefelé funkcionálisan egyre kisebb lépésekre (modulokra, eljárásokra) bontjuk. A moduláris programozást a Jackson-féle programtervezési módszer váltotta fel, amely szintén felülről lefelé bontja a programot, de itt a programszerkezet felépítését az adatok szerkezete határozza meg. Napjainkban az objektum-orientált programtervezés hódít, segítségével kisebb energia-befektetéssel sokkal biztonságosabban tudjuk megtervezni a programjainkat. A módszer lényege az, hogy az egyes objektumok adataikkal és funkcióikkal együtt a program többi részétől függetlenek, és teljes mértékben felelősek a rájuk bízott feladatért.A tervezési szakasz dokumentációja a programterv. A program megtervezésével a probléma lényegileg meg van oldva, már csak a kódolás van hátra a megvalósításhoz.

Keresések optimalizálása

Tesztelés, hibakeresésPróbafuttatáskor még sok hibát észlelünk, ez természetes. Azonban minél alaposabbak voltak az előző fázisok, annál nagyobb a valószínűsége, hogy a program úgy fog működni, ahogy elképzeltük. A program futásakor még sokféle hiba derülhet ki. A program leállhat például futási hibával, de kiderülhet az is, hogy a program rosszul működik. A kisebbik baj, ha a hiba forrása például egy-egy utasítás helytelen használata. A kellemetlenebb a logikai, az ún. szemantikai hiba. Ilyen esetben a probléma mélyen gyökerezhet, még az is elképzelhető, hogy a hibát a probléma elemzési fázisától kezdve hurcoljuk. A tesztelés folyamán különböző próbaadatokkal futtatjuk a programot, amelyeket úgy kell összeállítani, hogy minden lehetséges értéket felvegyenek.A program tesztelésekor a következőkre kell figyelni:- Pontosan úgy működik a program, ahogy az a feladat leírásában szerepel - Nem lehet elrontani?- Elég hatékony?- Biztonságos a használata- A program felhasználóbarát (kényelmes a használata, esztétikus, nem idegesítő)A tesztelési fázis dokumentációja a kész program és a tesztadatok listája.

Túcsordulások kezelése

TúlcsordulásKét logikai azonosítóból ugyanaz a cím erálódikMegoldás:- újabb algoritmus alkalmazása- •független túlcsordulási területen elhelyezés

o láncolási technika alkalmazásával:- •egyedi rekordokat láncolunk vagy- bugyrot képezünk

o láncolás nélkül bugyrok képzésével osztott túlcsordulási területen