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

Hasonló dokumentumok
PROGRAMOZÁSI TÉTELEK

Programozási segédlet

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

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

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

Adatbázis rendszerek Gy: Algoritmusok C-ben

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

ELEMI PROGRAMOZÁSI TÉTELEK

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.

Összetett programozási tételek

Ö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.

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

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

Felvételi tematika INFORMATIKA

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

Egyszerű programozási tételek

Bevezetés a programozásba I.

RENDEZÉSEK, TOVÁBBI PROGRAMOZÁSI TÉTELEK

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

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

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Egyszerű programozási tételek

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

AAO 3. Csink László 2007

A 2015/2016 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

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

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

Programozás alapjai. 5. előadás

Struktúra nélküli adatszerkezetek

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

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

Informatikai tehetséggondozás:

Haladó rendezések. PPT 2007/2008 tavasz.

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

Programozási tételek. PPT 2007/2008 tavasz.

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Multihalmaz, intervallumhalmaz

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

Rendezések. Összehasonlító rendezések

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

INFORMATIKAI ALAPISMERETEK

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny döntő forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

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

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

Egyszerű programozási tételek

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

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

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Algoritmuselmélet 2. előadás

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

A rész (30 pont) A.1. Vajon mit csinál? (5 pont) A generál(n) algoritmus egy n természetes számot dolgoz fel (0 < n < 100).

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

Objektum Orientált Programozás VII.

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

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

Rekurzív algoritmusok

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

ALGORITMUSOK ÉS PROBLÉMAOSZTÁLYOK (1. előadás)

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

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

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

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

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

Közismereti informatika I. 4. előadás

2) Írja fel az alábbi lineáris függvény grafikonjának egyenletét! (3pont)

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

A 2011/2012 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

10. gyakorlat Tömb, mint függvény argumentum

Informatikai tehetséggondozás:

Térinformatikai algoritmusok Elemi algoritmusok

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Függvények

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

TUDOMÁNYOS ISMERETTERJESZTŐ TÁRSULAT 42. ORSZÁGOS TIT KALMÁR LÁSZLÓ MATEMATIKAVERSENY MEGYEI FORDULÓ HETEDIK OSZTÁLY JAVÍTÁSI ÚTMUTATÓ

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

Informatikai tehetséggondozás:

A 2013/2014 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Adatszerkezetek II. 10. előadás

Visszalépéses kiválogatás

Programozási tételek. Jegyzet. Összeállította: Faludi Anita 2012.

Számelméleti alapfogalmak

Algoritmizálás, adatmodellezés 1. előadás

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

MATEMATIKA ÉRETTSÉGI május 9. EMELT SZINT

INFORMATIKA. Sorozatok nevezetes algoritmusai példatár. Összeállította: Dr. Baksáné dr. Varga Erika

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Függvények

Térinformatikai algoritmusok Elemi algoritmusok

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

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

Számjegyes vagy radix rendezés

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK

Algoritmusok bonyolultsága

Tartalom. Programozási alapismeretek. 11. előadás

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

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

Átírás:

Adatbázis és szoftverfejlesztés elmélet Témakör 8. 1. Egy sorozathoz egy érték hozzárendelése Az összegzés tétele Összefoglalás Programozási tételek Adott egy számsorozat. Számoljuk és írassuk ki az elemek összegét. A sorozatot most és a továbbiakban is az N elemű A[N] vektorban (tömbben) tároljuk. Eljárás Összegzés s:=0 Ciklus i:=1-től N-ig Ki: s s:=s+a[i] //az s-be tegyük be s korábbi értékének és az A[i]-nek az összegét Végig olvassuk az összes számot és összeadjuk őket az s nevű változóba. Vigyázni kell, hogy az összegzés megkezdése előtt az s-nek az értéke 0 legyen, hiszen nem tudhatjuk, hogy korábban milyen értéke volt. Ellenkező esetben rossz eredményt kaphatunk! Az eldöntés tétele Adott egy N elemű sorozat és egy, a sorozat elemein értelmezett T tulajdonság (pl. a kettővel való oszthatóság, vagy a számjegyek összege prímszám, stb.). Az algoritmus eredménye: annak eldöntése, hogy van-e a sorozatban legalább egy T tulajdonsággal rendelkező elem. Eljárás Eldönt i:=1 Ciklus amíg i<=n És A[i] nem T tulajdonságú

VAN:=i<=N // Van értéke igaz, ha i<=n igaz, egyébként hamis Vesszük sorban az elemeket (ezért nő i mindig eggyel), és ezt addig csináljuk, amíg nem találunk megfelelő tulajdonságú elemet vagy már nincs több elem (éppen ez van leírva a ciklusfeltételben) A kiválasztás tétele Adott egy N elemű sorozat és egy, a sorozat elemein értelmezett T tulajdonság, valamint azt is tudjuk, hogy a sorozatban van legalább egy T tulajdonságú elem. A feladat ezen elem sorszámának meghatározása. Eljárás Kiválasztás i:=1 Ciklus amíg A[i] nem T tulajdonságú //nincs szükség az i<=n vizsgálatra, mert biztosan van ilyen elem Sorsz:=i // a T tulajdonságú elem sorszáma kerül a Sorsz nevű változóba Nincs szükség arra, hogy megvizsgáljuk: van-e még elem. Ha megtaláltuk a T tulajdonságú elemet, akkor a ciklus megáll, és már csak az i értékét kell lekérdeznünk. Az eredmény a Sorszban lesz. A megszámlálás tétele Rendelkezésre áll egy N elemű sorozat, és egy, a sorozat elemein értelmezett T tulajdonság. Most a T tulajdonsággal rendelkező elemek megszámlálása és kiírása a feladat. Eljárás Megszámlálás s:=0 // nem szabad elfelejteni Ciklus i:=1-től N-ig Ha A[i] T tulajdonságú akkor s:=s+1 // s értékét növeljük eggyel

Ki: s A szélsőérték-kiválasztás tételei a) A maximum-kiválasztás tétele Ebben az esetben egy N elemű sorozat legnagyobb elemét kell megtalálni. Eljárás Maximum Max:=A[1] Ciklus j:=2-től N-ig Ki: Max Ha Max<A[j] akkor Max:=A[j] Vesszük a sorozat első elemét. Ezek után ehhez az elemhez hasonlítjuk a többi elemet. Ha azonban találunk ettől az elemtől nagyobb számot, akkor innentől kezdve már a megtalált nagyobb számhoz hasonlítjuk a többi elemet. Vagyis amikor találtunk az eddig megvizsgáltak közül kiválasztott legnagyobbtól (ez van a Max változóban) nagyobbat (A[j]), akkor azonnal berakjuk a Max-ba, és innentől kezdve ez a legnagyobb. b) A minimum-kiválasztás tétele Ebben az esetben egy N elemű sorozat legkisebb elemét kell megtalálni. Eljárás Minimum i:=1 Ciklus j:=2-től N-ig Ki: A[i] Ha A[i]>A[j] akkor i:=j

A megoldás majdnem azonos az előzővel, de most a legkisebb elem indexét tároljuk és nem magát az elemet. Ez azért lehet előnyös, mert ha például a sorozat elemei nagy számok, vagy valós számok, akkor ezek tárolása több helyet foglal a memóriában mint az index tárolása, ami mindig egész. Természetesen, a Ha utasítás feltételében a relációjel megfordul (>), hiszen most a legkisebb elemet keressük. A keresési tételek a) A lineáris keresés tétele Rendelkezésre áll egy N elemű sorozat, és egy, a sorozat elemein értelmezett T tulajdonság. Olyan algoritmust kell írni, amely eldönti, hogy van-e T tulajdonságú elem a sorozatban, s ha van, akkor megadja a sorszámát (ennyivel több mint az eldöntés tétele). Eljárás Lin_Keresés i:=1 Ciklus amíg i<=n És A[i] nem T tulajdonságú Van:=i<=N Ha van akkor Ki: i // csak egy elemet keres b) A logaritmikus keresés tétele Rendelkezésre áll egy N elemű növekvő sorrendbe rendezett (!!!!!) sorozat és egy keresett elem (X). Olyan algoritmust kell írni, amely eldönti, hogy szerepel-e a keresett elem a sorozatban, s ha igen, akkor megadja a sorszámot. Most kihasználjuk, hogy a sorozat rendezett. Ez alapján bármely elemről el tudjuk dönteni, hogy a keresett elem előtte vagy utána van-e, esetleg megtaláltuk. Az eljárás lényegének megértéséhez tudni kell, hogy az E és az F változóknak kiemelt szerepük van: mindig annak a részintervallumnak az alsó és felső végpontjai, amelyben a keresett elem benne van. Eljárás Log_Keresés E:=1: F:=N

Ciklus // K-ban lesz az intervallum közepe K:=(E+F) DIV 2 // A DIV továbbra is egész osztás Ha A[K]<X akkor E:=K+1 Ha A[K]>X akkor F:=K-1 Amíg E>F vagy A[K]=X // Ha összeért a két részintervallum, vagy megtaláltam, akkor vége Van:=E<=F Ha van akkor Sorsz:=K Pld. Legyen a sorozat 1, 2, 6, 8, 12, 22, 27 és a keresett elem a 22. Mivel E=1 és F=7 ezért K=4, ezért az első lépésben a (1+7) DIV 2, azaz a 4. elemét, a 8-at hasonlítjuk a keresetthez, vagyis a 22-höz. Mivel a 8<22 ezért A egyenlő lesz öttel (K+1), így most már csak az 5. és a 7. elem között keressük a 22-t, vagyis egy hasonlítással átvizsgáltuk a sorozat felét. 2. Egy sorozathoz egy sorozat hozzárendelése A kiválogatás tétele Egy N elemű sorozat összes T tulajdonsággal rendelkező elemét kell meghatározni. Gyűjtsük a kiválogatott elemek sorszámait a B vektorban! Eljárás Kiválogat j:=0 // Nem szabad elfelejteni Ciklus i:=1-től N-ig Ha a[i] T tulajdonságú akkor j:=j+1 B[j]:= i // a sorszámot tároljuk

Itt is azért tároljuk az indexeket, mert így kevesebb helyet foglal a B[] vektor a memóriából. Ha ki is kell íratni az A[] vektor T tulajdonságú elemeit, akkor az a következőképpen történhet: Ciklus i:=1-től j-ig // azért megy j-ig a ciklus, mert b-nek j db eleme van Ki: A[B[i]] Az A[B[i]] az a vektor B[i]-edik elemét jelenti. Ha pl. i=1 és a B[i] (a B vektor i-edik eleme) egyenlő 5, akkor A[5]-öt, azaz a vektor 5. eleme kerül kiírásra. 3. Több sorozathoz egy sorozat hozzárendelése Rendezés minimum-kiválasztással A módszer lényege: A felesleges cserék kiküszöbölése érdekében két segédváltozó bevezetésére van szükség. Az ÉRTÉK nevű változó tartalmazza az adott menetben addig megtalált legkisebb elemet, az index pedig annak vektorbeli sorszámát, indexét. Az A vektor elemeit mindig az ÉRTÉK változó tartalmával hasonlítjuk össze. Ha ÉRTÉK-nél kisebb elemet találunk, azt betesszük az ÉRTÉK nevű változóba és az index-ben megjegyezzük a szóban forgó elem indexét. A menet végére az ÉRTÉK a vektor soron következő legkisebb elemét tartalmazza, az index pedig azt a sorszámot, ahol ezt az elemet találtuk. Csak a menet utolsó lépésében van szükségünk cserére, amikor az ÉRTÉK-ben lévő legkisebb elemet a helyére tesszük. Eljárás MinKivRend Ciklus cikl:=1-től N-ig index:=cikl; ÉRTÉK:=A[cikl] Ciklus j:= cikl+1-től N-ig Ha ÉRTÉK>A[j] akkor ÉRTÉK:=A[j]; index:=j A[index]:=A[cikl]; A[cikl]:=ÉRTÉK Rendezés maximum-kiválasztással

Eljárás MaxKivRend r:=n Ciklus amíg r>1 i:=1; m:=a[1]; k:=1 Ciklus amíg i<r Ha A[i]>m akkor A[k]:=A[r]; A[r]:=m r:=r-1 Buborékos rendezés A módszer lényege M:=A[i]; k:=i Végigmenve az adatsort tartalmazó vektoron minden szomszédos elempárt növekvő sorrendbe rakunk, azaz meghagyjuk helyükön, vagy megcseréljük őket aszerint, hogy jó sorrendben voltak vagy sem. Egy ilyen menet végén a legnagyobb elem a vektor végére kerül. Ugyanezt a páronkénti cserét végrehajtjuk a még rendezetlen A[1..(n-1)] részvektoron. Ezzel a második legnagyobb elem az A[n-1] elem helyére kerül. Addig folytatjuk az egyre rövidebb rendezetlen sor párcseréit, míg minden elem a helyére kerül. Egy menetben a maradék sor legnagyobb eleme, mint egy buborék halad végig az adatsoron. Innen származik a módszer neve. Eljárás Buborék r:=n; csere:=hamis Ciklus amíg r>1 és Nem csere csere:=igaz

Ciklus i:=1-től r-1-ig r:=r-1 Ha A[i]>A[i+1] akkor //itt a páronkénti összehasonlítás Csere(A[i], A[i+1]) csere:=hamis A buborékrendezési algoritmust a következőképpen javíthatjuk: A módszer azon az észrevételen alapul, hogy egy menetnek az eredményeként a maximális elem a sor végére kerül. Eszerint a menet közbeni adatcseréket megtakaríthatjuk, ha a maximális elemet és ennek helyét megállapítjuk és csak a menet végén egyetlen cserével tesszük a helyére. Ezt a módszert maximum-kiválasztásos rendezésnek nevezzük. A metszetképzés tétele Rendelkezésünkre áll egy N és egy M elemű halmaz az A[] és B[] vektorokban. Készítsük el a két halmaz metszetét a C[] vektorba. (Két halmaz metszetébe azok az elemek tartoznak, amelyek mindkettőben szerepelnek.) Eljárás Metszet szamol:=0 Ciklus i:=1-től N-ig // vesszük A[] elemeit j:=1 Ciklus amíg j<=m és A[i]<>B[j] //amíg nincs az A[i]-vel egyező, vagy van még elem j:=j+1 // vesszük B[] elemeit Ha j<=m akkor // ha volt egyező eleme

szamol:=szamol+1; C[szamol]:=A[i] //betesszük C[] vektorba Vesszük az egyik halmaz (A) elemeit sorban, először az elsőt, majd a másodikat, stb. (ezért indul az első ciklus). Majd a másik halmaz (B) elemeit olvassuk, de csak addig, amíg van a halmaznak meg nem vizsgált elme vagy nem találtunk az A-belivel egyezőt. Ellenkező esetben befejezzük az olvasást, azaz vége a ciklusnak. Ha még nem olvastuk végig a B halmazt (j<=m) az csak azért lehet, mert találtunk közös elemet. Ezt az elemet rakjuk C[] vektorba. Az egyesítés (unióképzés) tétele Rendelkezésre áll egy N és egy M elemű halmaz, az A[] és a B[] vektorban ábrázolva. Készítsük el a két halmaz egyesítését a C vektorba! Két halmaz egyesítésében azok az elemek tartoznak, amelyek legalább az egyikben szerepelnek. Eljárás Unió Ciklus i:=1-től N-ig szamol:=n C[i]:=A[i] // először az A[] elemei átkerülnek a C[]-be Ciklus j:=1-től M-ig i:=1 Ciklus amíg i<=n és A[i]<>B[j] // B[]-beli elemhez keresünk A[]-ból Ha i>n akkor //ha nincs közös elem szamol:=szamol+1 C[szamol]:=B[j] //akkor berakjuk az elemet C[]-be

Ha ki is szeretnénk íratni C[]-t, akkor ahhoz célszerű ciklust szervezni: Ciklus cikl:=1 től szamol-ig //szamol eleme van C[]-nek Ki: C[cikl] Az algoritmus csak abban tér el a metszetképzéstől, hogy először az A[] vektor tartalmát bemásoljuk C[]-be (így annak már N eleme van) majd B[] minden egyes eleméhez (ezért megy a ciklus M-ig) keresünk A[]-beli egyezőt. Ha nem találunk (azaz i>m), akkor rakjuk C[]-be B[j]- t. Az összefuttatás tétele Rendelkezésre állnak két rendezett sorozat elemei. Állítsunk elő egy sorozatot úgy, hogy az eredeti sorozatok minden elem szerepeljen benne, és ez a sorozat is rendezett legyen! A feladat tulajdonképpen az uniótétel speciális esete: uniót kell előállítani úgy, hogy a rendezettség megmaradjon. A két sorozat: A[N], B[M] Az eredmény: C[N+M]. A megoldásban a +α jelöli a számítógépen ábrázolható legnagyobb értéket. Ezt alkalmazzuk végjelként a megoldás egyszerűsítése érdekében. Eljárás Összefuttat i:=1: j:=1: k:=0 A[N+1]:= +α: B[M+1]:= +α Ciklus amíg i<n+1 vagy j<m+1 K:=k+1 Elágazás A[i]<B[j] esetén C[k]:=A[i]: A[i]>B[j] esetén C[k]:=B[j]: j:=j+1 A[i]=B[j] esetén C[k]:=A[i]: : j:=j+1

Mivel elképzelhető, hogy egyik vektor elemei elfogynak, így csak a másikból kell olvasni az elemeket és rakni át C[]-be. Ezért rakjuk a vektorok utolsó értékes eleme után a lehető legnagyobb értéket, hiszen így a másik vektorban minden elem kisebb lesz ettől a nagy értéktől, vagyis már csak az értékes elemeket tartalmazó vektort olvassuk.