Algoritmusok. Dr. Iványi Péter



Hasonló dokumentumok
Java programozási nyelv

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

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

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

Szoftvertervezés és -fejlesztés I.

Programozás alapjai (ANSI C)

Algoritmusok, adatszerkezetek, objektumok

Bevezetés az informatikába

AZ ALGORITMUS. az eredményt szolgáltatja

Adatok ábrázolása, adattípusok

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

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

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

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

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

Aritmetikai kifejezések lengyelformára hozása

Készítette: Nagy Tibor István

Webprogramozás szakkör

Egyszerű programozási tételek

Felvételi tematika INFORMATIKA

B I T M A N B I v: T M A N

Occam 1. Készítette: Szabó Éva

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

Vezérlési szerkezetek

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

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

Objektumorientált Programozás III.

Az algoritmusok alapelemei

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

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

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

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

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

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

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

Programozási alapismeretek 1. előadás

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

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

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

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

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

Algoritmusok. Hogyan csináljam?

INFORMATIKA javítókulcs 2016

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

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

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

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

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

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

Algoritmus fogalma. Mi az algoritmus? HF: Al Khwarizmi. Egy adott probléma megoldásának leírása elemi lépések sorozatával

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Egész számok. pozitív egész számok: 1; 2; 3; 4;... negatív egész számok: 1; 2; 3; 4;...

Programozás I gyakorlat

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Logikai áramkörök. Informatika alapjai-5 Logikai áramkörök 1/6

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozási nyelvek (ADA)

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

Vezérlési szerkezetek. Szelekció Ciklusok

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

Szövegek C++ -ban, a string osztály

Adatszerkezetek és algoritmusok

Minden egész szám osztója önmagának, azaz a a minden egész a-ra.

Adatszerkezetek 1. Dr. Iványi Péter

ködös határ (félreértés, hiba)

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

1.1. Definíció. Azt mondjuk, hogy a oszója b-nek, vagy más szóval, b osztható a-val, ha létezik olyan x Z, hogy b = ax. Ennek jelölése a b.

Eljárások, függvények

Gyakorló feladatok Gyakorló feladatok

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Szkriptnyelvek. 1. UNIX shell

1. Alapok. #!/bin/bash

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

Mintavételes szabályozás mikrovezérlő segítségével

Összetett programozási tételek

Az informatika kulcsfogalmai

I. A DIGITÁLIS ÁRAMKÖRÖK ELMÉLETI ALAPJAI

Java II. I A Java programozási nyelv alapelemei

A programozás alapjai

Adatszerkezetek 2. Dr. Iványi Péter

Fibonacci számok. Dinamikus programozással

Kifejezések. Kozsik Tamás. December 11, 2016

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Programozási segédlet

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

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

Gyakorló feladatok az 1. nagy zárthelyire

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

Algoritmusok tervezése

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

BASH SCRIPT SHELL JEGYZETEK

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

Java II. I A Java programozási nyelv alapelemei

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Átírás:

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 és jelöljük ( a, b ) -vel a és b legnagyobb közös osztóját

Legnagyobb közös osztó Ha a = b * q + r, akkor ( a, b ) = ( b, r ), így a problémát visszavezethetjük két kisebb szám legnagyobb közös osztójának meghatározására. Folytatva az eljárást, az utolsó, 0-tól különböző maradék a legnagyobb közös osztó.

( 360, 225 ) =? Legnagyobb közös osztó Az euklidészi algoritmus szerint: a b r 360 = 225*1 + 135 225 = 135*1 + 90 135 = 90*1 + 45 90 = 45*2 + 0 Tehát ( 360, 225 ) = 45.

Két alapvető koncepció: A programozás Mennyiségek, információk közötti kapcsolat leírása x+y E kapcsolatok kiértékelése, ahol értékeket helyettesítünk nevek helyébe x = 2 y = 3 2+3 = 5

Műveletek Minden adaton lehet egyszerű műveleteket végrehajtani Például a számokra definiált: Összeadás, kivonás, osztás, szorzás, A programozó ezekből az egyszerű műveletekből állítja össze a programot

Információ Az információt adatként írjuk le Többféle adat van: Egyszerű, (atomi, oszthatatlan), mint a számok Összetett, mint számsorozatok Bár az adat reprezentálja az információt, de az értelmezés ránk van bízva. Például 13.51 reprezentálhat Hőmérsékletet Időt Távolságot

Programozás, gyakorlati megközelítés A probléma felbontása egyszerű a számítógép által is megértett lépésekre A program: Egy feladat megoldására szolgáló, a számítógép számára értelmezhető utasítássorozat.

Bemenet Kimenet Operátorok, műveletek (Változók) Program elemei Bemenet Műveletek Kimenet

Bemenet Billentyűzet Egér Fájl Soros port, stb Kimenet Képernyő Fájl Soros port, stb Bemenet és kimenet

Változók Adatokat változókban tároljuk Név Egy hely ahol tárolunk Érték A tárolt adat Értékadás Adott helyre beteszünk egy adatot

Adatok, egyszerű Milyen típusú adatot tárolhatunk? Számok (bináris szám) Egész Valós Komplex, etb Karakterek Bináris számot alakítjuk betűvé, stb. Ugyanaz az adat többféleképpen is tárolható 1, 1, 1

Származtatott, összetett adatok Karakterlánc, string, szöveg Vektorok Tömbök, mátrixok Listák Stb. Programnyelvtől függ!

Műveletek, operátorok Adatok manipulálása Aritmetikai: +, -, *, / Relációs, összehasonlító: >, <, =, <=, >= Logikai NEM, ÉS, VAGY

Műveletek sorrendje a=6+12*5 Kiértékelési sorrend, Hogyan hajtsuk végre a műveleteket? Általában balról jobbra Precedencia Művelet elsőbbsége, erőssége Zárójelezés a=(6+12)*5 a=6+(12*5)

Program, összefoglalva Program, több algoritmusból is állhat Algoritmus jellemzői: Elvégezhető (elemi, végrehajtható lépésekből áll) Meghatározott (minden lépés pontosan definiált) Véges (véges számú lépés után véget ér) Meghatározott input halmazra érvényes Megfelelő outputot eredményez Egy feladat megoldására szolgál

Algoritmusok, programok tervezése

Programozási módszertan 1960-as évek végéig monolitikus programozás Jellemzői: Egy programozó egy program A programoknak nincs szerkezete

Programozási módszertan A jó program legfontosabb kritériumai jól áttekinthető szerkezete van jól dokumentált bizonyítható módon azt csinálja, amit kell

Moduláris programozás Oszd meg és uralkodj elv Top-Down dekompozíció A feladatot részfeladatokra bontjuk, majd azokat további részfeladatokra, míg kezelhető méretű részproblémákhoz nem jutunk Bottom-Up kompozíció Itt is részfeladatokat oldunk meg, de előre nem tudható, hogy hogyan fognak kapcsolódni egymáshoz

Moduláris programozás Előnyök: Részprogramok könnyen áttekinthetők Könnyebben megírható Könnyebben tesztelhető Több modul írható egy időben (párhuzamos problémamegoldás) Könnyebben javítható A modulok szabványosíthatók Modulkönyvtárakban tárolhatók Újrafelhasználhatók

Dijkstra Struktúrált programozás Top-Down dekompozíciót egészíti ki Az eredeti feladat részfeladatra bontása, keletkezik egy absztrakt program, mely egy absztrakt számítógépen működik és mivel az eredeti specifikációból indulunk ki bizonyítható módon működik a program. Finomítás, mely csökkenti az absztrakciót (egy részprobléma kifejtése) újabb absztrakt gépen újabb utasításkészlet mellett megint bizonyíthatóan működik a program. További finomítások, míg egy konkrét gép konkrét utasításkészletéig eljutunk.

Végeredmény: Struktúrált programozás egy bizonyítottan helyes program Probléma: elfogadhatatlanul nagyobb munka árán. Megoldás: A bizonyítás lépéseit elhagyva egy megközelítőleg jó program készítése, melyeket tesztekkel lehet ellenőrizni.

Boehm, Jackopini 1964 Minden algoritmikus program vezérlési szerkezete leírható 3 vezérlőszerkezet segítségével. elágazás, döntés ciklus, ismétlés

Mills 1968 Bebizonyítja, a Boehm és Jackopini elméletét az alábbi megkötéssekkel: Minden program szerkezete egy szekvencia Minden szekvencia elemnek egy belépési és egy kilépési pontja lehet. (Egyik rész kimenete a másik rész bemenete.) Minden szekvencia belülről tetszőlegesen struktúrálható.

Algoritmusok ábrázolása, leírása Pszeudo kód Mondatszerű leírás Folyamatábra Blokkdiagram Struktogram... Egyetlen téglalap tagolása, amely a teljes feladat részekre bontását jelenti.

Folyamatábra Kezdés Bemeneti adat Kimeneti adat Tevékenység

Folyamatábra Elágazás Címke Vége

Struktogram Program eleje Bemeneti adat Kimeneti adat

Struktogram Tevékenység Elágazás Ciklus

Program végrehajtás Egyik utasítást a másik után hajtja végre a számítógép Vezérlő szerkezetek: eltérés ettől a sorrendtől

Ugrás Feltételes elágazás Többszörös elágazás Számláló ciklus Elöltesztelő ciklus Hátultesztelő ciklus (Alprogramok) Vezérlő szerkezetek

Ugrás A program egy megadott utasítánál folytatódik, nem a következőnél Nehezen követhető struktúrát eredményez Nem használjuk!!!

Alprogram Ismétlődő feladat Alfeladatok elkülönítésére Szubrutin, eljárás, függvény

Programszerkezetek, folyamatábra Szekvencia Egyágú szelekció Kétágú szelekció

Programszerkezetek, folyamatábra Többágú szelekció

Programszerkezetek, folyamatábra Elöltesztelő ciklus Hátultesztelő ciklus

Programszerkezetek, folyamatábra Növekményes ciklus

Programszerkezetek, struktogram szekvencia Egyágú szelekció Kétágú szelekció

Programszerkezetek, struktogram Többágú szelekció Elöltesztelő ciklus Hátultesztelő ciklus Növekményes ciklus

Szekvencia, példa

Szelekció, példa 1.

Szelekció, példa 2. Szelekció bármelyik ágába újabb szelekció is tehető

Szelekció, példa 3. Feltétel össze is vonható

Szelekció, példa 4. Számok egymás közti viszonya

Többszörös szelekció, példa

Elöltesztelő ciklus, példa 1. Addig végzünk felülést amíg bírjuk.

Elöltesztelő ciklus, példa 2. Egész számokat olvassunk be mindaddig, amíg 0-t nem adnak be. Ha 0-t kapunk, kiírjuk, hány darab számot olvastunk be a 0 kivételével, és vége a feldolgozásnak. Mit fog kinyomtatni? Mi a probléma itt? be db 2345 33 2378 5 2383 12 2395 2395

Elöltesztelő ciklus, példa 3. A változókat a legtöbb programozási nyelven inicializálni kell, vagyis kezdeti értéket kell beállítani! be db 0 33 33 5 38 12 50 50

Hátultesztelő ciklus, példa 1. Az előző testgyakorlási példa újra.

Hátultesztelő ciklus, példa 2. Csak egy helyen olvasunk be számot! Megváltozott a ciklus feltétel. Kimeneti adat is megváltozott, mivel az utolsó nullát nem akarjuk hozzászámolni.

Számláló ciklus, példa Számláló ciklus Csak 10 felülést akarunk végezni.

Kiválasztásos rendezés, 1

Rendezés 2 index 1 2 3 4 5 6 tömb 5 2 6 1 3 4 x = 1 min = 1 y min 1 1 2 2 3 2 4 4 5 4 y=1 6 6 4 min=4

Rendezés 3 index 1 2 3 4 5 6 tömb 5 2 6 1 3 4 x = 1 min = 4 felcserélés Az eredmény: index 1 2 3 4 5 6 tömb 1 2 6 5 3 4

Rendezés 4 index 1 2 3 4 5 6 tömb 1 2 6 5 3 4 x = 2 min = 2 y = 2 6 y min 2 2 3 2 4 2 5 2 6 2 min = 2 Önmagával kellene felcserélni, nincs változás

Rendezés 5 index 1 2 3 4 5 6 tömb 1 2 6 5 3 4 x = 3 min = 3 y min 3 3 4 4 5 5 y = 3 6 6 5 min = 5

Rendezés 6 index 1 2 3 4 5 6 tömb 1 2 6 5 3 4 x = 3 min = 5 felcserélés Az eredmény: index 1 2 3 4 5 6 tömb 1 2 3 5 6 4

Rendezés 7 index 1 2 3 4 5 6 tömb 1 2 3 5 6 4 x = 4 min = 4 y min 4 4 5 4 y = 4 6 6 6 min = 6

Rendezés 8 index 1 2 3 4 5 6 tömb 1 2 3 5 6 4 x = 4 min = 6 felcserélés Az eredmény: index 1 2 3 4 5 6 tömb 1 2 3 4 6 5

Rendezés 9 index 1 2 3 4 5 6 tömb 1 2 3 4 6 4 x = 5 min = 5 y min 5 5 y = 5 6 6 6 min = 6

Rendezés 10 index 1 2 3 4 5 6 tömb 1 2 3 4 6 5 x = 5 min = 6 felcserélés Az eredmény: index 1 2 3 4 5 6 tömb 1 2 3 4 5 6

Rendezés bonyolultsága Alapból feltételezzük hogy az algoritmus O(1). Szinte semmit nem csinál, azonnal visszatér. Ezután keressük meg a legbonyolultabb részt. A külső ciklus n-szer fut le tehát O(n). A belső ciklus is lényegében n-szer fut le. Bár ez változó hiszen x-től függ. Így az átlagos hatékonyság: n/2. De mivel a konstansokat nem vesszük figyelembe, ezért O(n). A kettőt összeszorozva: O(n 2 ) kapunk

Példa 1, probléma Bálint gazda sertést, kecskét, juhot vásárolt, összesen 100 állatot, pontosan 100 aranyért. A sertés darabja három és fél arany, egy kecske ára egy és egyharmad arany, egy juh ára fél arany. Határozzuk meg, hány darabot vett mindegyik állatból!

Változók és feltételek Változók: s : sertések száma k : kecskék száma j : juhok száma Feltételek: 1 <= s <= 100 1 <= k <= 100 1 <= j <= 100 Darabszám: s + k + j = 100 Ár: 7/2*s + 4/3*k + 1/2*j = 100

Algoritmus 1

Futások száma Algoritmus 1, analízis 100 * 100 * 100 = 1 000 000 O(n 3 ) Lehet ennél jobb algoritmust találni? Ha csak egyféle állatot venne 100 aranyért akkor: sertés: 7/2 * s = 100 így s egész része: 28 kecske: 4/3 * k = 100 így k = 75 juh: 1/2 * j = 100 és bár j = 200 lehetne, de csak 100 állatot vett a gazda, így j = 100

Algoritmus 2

Algoritmus 2, analízis 28 * 75 * 100 = 210 000 Lehet ennél jobb algoritmust találni? Ha már kétféle állatot kiválasztottunk akkor a harmadik állat száma már adott, így j = 100 s k Következmény: A belső ciklus elhagyható j értéke pontosan meghatározható, de negatív nem lehet, így a feltétel is módosul

Algoritmus 3

Algoritmus 3, analízis 28 * 75 = 2100 O(n 2 ) Lehet ennél jobb algoritmust találni? Haaz j = 100 s k egyenletet behelyettesítjük az 7/2*s + 4/3*k + 1/2*j = 100 egyenletbe, akkor újabb összefüggést kapunk k = 60-18/5 * s Feltétel is módosul: k egész, pozitív kell legyen

Algoritmus 4

Algoritmus 4, analízis 28 lépést kell csak végrehajtanunk!!! O(n) Lehet ennél jobb algoritmust találni? Tudjuk, hogy k pozitív és egész, ez csak akkor lehetséges ha s öttel osztható szám: s = 5, 10, 15, 20, 25 Azonban ha: s = 25 akkor k = -30 és s = 20 akkor k = -12 így ezek sem jók

Algoritmus 5 Három lépésben megoldható a feladat!!! O(1)

Felhasznált irodalom http://staff.kzs.hu/tamas/programozas/prgmódsz.htm http://www.codexonline.hu http://kognit.edpsy.u-szeged.hu http://www.prog.hu Bálintné Farkas Judit: Programtervezés, Phare Program HU-94.05, PMMFK