Algoritmusok Dr. Schuster György, Sándor Tamás,

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Algoritmusok Dr. Schuster György, schuster.gyorgy@kvk.bmf.hu Sándor Tamás, sandor.tamas@kvk.bmf.hu"

Átírás

1 Algoritmusok Dr. Schuster György, Sándor Tamás, 1. Algoritmus fogalma Az algoritmus olyan lépéssorozat, amely egy feladat megoldása során véges számú lépésben végeredményre jutunk. Két dolgot kell kiemelni. Az egyik, hogy véges számú lépésben jutunk eredményre. Ez azért lényeges, mert az alkalmazott algoritmust későbbiekben le is kell tudni programozni. A másik lényeges szempont, hogy eredményre jutunk, hiszen készíthetünk olyan lépéssorozatot, amely sem véges, sem végtelen lépésben nem vezet eredményre. Vannak persze olyan feladatok, amelyek nem, vagy csak korlátozott mértékben algoritmizálhatók, de ezen feladatok megoldása már a mesterséges intelligencia témakörébe tartoznak. Az algoritmusnak az alábbi feltételeket kell teljesítenie: az algoritmust alkotó utasítások legyenek egyértelműek, utasítások gépiesen végrehajthatók, és a megoldás véges számú lépésben megkapható. Az olyan algoritmust, amelyet egy számítógép végre tud hajtani, programnak nevezzük. A számítógépi program abban különbözik egy neki megfelelő logikai algoritmustól, hogy a programnak nevezett algoritmus szigorú formai előírásokhoz, jelölésrendszerhez kötött. Ilyen lehetséges jelölésrendszer a C programozási nyelv. A feladat kidolgozásában absztrakt objektumokat, absztrakt algoritmus elemeket alkalmazunk. Ez azt jelenti, hogy nem csak a program nyelvekben előre definiált szimbólumokat használjuk fel, hanem saját magunk által definiált jelöléseket is használhatunk az általunk definiált művelet csoportok végrehajtására. Ugyanígy nemcsak a megszokott adatszerkezeteket használhatjuk, hanem létrehozhatunk újakat. Az adatok és eljárások ilyen absztrakciója lehetővé teszi, hogy adatok és eljárások felhasználásakor ne kelljen foglakoznunk az adatok felépítésével, vagy az eljárások műveletelemeivel. Ha az algoritmus elkészítésénél a top-down (felülről lefelé) történő program finomítás elvét alkalmazzuk, akkor az egyes részletek finomítása során az algoritmusainkat egyre pontosabban tudjuk megfogalmazni. A finomításnak a következő elveket célszerű betartani: adott szint részfeladatainál egyszerre végezzük el az eljárások és az adatok szükséges finomítását, ha valamilyen változtatást végeztünk, vizsgáljuk meg milyen hatása lesz a kapcsolódó eljárások művelet végrehajtására, az adatszerkezeteire. minden változtatást dokumentáljunk, hiszen ha a változtatás nem váltotta be a hozzáfűzött reményeket, akkor legyen lehetőségünk visszatérni a változtatás előtti állapothoz Algoritmus leíró eszközök

2 Az algoritmus leíró eszközök feladata, az hogy általánosan megfogalmazott feladat megoldási lépéssorozatot programozhatóság szempontjából konkrétan megadjuk. Az algoritmus leíró eszközöknek alapvetően kétfajtáját különböztethetjük meg. Az egyik ilyen módszer a szöveges, a másik a grafikus leírásmód Szöveges Szöveges megfogalmazás A szöveges megfogalmazás során saját szavainkkal írjuk le a feladat megoldásának lépéseit. Ekkor külön előre elfogadott szabályokhoz nem kell alkalmazkodni, egyedi leírásmódot választhatunk Pszeudokód A pszeudokód a beszélt nyelv mondatait alkalmazó olyan utasítás sorozatból áll, amelyek egy-egy részfeladat megoldását jelentik. A pszeudokód olyan mondatszerű leírás, amely alapvetően háromféle vezérlési szerkezetet alkalmaz: felsorolást (szekvenciát), Esetszétválasztást (szelekciót, kiválasztást), Ismétlést (ciklust, iterációt). A következőkben felsorolásszerűen megadjuk azokat a legfontosabb mondatszerű szerkezeteket, amelyek segítségével minden programnyelvtől függetlenül írhatjuk le az algoritmusainkat: 1. Beolvasó utasítás Be:<változók listája>[beolvasandó paraméterek jellemzői] INPUT: <változók listája>[beolvasandó paraméterek jellemzői] 2. Kiíró utasítás Ki:<változók listája>[kiíratandó paraméterek jellemzői] OUTPUT:<változók listája>[kiíratandó paraméterek jellemzői] 3. Értékadó utasítás <változó>:=<kifejezés> 4. Feltételes utasítások Ha <feltétel> akkor <utasítások> Feltétel vége

3 IF <feltétel> THEN <utasítások> Ha <feltétel> akkor <utasítások1> egyébként <utasítások2> Feltétel vége IF <feltétel>then <utasítások1> ELSE <utasítások2> Esetszétválasztás <változó> <eset 1> esetén <utasítások1> <eset 2> esetén <utasítások2>... <eset n> esetén <utasítások> máskülönben <utasításokn+1> Esetszétválasztás vége SWITCH <változó> <eset 1> CASE <utasítások1> <eset 2> CASE <utasítások2>... <eset n> CASE <utasítások> DEFAULT <utasításokn+1> Ciklusszervező utasítások Növekményes ciklus: Ciklus ciklusváltozó:=kezdőérték-től végérték-ig lépésköz-zel ciklustörzs utasításai Ciklusvég FOR ciklusváltozó:=kezdőérték TO végérték STEP <lépésköz> ciklustörzs utasításai A lépésköz lehet állandó érték, vagy változó nagyságú érték. Elöltesztelő ciklus: Ciklus amíg <feltétel> ciklustörzs utasításai Ciklus vége

4 WHILE <feltétel> ciklustörzs utasításai END Utántesztelő ciklus: Ciklus ciklustörzs utasításai amíg <feltétel> Ciklus vége REPEAT ciklustörzs utasításai END UNTIL <feltétel> Eljárások Eljárásnév (eljárás bemenő paraméterek) eljárástörzs utasításai Eljárás vége Eljárásnév (eljárás bemenő paraméterek) eljárástörzs utasításai END Programok Program: Programutasítások Program vége Program: Programutasítások Program END Példa pszeudokód alkalmazására Írjuk ki az ASCII kód táblából a kisbetűket egymás után!

5 Ciklus betu:= a betu<= z lépésköz:=1 Ciklus vége Ki:=betu Grafikus Folyamatábra A folyamatábra esetén az egyes algoritmuslépésekhez egy-egy grafikus megjelenítő egységet lehet hozzárendelni. Az egyes elemek jelentése az alábbiakban kerül ismertetésre. Lineáris program Elágazások Kétirányú elágazás Többirányú elágazás

6 Ciklusok Elöltesztelő ciklusok Utántesztelő ciklusok Számszerű végrehajtás i: ciklus számláló N: Program modul (szubrutin) Beviteli és kiviteli eszközök A folyamatábra lehet részletező, amikor egyes lépéseket külön folyamatábra elemként kerül megadásra, míg lehet áttekintő folyamatábrát is készíteni. Az áttekintő folyamatábrákat több szinten, hierarchikusan is megjeleníthetjük, azaz az egyes részproblémákat további részproblémákra bonthatjuk, egészen addig, amíg a részletező folyamatábrához nem jutunk Struktogram Feldolgozási utasítás Egyszeri elágazás Többszörös elágazás

7 Programhurok elővizsgálattal Programhurok utóvizsgálattal Hurok, hurkon belüli megszakítási feltétellel A fenti hat alapelemből összetett stutúrablokkok állíthatók elő. Az elkészült programterv általában több egymással alá, vagy felérendeltségi viszonyból áll. Ezeket a kapcsolatokat fadiagrammal ábrázolják. A kötelezően előírt a pontosan egy be- és pontosan egy kimenet, valamint az az előírás, hogy az alárendelt struktúrablokkokat csak a fölérendeltségi viszonyon keresztül lehet megközelíteni, biztosítva a program áttekinthetőségét, módosíthatóságát, és az egyes modulok külön-külön tesztelhetőségét Állapotgráf A gráf csúcsok (csomópontok) és élek halmazából áll. Gráfot kapunk, amikor megadjuk a különféle tárgyaknak (dolgoknak), és a tárgyak közötti kapcsolatoknak a halmazait. A gráfban a dolgokat a csúcsok, a dolgok közötti kapcsolatokat az élek írják le. 2. Algoritmusok fajtái

8 2.1. Tömbáthelyező algoritmus A tömbáthelyezés az egyik legegyszerűbb algoritmus. A memóriában elhelyezkedő adott hosszúságú tömböt mozgatjuk egy másik, rendelkezésre álló memória területre. A tömb kétféleképpen lehet definiálva, vagy megadjuk a hosszát, vagy a tömbben van egy speciális lezáró elem. Például ilyen elem lehet a pozitív egészeket tartalmazó többen a nullaértékű elem. A kérdés az, hogy hogyan helyezhetjük át kérdéses tömbünket egy másik tömbbe. Erre is két lehetőség van. Végezhetjük a műveletet a töm elejétől a vége felé növekvő index értékek mellett és végezhetjük fordított irányban a legmagasabb indextől a legkisebb felé. Mondhatnánk azt, hogy teljesen fölösleges két algoritmust gyártani, ha a kettő azonos eredménnyel jár. Ez a kijelentés az esetek nagytöbbségében igaz, azonban van két speciális eset, mikor nem mindegy, hogy az áthelyezés milyen irányba történik. Amennyiben a tömbáthelyezés nem a fent említett két eset valamelyike általában növekvő indexek felé haladva végezzük a műveletet. Nézzük meg ezt egy példán. X X(I) Y Y(I) N I a forrás tömb neve, az X tömb I-edik eleme, a cél tömb neve, az Y tömb I-edik eleme, a tömb elemeinek száma, indexváltozó (külső index), 1. tömbáthelyezés 2. FOR I:=0 I<N STEP 1 DO Y(I):=X(I); 5. END; 6. END. Az algoritmus tulajdonképpen egy for ciklus, amely a forrás tömb elemeit átírja a cél tömbbe. Amennyiben a nem a tömb mérete van megadva, hanem lezáró elemet (termináló elemet) alkalmazunk, akkor a program a következő: 1. tömbáthelyezés lezáró elemmel 2. I:=0; 3. WHILE(X(I)<>lezáró elem Y(I):=X(I); 6. I:=I+1; 7. END; 8. END. Itt nem tudjuk a tömb hosszát, így folyamatosan figyelni kell a lezáró elemet, és miután nem alkalmazhattunk számláló jellegű ciklust (FOR-t), ezért az I kezdeti értékét be kellett állítanunk. Lásd 2. sor. Ez a fajta tömbáthelyezés nem alkalmas a csökkenő indexű mozgatásra, mert nem tudjuk, hogy hol a tömb eleje. Amennyiben az az eset áll fent, hogy a mozgatandó tömbünk belelóg a cél tömb területébe, problémák adódnak. Nézzük a következő példát: adott egy tízelemű tömbünk, amelyet egy elemmel jobbra (növekvő index irányba szeretnénk mozgatni úgy, hogy az alacsony indexektől kezdjük az áthelyezést.

9 X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) üres Y(0) Y(1) Y(2) Y(3) Y(4) Y(5) Y(6) Y(7) Y(8) Y(9) Az első lépésnél fogjuk az X 0-ás indexű elemét és betesszük az Y 0-ás indexű elemébe, amely nem más, mint az X 1-es indexű eleme. X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) üres Y(0) Y(1) Y(2) Y(3) Y(4) Y(5) Y(6) Y(7) Y(8) Y(9) A második lépésben az X 1-es indexű elemét tesszük be az Y egyes indexű elemébe, amely megegyezik az X 2-es elemével Igen, de miután az X 1-es indexű eleme már megegyezik az X 0-ás elemével az X 2-es eleme is meg fog egyezni az X 0-as elemével. Könnyen belátható, hogy az algoritmus végén az összes érintett elem felveszi az X 0-ás elemének értékét. Így az algoritmus nem helyes. A megoldás, hogy nem növekvő, hanem csökkenő index irányokban mozgassuk a tömböt. X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) Üres Y(0) Y(1) Y(2) Y(3) Y(4) Y(5) Y(6) Y(7) Y(8) Y(9) Az első lépésnél a 9-es elemeket mozgatjuk át. X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) Y(0) Y(1) Y(2) Y(3) Y(4) Y(5) Y(6) Y(7) Y(8) Y(9) Majd a 8-ast. X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) Y(0) Y(1) Y(2) Y(3) Y(4) Y(5) Y(6) Y(7) Y(8) Y(9) Majd a hetest. X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) Y(0) Y(1) Y(2) Y(3) Y(4) Y(5) Y(6) Y(7) Y(8) Y(9) Az algoritmus végén a következő képet kapjuk: X(0) X(1) X(2) X(3) X(4) X(5) X(6) X(7) X(8) X(9) Y(0) Y(1) Y(2) Y(3) Y(4) Y(5) Y(6) Y(7) Y(8) Y(9) Igaz, hogy az X tömb megsérült, de ez ebben az esetben nem kerülhető ki, azonban adatvesztés nem történt. Hasonló a helyzet, ha az X tömb jobbra esik az Y tömbtől és az adatmozgatás csökkenő indexek felé történik, ebben az esetben az előző példa alapján belátható, hogy az adatáthelyezés helyes módja az, ha növeljük az indexeket. Ökölszabály: Ha a forrás és a cél tömbök egymást átfedik, akkor az átfedés (adatmozgatás) irányával ellentétesnek kell lennie az indexváltoztatás irányának. Vagyis: Ha a céltömb előrébb van, mint a forrás, akkor növekvő indexekkel kel dolgoznunk. Ha a céltömb hátrébb van, mint a forrás, akkor csökkenő indexeket kell alkalmaznunk Csere algoritmus

10 A legegyszerűbb algoritmus, amely minden további rendező algoritmus alapja az úgynevezett csere algoritmus. Ez tulajdonképpen egy nagyon egyszerű aprócska művelet, melynek az a célja, hogy két különböző változóban lévő értéket megcseréljen. A probléma annyira egyszerű, hogy az mondhatjuk, hogy tulajdonképpen kár rá szót vesztegetni. Sajnos a tapasztalat azt mutatja, mégis megéri. Tegyük fel, hogy van két változónk, legyenek ezek a és b legyen a értéke 5, b értéke 6, a cél, hogy a-ban legyen 6 és b-ben 5. Mondhatnánk azt, hogy a-nak adjuk át b értékét és b-nek a értékét. Ez a szokásos programozási nyelveken nem valósítható egy lépésben 1, hanem legalább két programsort igényel. Ekkor viszont az első lépésben a már felveszi a b értékét, amit a fordított értékadásnál csak visszaadhatunk b-nek és a eredeti értéke elvész. A problémát úgy oldhatjuk meg, hogy egy segédváltozót használunk, - nevezzük c-nek -, és első lépésként ebbe a c változóba tesszük be a értékét, - ez az érték már biztonságban van. A következő lépésben a-ba tesszük b értékét, így a csere első fele megvalósult. A harmadik lépésben b-be tesszük c értékét, amely ugye a eredeti értékét tartalmazta, így a telje csere megtörtént. Nézzük ezt matematikai írásmódban is: 1. c:=a; Az a eredeti értéke az átmeneti c változóba kerül. 2. a:=b; A b értéke átkerül a-ba. 3. b:=c; A c, vagyis az átmeneti változó értéke átkerül b-be. A cserét a következőkben a következő szimbólummal jelöljük: 2.3. Rendező algoritmusok A rendező algoritmusok rendezetlen tömbök valamilyen módon történő rendezésére szolgálnak. A mód lehet növekvő és csökkenő sorrend. Mint azt az előző fejezetben már elmondtuk a rendezés alapja a csere algoritmus. Cserét akkor hajtunk végre, ha az éppen aktuális két vizsgált elem nem felel meg a rendezés módjának. Azért, hogy ne kelljen két folyamatábrát, illetőleg algoritmust leírnunk a növekvő és csökkenő sorrendű rendezésre, bevezetünk egy jelölést. Ez a jelölés csak a kisebb és nagyobb relációkra igaz. A jelölés a következő: a > b a < b Ha ezt a jelet látjuk egy relációs kifejezésben, akkor a kifejezés akkor igaz, ha az éppen aktuális reláció teljesül. Érthetőbben a két lehetőség közül ez akkor igaz, ha kisebb esetben a < b, a nagyobb esetben a > b. Ez a fentivel ellentétes eset, a kifejezés akkor igaz, ha a reláció nem teljesül. A félreértések elkerülése végett meg kell jegyeznünk, hogy ilyen műveleti jel nem létezik, csak mi vezettük be, hogy a leírást egyszerűsítsük Egyszerű buborékrendezés Az egyszerű buborékrendezés a rendezések közül a legegyszerűbb. Működése az egymást követő elemek összehasonlításán és cseréjén alapul. 1 Itt kellmegjegyeznünk, hogy ez az assembly nyelvekre nem vonatkozik. Nagy többségükben létezik elemi csere utasítás.

11 Vegyünk példának egy hatelemű tömböt, amely véletlenszerűen fel van töltve számokkal. A tömb: A példánkban a rendezés növekvő-sorrendű lesz. Az algoritmus veszi az első elemet és összehasonlítja a következővel, jelen esetben az 5-öt a 4-el, miután az összehasonlítás eredménye nem kedvező cserét hajt végre A következő összehasonlítás az 5 és a hat között történik meg, itt az eredmény kedvező, nem történik csere Az eredmény az első menet után: Mint látjuk az algoritmus egyszer végigment a tömbön, de a tömb még nem rendezett, tehát a rendezést tovább kell folytatni Az eredmény a második menet után: Láthatjuk, hogy még mindig nem vagyunk készen. A kérdés az, hogy hányszor kell ezt megtennünk, hogy a tömb teljesen rendezett legyen? A válaszhoz a legrosszabb esetet kell figyelembe vennünk, ez az az eset, ha tömb nem véletlenszerűen rendezetlen, hanem ha fordított módon rendezett, mint a számunkra kedvező rendezés. Az előzőekben láthattuk, hogy a már a tömb első rendezésekor a legnagyobb (növekvő sorrendű rendezés esetén) elem kikerül a tömb végére, a következő körben ez elé az elem elé kerül a második legnagyobb és így tovább. Miután a legkisebb elemet már nincs értelme összehasonlítani a senkivel, mert egyedül van, ezért a tömb rendezéseinek maximális száma a tömb elemeinek a számánál egyel kevesebb. Most már megírhatjuk az algoritmust pszeudo nyelven. A kiindulási paraméterek: X X(I) N I J a tömb neve, az X tömb I-edik eleme, a tömb elemeinek száma, index változó (külső index), index változó (belső index). 2 Azt a a művelet sort, amikor az algoritmus egyszer végigolvassa a tömböt, jobb híján rendezésnek nevezzük. Ha tehát a rendezést jelző nélkül használjuk erre gondolunk.

12 buborék1 FOR I:=0 I<N-1 STEP 1 DO FOR J:=0 J<N-1 STEP 1 DO IF X(J)<X(J+1) THEN X(J) X(J+1); END; END; END. Ugyanezt az algoritmust láthatjuk a folyamatábrán is. Miután a vizsgálat és a cserét (a rendezés magja) az algoritmus N-1-szer hajtja végre minden egyes rendezés esetén és a rendezéseket is N-1-szer hajtja végre, az algoritmus futási ideje O(N-1) Javított buborékrendezés Az előzőekben láthattuk, hogy a rendezési eljárás már első rendezésében a legnagyobb elem a tömb végére kerül. Ha ez az elem bizonyítottan a legnagyobb, akkor vele nem kell foglalkozni. Minden egyes rendezés esetén tehát a rendezendő adatállomány eggyel csökken, amely azt jelenti, hogy a belső ciklus egyre rövidebb lesz. Az előző jelöléseket felhasználva a pszeudo program a következő: buborék2 FOR I:=0 I<N-1 STEP 1 DO FOR J:=0 J<N-1-J STEP 1 DO IF X(J)<X(J+1) THEN X(J) X(J+1); END; END; END. Figyeljünk fel arra, hogy a lényeges különbség az előző algoritmussal szemben, hogy a belső ciklus nem N-1-ig megy, hanem N-1-J-ig. Ez látható a mellékelt folyamatábrán is. A fentiek alapján az algoritmus futásideje a következőképpen számítható: a külső ciklus első lefutásakor 4 a rendezés magja N-1-szer hajtódik végre, a második futáskor N-2-szer, a harmadik futáskor N-3-szor, 3 Az O jelölest esetünkben arra használjuk, hogy egy algoritmus futási idejére aszimptotikus közelítő, vagy felső korlátot adjunk. Esetünkben a ciklus magját úgy tekintjük, mintha egységnyi ideig futna bennük a program. Persze tudomásul kell venni, hogy ez nem igaz, mert ha csak egyetlen elágazás is van a magban ez a megközelítés nem pontos. Azt is tudomásul kell vennünk, hogy a cikluson vagy ciklusokon kívül is fut a program, amely szintén időbe kerül, sőt ez az idő összemérhető a mag futási idejével. Ezt az időt elhanyagoljuk. Tehát láthatjuk, hogy az O jelölés csak közelítés, de azért elég jó támpontot ad, hogy egy algoritmust jellemezzünk vele. Olvasni úgy célszerű ezt a jelölést, hogy az algoritmus futásideje durván.. Létezik egy másik jelölés a o, ez az aszimptotikus alsó korlátot jelöli. 4 A mi esetünkben mindig nulláról kezdünk számolni, hogy ez a C programozási nyel esetén ne okozzon problémát, thát az első lefutás a ciklusváltozó 0-ás értékét jelenti.

13 : : az N-3-dik futáskor N-1-(N-3), vagyis kétszer, az N-2-dik futáskor egyszer, az N-1-dik futáskor egyszer sem. Ez egy N-2 elemű számtani sorozat, melynek az első eleme N-1 az utolsó eleme 1 és a differencia értéke 1. Az elemek számának összege (N-1)N/2, tehát a futásidő O((N-1)N/2) Vegyünk példának egy 10 elemű tömböt az első, nem javított algoritmus futásideje 81, a másodiké Kétszeresen javított buborékrendezés A buborékrendezés tovább javítható, ha figyeljük, hogy egy rendezésen belül történt-e csere. Ennek figyelése ugyan időbe telik, mert a programnak járulékos feladatai vannak, de kedvező esetben ez a munka busásan megtérül. Vegyünk fel egy új változót és a belső ciklus előtt állítsuk hamis logikai értékre. A belső ciklus a szokott módon végig olvassa a tömböt, és ha kell, akkor végrehajtja a cseréket. Mikor egy csere bekövetkezett, a fent említett változókat állítsuk igaz értékre. Mikor a belső ciklusból kikerültünk láthatjuk, történt-e csere. Ha történt csere nem biztos, hogy készen vagyunk, viszont ha nem történt, akkor nincs értelme tovább vizsgálódnunk, mert a tömb már rendezett. A folyamat nyomon követhető a folyamatábrán buborék3 FOR I:=0 I<N-1 STEP 1 DO K:=FALSE FOR J:=0 J<N-1-J STEP 1 DO IF X(J)<X(J+1) THEN X(J) X(J+1); K:=TRUE; END; END; IF K=FALSE THEN vége; END; END. Az algoritmus akkor is működik, ha a belső ciklus nem számláló jellegű, ebben az esetben mérlegelni kell, hogy mekkora tömbökön dolgozunk. Ha a belső ciklus egy egyszerű WHILE, akkor is meg fog állni az algoritmus, mert el fog jutni egy olyan állapotba, ahol a rendezési kritériumnak teljesen megfelel. Ezzel azonban az a probléma, hogy a legkedvezőtlenebb esetben, mikor a tömb kiinduló állapota fordított rendezettségű, mint az általunk megkívánt, akkor egyel több ciklust hajt végre a gép. Az, hogy ez

14 probléma valós, vagy nem, minden esetben az adott programozási feladat határozza meg, azonban azt se felejtsük el, hogy egy számláló ciklus mindig hosszabb, mint egy egyszerű csak feltételt vizsgáló ciklus. A futási időről még nem szóltunk, ebben az esetben a futási idő nem jósolható, csak korlátai adhatók meg, ezek: az alsó korlát o(1), a felső korlát O((N-1)N/2)

15 Szélsőérték kiemeléses rendezés A cím eléggé misztikus, a gyakorlatban ezt a rendezési eljárást a szakirodalom minimum, vagy maximum kiemeléses eljárásnak nevezi. Az előzőekhez hasonlóan itt is egyben tárgyaljuk a két rendezési irányt, így lett a cím. Az algoritmus működése a következő: Veszi a tömb első elemét és az utána következőket egyenként összehasonlítja vele, ha szükséges a két elemet felcseréli. A csere után már az összehasonlítás alapja az új elem. Könnyen belátható, ha mondjuk növekvő sorrendbe rendezünk, csere akkor következik be, ha a tömbből vett elem kisebb, mit az első. Az is belátható, hogy a tömb végigolvasása után a legkisebb elem lesz legelöl. A következő rendezésben már nem vizsgáljuk az első elemet, mert az már bizonyítottan kedvező (legkisebb vagy legnagyobb) számunkra, hanem a következőt kezdjük vizsgálni. Nézzük a folyamatábrát és a pszeudo kódot. Az alábbi pszeudo programban a K változót használjuk fel jelzésre. szélső FOR I:=0 I<N-1 STEP 1 DO FOR J:=I+1 J<N STEP 1 DO IF X(I)<X(J) THEN X(I) X(J); END; END; END. Az algoritmus futási ideje O((N-1)N/2). Sajnos ez az algoritmus nem javítható Shell rendezés Ez a rendezési algoritmust akkor célszerű használni, ha igen nagy tömbökkel dolgozunk. Az algoritmus alapötlete az, hogy ne az egymás melletti elemeket vizsgáljuk, hanem előbb a távoliakat, majd csökkentsük a távolságot, rendezzünk újra, majd tovább csökkentsük a távolságot egészen addig, amíg a távolság egy nem lesz, ahol már tulajdonképpen a szomszédos elemeket vizsgáljuk.

16 Az ábra mutatja a távolság változását. A következő kérdés az, hogy milyen módon csökkentsük a távolságot. Eltekintve a matematikai bizonyítástól a következőkben az intervallumot mindig az előző felére választjuk. Az algoritmus igen bonyolultnak tűnik az első pillantásra, de rendkívül hatékony. X N I J K a tömb neve, a tömb elemeinek száma, indexváltozó (középső index), indexváltozó (belső index), az cserélendő elemek távolsága. Nagyon lényeges, hogy a K egész típusú változó. Ez azt jelenti, ha kettővel osztjuk, akkor az osztás eredménye is egész lesz 5. A program sorait megszámoztuk, hogy a magyarázatot könnyebb legyen követni. 1. Shell 2. K:=N/2; 3. WHILE K>0 DO FOR I:=K I<N STEP 1 DO FOR J=I-K J>=0 AND X(J)<X(J+K) STEP K DO (J) X(J+K); 8. END; 9. K:=K/2; 10. END; 11. END. A program második sorában megadjuk a távolság kezdőértékét, ez tömb mértének fele lefelé kerekítve 6. 5 Azért kell, hogy az osztás eredménye egész legyen, mert igen nehéz elképzelni tört indexű tömböket. 6 A megfogalmazás nagyon hivatalos. Itt, ha a tömb hossza páratlan, akkor az osztás után lesz egy törtrész, ezt egyszerűen elhagyjuk. Abban az esetbe, ha a tömb mérete páros nincs gond, mert a kettővel való osztás eredménye is egész.

17 A harmadik sor a külső ciklus feje, amely azt mondja meg, hogy meddig csökkenthetjük a távolságot. Eszerint a minimális távolság egy lehet. A középső ciklus, mely az 5. sorban kezdődik és a 8.-ban ér véget, az éppen aktuális K, vagyis a távolság értékétől az N ig, vagyis a tömb maximális értékéig megy. A hetedik sorban kezdődik a belső ciklus ennek működése az alábbi pontokban van összefoglalva: A J változó az I-K értéket veszi fel, ami kezdetben 0. A belső ciklust egyrészt addig csinálja, míg J értéke nem negatív (J>=0), másrészt addig csinálja, míg a megfelelő tömb elemek nem felelnek meg a rendezés sorrendjének. Ha belép a ciklusba, akkor végrehajtja a cseréket. Ha program kilépett a belső ciklusból, a középső ciklusban előbbre lép egyet és a hetedik sort újra végrehajtja. Ha a középső ciklus is végetért, a K értéket megfelezi és a külső ciklust folytatja. Az algoritmust érdemes lenne egy példán lépésről - lépésre végigkövetni, azonban ettől hely hiányában eltekintünk. Javasoljuk az olvasónak, hogy a jegyzet végén található C programot kövesse végig a fejlesztői környezet segítségével. Érdekés kérdés az, hogy hogyan hat a törtrészek levágása a rendezési algoritmusra. Láthattuk, hogy egyszerűen elhagytuk a törtrészeket az indexeknél, persze rá voltunk kényszerítve, mivel tört index nincs. Vajon nem keletkezik hiba? Nos a választ nem bizonyítjuk, de nem, mert nagyon röviden azt mondhatjuk, hogyha az intervallum rövidebb, akkor hosszabb szakaszon vizsgálja a tömböt a középső ciklus. A Shell rendezés futási idejével nem foglalkozunk, mert leírása túl hosszadalmas Gyors rendezés (Quick-sort) Ezt a rendezést, - hasonlóan a Shell módszerhez - akkor célszerű használni, ha nagy állományokat kell kezelnünk. Az algoritmus alapötlete a következőn alapul: tekintsük a rendezendő tömböt egy intervallumnak, felezzük meg a rendezendő tömböt, vegyük annak az elemnek az értékét, amely pont a felező ponton van (az indexek törtrészét megint elhagyjuk, vizsgáljuk az intervallum bal felét és jobb felét a középső elemhez viszonyítva úgy, hogy befelé haladunk 7, ha ezek között találunk olyat, amelyek nem felelnek meg a rendezési elvnek, akkor cseréljük fel őket, ha csak az egyik oldalon találtunk, akkor a keresés végén a középső elemet is cseréljük fel, csináljuk mindezt addig, míg a jobb és balfél össze nem ér, 7 Vagyis a bal oldalon jobb felé, a jobboldalon bal felé.

18 a bal és a jobb oldalon külön külön, mint új intervallumon ismételjük az eljárást, míg az intervallum hossza nagyobb, mint 0. Ezt az utolsó pontot a legegyszerűbb rekurzív módon végezni, hiszen a rendező rutin mar meg van írva és csak a paraméterezést kell helyesen megadni. Az ábra mutatja (töredékesen, hogyan alakul az intervallum hossza a rendezés során. A pszeudo kódunkban azért, hogy nem okozzon problémát csak a növekvő sorrendű rendezést vizsgáljuk, mert az eddig használt általános jelölés nagyon megnehezítené a program megértését. Az előző példához hasonlóan itt is beszámozzuk a sorokat a könnyebb hivatkozás érdekében. A szokásostól eltérő változók: I baloldali indexváltozó, J jobboldali indexváltozó, L az intervallum bal oldala, R az intervallum jobb oldala, C az intervallum középső eleme. quick_sort C:=(X(L)+X(R))/2; I:=L; J:=R; REPEAT DO WHILE X(I)<C DO I:=I+1; WHILE X(J)>C DO J:=J+1; IF I<=J THEN X(I) X(J); UNTIL(I>J) IF L<J THEN quick_sort(l,j); IF I<R THEN quick_sort(i,r); END. A második sorban a középső elem értékét adjuk át a C változónak. A harmadik sorban a segédindexek kapnak értéket. A negyedik sorban elkezdjük a külső ciklust, amely hátultesztelő ciklus, tehát egyszer mindenképpen lefut. Az ötödik sorban elmegyünk jobbfelé a baloldalon addig, míg a balodali elemek kisebbek a középsőnél. A hatodik sorban jobbról haladunk balra, míg nem találunk olyan elemet, mely kisebb, mint a középső. Ha találtunk cserélendő elemet és a jobboldali segédváltozó nagyobb, vagy egyenlő a baloldalinal kicseréljük őket.

19 Ugyan ez a feltétel a hátultesztelő ciklusból történő kilépésre, ha a balodali index nagyobb, mint a jobboldali, akkor a ciklus befejeződött. Ezen a ponton az éppen aktuális C elemhez viszonyítva a tömb két részre van osztva, a balodalon csak a C-nél kisebb, vagy egyenlő elemek vannak, a jobboldalon csak a nagyobb, vagy egyenlők. A kilencedik sorban az eljárás meghívja saját magát olymódon, hogy a rendezendő intervalluma balodali indexe a régi intervallum balodali indexe, a jobboldali a középső elem indexe, vagy annál egyel nagyobb index. A tizedik sorban szintén egy rekurzív hívást látunk, ahol az balodali érték a középső elem indexe, vagy egyel kisebb érték és a jobboldali index a régi jobboldali index. Az algoritmus működését a folyamatábrán is nyomon követhetjük. Az algoritmus futási ideje hasonlóan a Shell módszerhez nagyon nehezen írható le, ezért ettől eltekintünk Kereső algoritmusok A kereső algoritmusok célja, hogy egy elemet keressünk meg egy halmazban valamely tulajdonsága alapján. Ebben a fejezetben tárgyaljuk a szélsőérték kereső algoritmust is Szélsőérték kereső algoritmus A feladat, hogy keressük meg egy halmazban a legnagyobb, vagy legkisebb elemet. Esetünkben legyen a kérdéses halmaz egy egydimenziós tömb. Az algoritmus működése a következő: vesszük az első elemet, és egy változóban elhelyezzük az értékét, olvassuk a tömböt, és ha találunk olyan értékű elemet a tömbben, amely a kiválasztási kritériumnak jobban megfelel beírjuk a változóba. A tömb végigolvasása után belátható, hogy a tömb kérdéses szélsőértéke a változóban lesz. Kicsit érthetőbben: szeretnénk egy tömb legkisebb elemét meghatározni, az első elemet elhelyezzük egy segédváltozóban, majd a második elemet összehasonlítjuk vele, ha az kisebb, akkor átírjuk az értéket a változóba. Ezután vesszük a harmadik eleme és így tovább. szélső_érték C:=X(0); FOR I:=1 I<N STEP 1 DO IF C >X(I) THEN C:=X(I); END; END. Láthatjuk, hogy az algoritmus rendkívül egyszerű, futási ideje O(N-1) Lineáris keresés A lineáris keresés nagyon hasonlít az előző szélsőérték kereső algoritmushoz. Itt azonban előre megadjuk, hogy mit keresünk a tömbben. Egyrészt arra vagyunk kíváncsiak, hogy van-e ilyen elem, másrészt arra, hogy hol található. A találat jelzésére használhatunk egy változó, de célszerűbb a találat index változóját felhasználni erre a célra. Miután az indexváltozó nem lehet negatív, ennek negatív értéke jelezheti, ha a keresés sikertelen volt. Ha ez 0 vagy pozitív, akkor volt találat és a változó a kérdéses elem helyét mutatja.

20 Felmerül a kérdés, hogy mi van akkor, ha több azonos elem van a tömbben. Igen könnyű meghatározni az elem első és utolsó előfordulását, erre is adunk megoldást. Az algoritmus működése a következő: a találat helyét meghatározó index változó értékét töltsük fel valamilyen negatív számmal legyen 1 -, kezdjük olvasni a tömböt, ha van találat a tömbelem indexét írjuk be helyváltozóba és... Itt van a különbség, hogy az első vagy utolsó előfordulást keressük, mert ha az elsőt keressük, akkor a találat után rögtön kilépünk a ciklusból, és kész vagyunk. Ha az utolsót, akkor végigolvassuk a tömböt. Ez a program az első előfordulást keresi. 1. lineáris_első 2. J:=-1; 3. FOR I:=0 I<N AND J<0 STEP 1 DO IF C = X(I) THEN J:=I; 6. END; 7. END. Ez a program az utolsó előfordulást keresi. 1. lineáris_első 2. J:=-1; 3. FOR I:=0 I<N STEP 1 DO IF C = X(I) THEN J:=I; 6. END; 7. END. Mint láthatjuk a különbség a 3. sorban van, míg az első program kilép a ciklusból, ha a J értéke nem negatív, mert találat van, addig a másik folytatja a ciklust és nyilvánvalóan az utolsó előfordulás helye lesz J-ben Logaritmikus keresés Láthatjuk, hogy az előző keresés igen hosszú ideig tarthat. Ha tömbünk elemeinek elhelyezkedése teljesen véletlenszerű, akkor sajnos nincs más megoldás. Ha viszont a tömb elemei rendezettek a keresés igen felgyorsítható. Erre egyik módszer az intervallumfelezéses, vagy más néven logaritmikus keresés. Tegyük fel, hogy a tömb egy intervallum, amelynek elemei a rendezett tömb indexei, és amelynek természetesen van egy baloldali és egy jobboldali vége, felezzük meg az intervallumot és nézzük meg, hogy a felénél lévő elem a keresett elemnél kisebb, nagyobb. Ha az elem értéke megegyezik a keresett elemével, megjegyezzük a kérdéses indexet és befejezzük az algoritmust. Abban az esetben, ha kisebb, akkor jelöljük ki a középső elemet az intervallum új baloldali végének. Ha nagyobb, akkor ez legyen a jobboldali vége. Ekkor ismételjük az előzőekben leírtakat mindaddig, míg vagy megtaláljuk az elemet, vagy az intervallum hossza egy lesz. Ha nem találtunk elemet kilépünk. Nézve a programot és folyamatábrát láthatjuk az előzőekben leírtakat. Furcsa és talán nem is szabványos a 7. sor, mert itt beírtuk az eljárás végét, miután megtaláltuk a kérdéses értéket.

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

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések) Adatszerkezetek Nevezetes algoritmusok (Keresések, rendezések) Keresések 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),

Részletesebben

Programozási segédlet

Programozási segédlet Programozási segédlet Programozási tételek Az alábbiakban leírtam néhány alap algoritmust, amit ismernie kell annak, aki programozásra adja a fejét. A lista korántsem teljes, ám ennyi elég kell legyen

Részletesebben

Webprogramozás szakkör

Webprogramozás szakkör Webprogramozás szakkör Előadás 5 (2012.04.09) Programozás alapok Eddig amit láttunk: Programozás lépései o Feladat leírása (specifikáció) o Algoritmizálás, tervezés (folyamatábra, pszeudokód) o Programozás

Részletesebben

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

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek 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

Részletesebben

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

Ö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. Összetett programozási tételek Sorozathoz sorozatot relő feladatokkal foglalkozunk. A bemenő sorozatot le kell másolni, s közben az elemekre vonatkozó átalakításokat lehet végezni rajta: Input : n N 0,

Részletesebben

Algoritmuselmélet 2. előadás

Algoritmuselmélet 2. előadás Algoritmuselmélet 2. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Február 12. ALGORITMUSELMÉLET 2. ELŐADÁS 1 Buborék-rendezés

Részletesebben

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

Programozási tételek. Dr. Iványi Péter Programozási tételek Dr. Iványi Péter 1 Programozási tételek A programozási tételek olyan általános algoritmusok, melyekkel programozás során gyakran találkozunk. Az algoritmusok általában számsorozatokkal,

Részletesebben

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás, rendezések 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok és programozási tételek

Részletesebben

Java programozási nyelv

Java programozási nyelv Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23 Tartalomjegyzék

Részletesebben

Vezérlési szerkezetek

Vezérlési szerkezetek Vezérlési szerkezetek Szelekciós ok: if, else, switch If Segítségével valamely ok végrehajtását valamely feltétel teljesülése esetén végezzük el. Az if segítségével valamely tevékenység () végrehajtását

Részletesebben

Adatbázis rendszerek Gy: Algoritmusok C-ben

Adatbázis rendszerek Gy: Algoritmusok C-ben Adatbázis rendszerek 1. 1. Gy: Algoritmusok C-ben 53/1 B ITv: MAN 2015.09.08 Alapalgoritmusok Összegzés Megszámlálás Kiválasztás Kiválasztásos rendezés Összefésülés Szétválogatás Gyorsrendezés 53/2 Összegzés

Részletesebben

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

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n). Edényrendezés Tegyük fel, hogy a rendezendő H = {a 1,...,a n } halmaz elemei a [0,1) intervallumba eső valós számok. Vegyünk m db vödröt, V [0],...,V [m 1] és osszuk szét a rendezendő halmaz elemeit a

Részletesebben

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

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat 9. Előadás Rendezések A rendezési probléma: Bemenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat Kimenet: a bemenő sorozat olyan (a 1, a 2,,a n ) permutációja, hogy a 1 a 2 a n 2 Rendezések Általánosabban:

Részletesebben

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

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék 9. előadás Wagner György Általános Informatikai Tanszék Leszámoló rendezés Elve: a rendezett listában a j-ik kulcs pontosan j-1 kulcsnál lesz nagyobb. (Ezért ha egy kulcsról tudjuk, hogy 27 másiknál nagyobb,

Részletesebben

Felvételi tematika INFORMATIKA

Felvételi tematika INFORMATIKA Felvételi tematika INFORMATIKA 2016 FEJEZETEK 1. Természetes számok feldolgozása számjegyenként. 2. Számsorozatok feldolgozása elemenként. Egydimenziós tömbök. 3. Mátrixok feldolgozása elemenként/soronként/oszloponként.

Részletesebben

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

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I. Keresés Rendezés Feladat Keresés Rendezés Feladat Tartalom 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

Részletesebben

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

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 Keresés Rendezés Feladat 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 2016. november 7. Farkas B., Fiala

Részletesebben

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

Bánsághi Anna 2014 Bánsághi Anna 1 of 68 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 3. ELŐADÁS - PROGRAMOZÁSI TÉTELEK 2014 Bánsághi Anna 1 of 68 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív

Részletesebben

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK 1. ELÁGAZÁSOK ÉS CIKLUSOK SZERVEZÉSE Az adatszerkezetek mellett a programok másik alapvető fontosságú építőkövei az ún. algoritmikus szerkezetek.

Részletesebben

Egyszerű programozási tételek

Egyszerű programozási tételek Egyszerű programozási tételek Sorozatszámítás tétele Például az X tömbben kövek súlyát tároljuk. Ha ki kellene számolni az összsúlyt, akkor az S = f(s, X(i)) helyére S = S + X(i) kell írni. Az f0 tartalmazza

Részletesebben

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

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24. Rendezések 8. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. október 24. Sergyán (OE NIK) AAO 08 2011. október 24. 1 / 1 Felhasznált irodalom

Részletesebben

Amortizációs költségelemzés

Amortizációs költségelemzés Amortizációs költségelemzés Amennyiben műveleteknek egy M 1,...,M m sorozatának a futási idejét akarjuk meghatározni, akkor egy lehetőség, hogy külön-külön minden egyes művelet futási idejét kifejezzük

Részletesebben

Struktúra nélküli adatszerkezetek

Struktúra nélküli adatszerkezetek Struktúra nélküli adatszerkezetek Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív 20:24 1 A

Részletesebben

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

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs Programozás I. 1. előadás: Algoritmusok alapjai Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Alkalmazott Informatikai Intézet 2015. szeptember 7. Sergyán

Részletesebben

A félév során előkerülő témakörök

A félév során előkerülő témakörök A félév során előkerülő témakörök rekurzív algoritmusok rendező algoritmusok alapvető adattípusok, adatszerkezetek, és kapcsolódó algoritmusok dinamikus programozás mohó algoritmusok gráf algoritmusok

Részletesebben

Nézzük tovább a lexikai egységeket!

Nézzük tovább a lexikai egységeket! Utasítások Osztályozásuk: Nézzük tovább a lexikai egységeket! - értékadó utasítások - ugró utasítások[vezérlő utasítások (a program vezérlési szerkezetét adják meg)] - feltételes utasítások - ciklusszervező

Részletesebben

ELEMI PROGRAMOZÁSI TÉTELEK

ELEMI PROGRAMOZÁSI TÉTELEK ELEMI PROGRAMOZÁSI TÉTELEK 1. FELADATMEGOLDÁS PROGRAMOZÁSI TÉTELEKKEL 1.1 A programozási tétel fogalma A programozási tételek típusalgoritmusok, amelyek alkalmazásával garantáltan helyes megoldást adhatunk

Részletesebben

Dr. Schuster György február / 32

Dr. Schuster György február / 32 Algoritmusok és magvalósítások Dr. Schuster György OE-KVK-MAI schuster.gyorgy@kvk.uni-obuda.hu 2015. február 10. 2015. február 10. 1 / 32 Algoritmus Alapfogalmak Algoritmus Definíció Algoritmuson olyan

Részletesebben

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI 19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI Ebben a fejezetben aszimptotikus (nagyságrendi) alsó korlátot adunk az összehasonlításokat használó rendező eljárások lépésszámára. Pontosabban,

Részletesebben

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás Programozási tételek, rendezések 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok

Részletesebben

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

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Python Változók Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Név Érték Típus Memóriacím A változó értéke (esetleg más attribútuma is) a program futása alatt

Részletesebben

Algoritmusok. Dr. Iványi Péter

Algoritmusok. Dr. Iványi Péter Algoritmusok Dr. Iványi Péter Egyik legrégebbi algoritmus i.e. IV század, Alexandria, Euklidész két természetes szám legnagyobb közös osztójának meghatározása Tegyük fel, hogy a és b pozitív egész számok

Részletesebben

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

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje 1. Alapfogalmak 1.1. Algoritmus Az algoritmus olyan elemi műveletekből kompozíciós szabályok szerint felépített összetett művelet, amelyet megadott feltételt teljesítő bemeneti adatra végrehajtva, a megkívánt

Részletesebben

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis I. ALAPALGORITMUSOK 1. Prímszámvizsgálat Adott egy n természetes szám. Írjunk algoritmust, amely eldönti, hogy prímszám-e vagy sem! Egy számról úgy fogjuk eldönteni, hogy prímszám-e, hogy megvizsgáljuk,

Részletesebben

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit. 2. A VALÓS SZÁMOK 2.1 A valós számok aximómarendszere Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit. 1.Testaxiómák R-ben két művelet van értelmezve, az

Részletesebben

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma)

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Sorozatok I. DEFINÍCIÓ: (Számsorozat) A számsorozat olyan függvény, amelynek értelmezési tartománya a pozitív egész számok halmaza, értékkészlete a valós számok egy részhalmaza. Jelölés: (a n ), {a n }.

Részletesebben

Programozási módszertan. Mohó algoritmusok

Programozási módszertan. Mohó algoritmusok PM-08 p. 1/17 Programozási módszertan Mohó algoritmusok Werner Ágnes Villamosmérnöki és Információs Rendszerek Tanszék e-mail: werner.agnes@virt.uni-pannon.hu PM-08 p. 2/17 Bevezetés Dinamikus programozás

Részletesebben

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y. Algoritmuselmélet Legrövidebb utak, Bellmann-Ford, Dijkstra Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem 3. előadás Katona Gyula Y. (BME

Részletesebben

Informatikai tehetséggondozás:

Informatikai tehetséggondozás: Ég és Föld vonzásában a természet titkai Informatikai tehetséggondozás: Rendezések TÁMOP-4.2.3.-12/1/KONV-2012-0018 Az alapfeladat egy N elemű sorozat nagyság szerinti sorba rendezése. A sorozat elemei

Részletesebben

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Programozás I. 3. előadás Egyszerű programozási tételek Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Alkalmazott Informatikai Intézet 2015. szeptember

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1. Nagyságrendek Kiegészítő anyag az Algoritmuselmélet tárgyhoz (a Rónyai Ivanyos Szabó: Algoritmusok könyv mellé) Friedl Katalin BME SZIT friedl@cs.bme.hu 018. február 1. Az O, Ω, Θ jelölések Az algoritmusok

Részletesebben

Programozás alapjai (ANSI C)

Programozás alapjai (ANSI C) Programozás alapjai (ANSI C) 1. Előadás vázlat A számítógép és programozása Dr. Baksáné dr. Varga Erika adjunktus Miskolci Egyetem, Informatikai Intézet Általános Informatikai Intézeti Tanszék www.iit.uni-miskolc.hu

Részletesebben

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

Közismereti informatika I. 4. előadás Közismereti informatika I. 4. előadás Rendezések Bemenet: N: Egész, X: Tömb(1..N: Egész) Kimenet: X: Tömb(1..N: Egész) Előfeltétel: Utófeltétel: Rendezett(X) és X=permutáció(X ) Az eredmény a bemenet egy

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 3 III. MEGFELELTETÉSEk, RELÁCIÓk 1. BEVEZETÉS Emlékeztetünk arra, hogy az rendezett párok halmazát az és halmazok Descartes-féle szorzatának nevezzük. Más szóval az és halmazok

Részletesebben

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

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) 1. (5p) Tekintsük a következő alprogramot: Alprogram f(a): Ha a!= 0, akkor visszatérít: a + f(a - 1) különben visszatérít

Részletesebben

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

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs Programozás I. 3. előadás Egyszerű programozási tételek Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Alkalmazott Informatikai Intézet 2015. szeptember

Részletesebben

Dinamikus programozás - Szerelőszalag ütemezése

Dinamikus programozás - Szerelőszalag ütemezése Dinamikus programozás - Szerelőszalag ütemezése A dinamikus programozás minden egyes részfeladatot és annak minden részfeladatát pontosan egyszer oldja meg, az eredményt egy táblázatban tárolja, és ezáltal

Részletesebben

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.

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. Programozási tételek Programozási feladatok megoldásakor a top-down (strukturált) programtervezés esetén három vezérlési szerkezetet használunk: - szekvencia - elágazás - ciklus Eddig megismertük az alábbi

Részletesebben

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás Elemi programok Definíció Az S A A program elemi, ha a A : S(a) { a, a, a, a,..., a, b b a}. A definíció alapján könnyen látható, hogy egy elemi program tényleg program. Speciális elemi programok a kövekezők:

Részletesebben

PROGRAMOZÁSI TÉTELEK

PROGRAMOZÁSI TÉTELEK PROGRAMOZÁSI TÉTELEK Összegzés tétele Adott egy N elemű számsorozat: A(N). Számoljuk ki az elemek összegét! S:=0 Ciklus I=1-től N-ig S:=S+A(I) Megszámlálás tétele Adott egy N elemű sorozat és egy - a sorozat

Részletesebben

LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL

LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL x 1-2x 2 6 -x 1-3x 3 = -7 x 1 - x 2-3x 3-2 3x 1-2x 2-2x 3 4 4x 1-2x 2 + x 3 max Alapfogalmak: feltételrendszer (narancs színnel jelölve), célfüggvény

Részletesebben

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik. Algoritmus Az algoritmus olyan elemi műveletekből kompozíciós szabályok szerint felépített összetett művelet, amelyet megadott feltételt teljesítő bemeneti adatra végrehajtva, a megkívánt kimeneti adatot

Részletesebben

Egyszerű programozási tételek

Egyszerű programozási tételek Egyszerű programozási tételek 2. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. szeptember 15. Sergyán (OE NIK) AAO 02 2011. szeptember 15.

Részletesebben

Algoritmusok bonyolultsága

Algoritmusok bonyolultsága Algoritmusok bonyolultsága 9. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm 1 / 18 Közelítő algoritmusok ládapakolás (bin packing) Adott n tárgy (s i tömeggel) és végtelen sok 1 kapacitású láda

Részletesebben

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

Felvételi vizsga mintatételsor Informatika írásbeli vizsga BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) Felvételi vizsga mintatételsor Informatika írásbeli vizsga 1. (5p) Egy x biten tárolt egész adattípus (x szigorúan pozitív

Részletesebben

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás Algoritmusok Tervezése 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás Mi az algoritmus? Lépések sorozata egy feladat elvégzéséhez (legáltalánosabban) Informálisan algoritmusnak nevezünk bármilyen jól definiált

Részletesebben

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

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 1 Információk 2 A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin Elérhetőség mesko.katalin@tfk.kefo.hu Fogadóóra: szerda 9:50-10:35 Számonkérés időpontok Április 25. 9 00 Május 17. 9 00 Június

Részletesebben

Számjegyes vagy radix rendezés

Számjegyes vagy radix rendezés Számláló rendezés Amennyiben a rendezendő elemek által felvehető értékek halmazának számossága kicsi, akkor megadható lineáris időigényű algoritmus. A bemenet a rendezendő elemek egy n méretű A tömbben

Részletesebben

BASH script programozás II. Vezérlési szerkezetek

BASH script programozás II. Vezérlési szerkezetek 06 BASH script programozás II. Vezérlési szerkezetek Emlékeztető Jelölésbeli különbség van parancs végrehajtása és a parancs kimenetére való hivatkozás között PARANCS $(PARANCS) Jelölésbeli különbség van

Részletesebben

C programozási nyelv Pointerek, tömbök, pointer aritmetika

C programozási nyelv Pointerek, tömbök, pointer aritmetika C programozási nyelv Pointerek, tömbök, pointer aritmetika Dr. Schuster György 2011. június 16. C programozási nyelv Pointerek, tömbök, pointer aritmetika 2011. június 16. 1 / 15 Pointerek (mutatók) Pointerek

Részletesebben

Rekurzió. Dr. Iványi Péter

Rekurzió. Dr. Iványi Péter Rekurzió Dr. Iványi Péter 1 Függvényhívás void f3(int a3) { printf( %d,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); } void f1() { int a1 = 1; int b1; b1 = f2(a1); } 2 Függvényhívás void f3(int a3) { printf(

Részletesebben

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

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Javascript Változók Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai): Név Érték Típus Memóriacím A változó értéke (esetleg más attribútuma is) a program futása

Részletesebben

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

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 30. 15. tétel Adatszerkezetek és algoritmusok vizsga Frissült: 2013. január 30. Edényrendezés Tegyük fel, hogy tudjuk, hogy a bemenő elemek (A[1..n] elemei) egy m elemű U halmazból kerülnek ki, pl. " A[i]-re

Részletesebben

15. A VERSENYRENDEZÉS

15. A VERSENYRENDEZÉS 15. A VERSENYRENDEZÉS A versenyrendezés (tournament sort) a maximum-kiválasztó rendezések közé tartozik, ugyanis az elemek közül újra és újra kiválasztja (eltávolítja és kiírja) a legnagyobbat. Az eljárás

Részletesebben

14. Mediánok és rendezett minták

14. Mediánok és rendezett minták 14. Mediánok és rendezett minták Kiválasztási probléma Bemenet: Azonos típusú (különböző) elemek H = {a 1,...,a n } halmaza, amelyeken értelmezett egy lineáris rendezési reláció és egy i (1 i n) index.

Részletesebben

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

Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmus-leíró eszközök Folyamatábra Irányított gráf, amely csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az

Részletesebben

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

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző

Részletesebben

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

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK Sorozat fogalma Definíció: Számsorozaton olyan függvényt értünk, amelynek értelmezési tartománya a pozitív egész

Részletesebben

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik. Algoritmus Az algoritmus olyan elemi műveletekből kompozíciós szabályok szerint felépített összetett művelet, amelyet megadott feltételt teljesítő bemeneti adatra végrehajtva, a megkívánt kimeneti adatot

Részletesebben

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

Programozás alapjai. 8. előadás 8. előadás Wagner György Általános Informatikai Tanszék Azonosítók érvényességi köre Kiindulási alap: a blokkszerkezetű programozási nyelvek (C, FORTRAN, PASCAL, ) Egy program szerkezete: Fejléc Deklarációsrész

Részletesebben

Összetett programozási tételek

Összetett programozási tételek Összetett programozási tételek 3. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. szeptember 19. Sergyán (OE NIK) AAO 03 2011. szeptember

Részletesebben

Gyakorló feladatok ZH-ra

Gyakorló feladatok ZH-ra Algoritmuselmélet Schlotter Ildi 2011. április 6. ildi@cs.bme.hu Gyakorló feladatok ZH-ra Nagyságrendek 1. Egy algoritmusról tudjuk, hogy a lépésszáma O(n 2 ). Lehetséges-e, hogy (a) minden páros n-re

Részletesebben

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei A Gauss-Jordan elimináció, mátrixinvertálás Gauss-Jordan módszer Ugyanazzal a technikával, mint ahogy a k-adik oszlopban az a kk alatti elemeket kinulláztuk, a fölötte lévő elemeket is zérussá lehet tenni.

Részletesebben

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

1. Jelölje meg az összes igaz állítást a következők közül! 1. Jelölje meg az összes igaz állítást a következők közül! a) A while ciklusban a feltétel teljesülése esetén végrehajtódik a ciklusmag. b) A do while ciklusban a ciklusmag után egy kilépési feltétel van.

Részletesebben

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

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 Oktatási Hivatal 2015/2016 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató INFORMTIK II. (programozás) kategória Kérjük a tisztelt tanár kollégákat, hogy a dolgozatokat

Részletesebben

2. Visszalépéses stratégia

2. Visszalépéses stratégia 2. Visszalépéses stratégia A visszalépéses keres rendszer olyan KR, amely globális munkaterülete: út a startcsúcsból az aktuális csúcsba (ezen kívül a még ki nem próbált élek nyilvántartása) keresés szabályai:

Részletesebben

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10. Programozás I. 1. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2012. szeptember 10. Sergyán (OE NIK) Programozás I. 2012. szeptember 10. 1 /

Részletesebben

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus GRÁFELMÉLET 7. előadás Javító utak, javító utak keresése, Edmonds-algoritmus Definíció: egy P utat javító útnak nevezünk egy M párosításra nézve, ha az út páratlan hosszú, kezdő- és végpontjai nem párosítottak,

Részletesebben

Programozás alapjai 1.Gy: Algoritmizálás P R O

Programozás alapjai 1.Gy: Algoritmizálás P R O Programozás alapjai 1.Gy: Algoritmizálás. P R O A L A G 1/13 B ITv: MAN 2018.09.20 Algoritmus leírási módszerek Szöveges leírás Pszeudokód Folyamatábra Struktogram Jackson diagram 2/13 Folyamatábra elemek

Részletesebben

Egyirányban láncolt lista

Egyirányban láncolt lista Egyirányban láncolt lista A tárhely (listaelem) az adatelem értékén kívül egy mutatót tartalmaz, amely a következő listaelem címét tartalmazza. A láncolt lista első elemének címét egy, a láncszerkezeten

Részletesebben

A programozás alapjai

A programozás alapjai A programozás alapjai Változók A számítógép az adatokat változókban tárolja A változókat alfanumerikus karakterlánc jelöli. A változóhoz tartozó adat tipikusan a számítógép memóriájában tárolódik, szekvenciálisan,

Részletesebben

Függvények július 13. f(x) = 1 x+x 2 f() = 1 ()+() 2 f(f(x)) = 1 (1 x+x 2 )+(1 x+x 2 ) 2 Rendezés után kapjuk, hogy:

Függvények július 13. f(x) = 1 x+x 2 f() = 1 ()+() 2 f(f(x)) = 1 (1 x+x 2 )+(1 x+x 2 ) 2 Rendezés után kapjuk, hogy: Függvények 015. július 1. 1. Feladat: Határozza meg a következ összetett függvényeket! f(x) = cos x + x g(x) = x f(g(x)) =? g(f(x)) =? Megoldás: Összetett függvény el állításához a küls függvényben a független

Részletesebben

Bevezetés az informatikába

Bevezetés az informatikába Bevezetés az informatikába 6. előadás Dr. Istenes Zoltán Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék Matematikus BSc - I. félév / 2008 / Budapest Dr.

Részletesebben

Programozási alapismeretek 11. előadás

Programozási alapismeretek 11. előadás Programozási alapismeretek 11. előadás Tartalom Rendezési feladat specifikáció Egyszerű cserés rendezés Minimum-kiválasztásos rendezés Buborékos rendezés Javított buborékos rendezés Beillesztéses rendezés

Részletesebben

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

Algoritmizálás, adatmodellezés tanítása 7. előadás Algoritmizálás, adatmodellezés tanítása 7. előadás Oszd meg és uralkodj! Több részfeladatra bontás, amelyek hasonlóan oldhatók meg, lépései: a triviális eset (amikor nincs rekurzív hívás) felosztás (megadjuk

Részletesebben

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

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19. Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19. Programkészítés Megrendelői igények begyűjtése Megoldás megtervezése (algoritmuskészítés)

Részletesebben

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Tömb Ugyanolyan típusú elemeket tárol A mérete előre definiált kell legyen és nem lehet megváltoztatni futás során Legyen n a tömb mérete. Ekkor:

Részletesebben

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai A programozás alapjai 1 1. előadás Híradástechnikai Tanszék Amiről szólesz: A tárgy címe: A programozás alapjai A számítógép részegységei, alacsony- és magasszintű programnyelvek, az imperatív programozási

Részletesebben

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

Hatékonyság 1. előadás Hatékonyság 1. előadás Mi a hatékonyság Bevezetés A hatékonyság helye a programkészítés folyamatában: csak HELYES programra Erőforrásigény: a felhasználó és a fejlesztő szempontjából A hatékonyság mérése

Részletesebben

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem A számítástudomány alapjai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem Bináris keresőfa, kupac Katona Gyula Y. (BME SZIT) A számítástudomány

Részletesebben

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

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar Algoritmizálás Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 0.1. Az algoritmikus tudás szintjei Ismeri (a megoldó algoritmust) Érti Le tudja pontosan

Részletesebben

Térinformatikai algoritmusok Elemi algoritmusok

Térinformatikai algoritmusok Elemi algoritmusok Cserép Máté Analóg programozásnak nevezzük azt, amikor egy feladat megoldásához egy már ismert és megoldott feladat megoldását használjuk fel. Általában nem pontosan ugyanazt a feladatot oldottuk meg korábban,

Részletesebben

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

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 3. gyakorlat PLanG: 2011.09.27. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok

Részletesebben

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA 26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA Az előző két fejezetben tárgyalt feladat általánosításaként a gráfban található összes csúcspárra szeretnénk meghatározni a legkisebb költségű utat. A probléma

Részletesebben

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

PROGRAMOZÁSI NYELVEK (GYAKORLAT) PROGRAMOZÁSI NYELVEK (GYAKORLAT) A következő részben olyan szabványos algoritmusokkal fogunk foglalkozni, amelyek segítségével a későbbiekben sok hétköznapi problémát meg tudunk majd oldani. MUNKAHELYZET-

Részletesebben

Számláló rendezés. Példa

Számláló rendezés. Példa Alsó korlát rendezési algoritmusokra Minden olyan rendezési algoritmusnak a futását, amely elempárok egymással való összehasonlítása alapján működik leírja egy bináris döntési fa. Az algoritmus által a

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA MATEmATIkA I 6 VI KOmPLEX SZÁmOk 1 A komplex SZÁmOk HALmAZA A komplex számok olyan halmazt alkotnak amelyekben elvégezhető az összeadás és a szorzás azaz két komplex szám összege és szorzata

Részletesebben

Adatszerkezetek 7a. Dr. IványiPéter

Adatszerkezetek 7a. Dr. IványiPéter Adatszerkezetek 7a. Dr. IványiPéter 1 Fák Fákat akkor használunk, ha az adatok között valamilyen alá- és fölérendeltség van. Pl. könyvtárszerkezet gyökér () Nincsennek hurkok!!! 2 Bináris fák Azokat a

Részletesebben