Upload
informatikaanyag
View
801
Download
2
Embed Size (px)
Citation preview
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
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.
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