Algoritmusok. Dr. Iványi Péter



Hasonló dokumentumok
Programozás. A programkészítés lépései. Program = egy feladat megoldására szolgáló, a számítógép számára értelmezhető utasítássorozat.

Algoritmusok. Dr. Iványi Péter

Adatok ábrázolása, adattípusok. Összefoglalás

Párhuzamos programozás

Programozás I gyakorlat

A döntő feladatai. valós számok!

GAZDASÁGMATEMATIKA KÖZÉPHALADÓ SZINTEN

Érettségi feladatok Algoritmusok egydimenziós tömbökkel (vektorokkal) 1/6. Alapműveletek

MBLK12: Relációk és műveletek (levelező) (előadásvázlat) Maróti Miklós, Kátai-Urbán Kamilla

Lineáris algebra gyakorlat

Mágneses szuszceptibilitás vizsgálata

MATEMATIKA ÍRÁSBELI VIZSGA május 3.

KOVÁCS BÉLA, MATEMATIKA I.

2011. március 9. Dr. Vincze Szilvia

A SZÁMFOGALOM KIALAKÍTÁSA

A Hozzárendelési feladat megoldása Magyar-módszerrel

INFORMATIKAI ALAPISMERETEK

Analízis elo adások. Vajda István szeptember 24. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem)

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Trigonometria

Algebra es sz amelm elet 3 el oad as Rel aci ok Waldhauser Tam as 2014 oszi f el ev

MATEMATIKA ÍRÁSBELI VIZSGA május 8.

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

Arany Dániel Matematikai Tanulóverseny 2011/2012-es tanév első (iskolai) forduló haladók I. kategória

Analízis elo adások. Vajda István október 3. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem)

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

Játékok (domináns stratégia, alkalmazása

Emelt szintű érettségi feladatsorok és megoldásaik Összeállította: Szászné Simon Judit; dátum: november. I. rész

Jelek tanulmányozása

Jelentéskészítő TEK-IK () Válaszadók száma = 610

[MECHANIKA- HAJLÍTÁS]

Javítóvizsga témakörei matematika tantárgyból

Áramlástechnikai gépek soros és párhuzamos üzeme, grafikus és numerikus megoldási módszerek (13. fejezet)

Az informatika oktatás téveszméi

Algoritmusok. Hogyan csináljam?

Jelentés a kiértékelésről az előadóknak

Számrendszerek közötti átváltások

Rendezési algoritmusok belső rendezés külső rendezés

Az aktiválódásoknak azonban itt még nincs vége, ugyanis az aktiválódások 30 évenként ismétlődnek!

Elemi adatszerkezetek

KOVÁCS BÉLA, MATEMATIKA I.

BOLYAI MATEMATIKA CSAPATVERSENY FŐVÁROSI DÖNTŐ SZÓBELI (2005. NOVEMBER 26.) 5. osztály

A táblázatkezelő felépítése

ADATBÁZIS-KEZELÉS. Funkcionális függés, normál formák

[GVMGS11MNC] Gazdaságstatisztika

1. forduló. MEGOLDÁSOK Pontszerző Matematikaverseny 2015/2016-os tanév

Bevezetés a lágy számítás módszereibe

Dr. Kulcsár Gyula. Virtuális vállalat félév. Projektütemezés. Virtuális vállalat félév 5. gyakorlat Dr.

Korszerű geodéziai adatfeldolgozás Kulcsár Attila

Az éves statisztikai összegezés STATISZTIKAI ÖSSZEGEZÉS AZ ÉVES KÖZBESZERZÉSEKRŐL A KLASSZIKUS AJÁNLATKÉRŐK VONATKOZÁSÁBAN

A skatulya-elv alkalmazásai

Minta programterv a 1. házi feladathoz

Vektoros elemzés végrehajtása QGIS GRASS moduljával 1.7 dr. Siki Zoltán

Linux Mint 8 telepítése

Programozás alapjai Bevezetés

Agrárgazdasági Kutató Intézet Piac-árinformációs Szolgálat. Borpiaci információk. III. évfolyam / 7. szám április

1. Írja fel prímszámok szorzataként a 420-at! 2. Bontsa fel a et két részre úgy, hogy a részek aránya 5 : 4 legyen!

Ablakok használata. 1. ábra Programablak

MATLAB. 4. gyakorlat. Lineáris egyenletrendszerek, leképezések

Dr. Schuster György február 21. Real-time operációs rendszerek RTOS

Azonosító jel: Matematika emelt szint

VHDL szimuláció. Tervezés. Labor II. Dr. Hidvégi Timót

Mehet!...És működik! Non-szpot televíziós hirdetési megjelenések hatékonysági vizsgálata. Az r-time és a TNS Hoffmann által végzett kutatás

Bank: minden tranzakciónál. Egyetemek: regisztráci. Emberi erőforr. források: alkalmazottak adatainak rögzr

Fordítóprogramok Készítette: Nagy Krisztián

A Felhasználónév és Jelszó mezőkbe írjuk be az adatainkat, majd kattintsunk a Bejelentkezés gombra, vagy üssük le az Enter billentyűt.

Számítógép hálózatok gyakorlat

Kereséssel történő problémamegoldás. Ormándi Róbert

Felvételi 2013 Felvételi tájékoztató 2013

Statisztika március 11. A csoport Neptun kód

TOVÁBBI INFORMÁCIÓT TARTALMAZÓ HIRDETMÉNY, BEFEJEZETLEN ELJÁRÁSSAL KAPCSOLATOS INFORMÁCIÓ VAGY KORRIGENDUM

Az éves statisztikai összegezés. Statisztikai összegezés az éves közbeszerzésekről a Kbt. IV. és VI. fejezete szerinti ajánlatkérők vonatkozásában

Csoportosított adatok megjelenítése sorhalmaz függvények használatával

Az éves statisztikai összegezés STATISZTIKAI ÖSSZEGEZÉS AZ ÉVES KÖZBESZERZÉSEKRŐL A KLASSZIKUS AJÁNLATKÉRŐK VONATKOZÁSÁBAN

Nagy András. Számelméleti feladatgyűjtemény 2009.

Kiskunmajsa Város Önkormányzatának partnertérképe

Halmazok és függvények

Tájékoztató. Értékelés Összesen: 100 pont

Digitális technika (VIMIAA01) Laboratórium 1

ELLENÁLLÁSOK PÁRHUZAMOS KAPCSOLÁSA, KIRCHHOFF I. TÖRVÉNYE, A CSOMÓPONTI TÖRVÉNY ELLENÁLLÁSOK PÁRHUZAMOS KAPCSOLÁSA. 1. ábra

FENNTARTHATÓ FEJLŐDÉS

2004. december 1. Irodalom

Egyre nagyobb profitot generálnak a mobiltelefonnal végzett vásárlások, és egyre többet hezitálunk vásárlás előtt

tetszőleges időpillanatban értelmezhető végtelen sok időpont értéke egy véges tartományban bármilyen értéket felvehet végtelen sok érték

Számítógépes vírusok

Operációkutatás. 2. konzultáció: Lineáris programozás (2. rész) Feladattípusok

IDE64 dokumentáció. A merevlemez előkészítése az első használatra. 1. Előkészítés. 2. Csatlakoztatás. 3. Segédprogram másolás

Időzített rendszerek és az UPPAAL

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2006/2007

IKT FEJLESZTŐ MŰHELY KONTAKTUS Dél-dunántúli Regionális Közoktatási Hálózat Koordinációs Központ

Vasúti menetrendek optimalizálása

VÁLTOZIK AZ ISO 9001-ES SZABVÁNY. KINEK JÓ EZ?

Számelmélet I. 1. A tantárgy általános célja és specifikus célkitűzései

Előre is köszönjük munkádat és izgatottan várjuk válaszaidat! A Helleresek

Vodafone ReadyPay. Használati útmutató

Országos Középiskolai Tanulmányi Verseny 2011/2012 Matematika I. kategória (SZAKKÖZÉPISKOLA) Döntő. x 3x 2 <

Tájékoztató a szerződés módosításáról_munkaruházati termékek szállítása (5. rész)

3. Térvezérlésű tranzisztorok

MAGYAR NYELV a 4. évfolyamosok számára. MNy2 JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

Kerékpárlabda kvalifikációs szabályzat

MATEMATIKA VERSENY

Á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 bpozitív egész számok és jelöljük ( a, b ) -velaés b legnagyobb közös osztóját

Legnagyobb közös osztó Ha a = b * q + r, akkor( a, b ) = ( b, r ), ígyaproblé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 Aprogramoknak nincs szerkezete

Programozási módszertan Ajó programlegfontosabb kritériumai jól áttekinthető szerkezete van jól dokumentált bizonyítható módon azt csinálja,amitkell

Moduláris programozás Tervezés alapja a dekompozíció (részekre osztás) A bonyolult feladatot részekre, modulokra osztjuk A részekre kidolgozzuk a megoldást Összeállítjuk a modulokat

Oszd meg és uralkodj Irányelvek Egyértelműen felosztjuk modulokra Modulok egymásba nem nyúlnak bele Egymástól függetlenül működnek Hibák kiszűrése egyszerű Feladat átlátható Könnyebben módosítható

Adatok elrejtése Irányelvek Modulok csak saját adataikon dolgoznak Döntések elhalasztása Csak akkor hozzunk meg egy döntést ha már szükséges Ha nincs elég információ halasszuk későbbre Korán hozott döntést lehet hogy később meg kell változtatni Döntések kimondásának elve Ha meghoztunk egy döntést azt rögzítsük!!! Később nehogy ellentmondó döntést hozzunk

Moduláris programozás Top-Down dekompozíció Afeladatot részfeladatokra bontjuk,majd azokat további részfeladatokra, míg kezelhető méretű részproblémákhoz nem jutunk Bottom-Up kompozíció Már meglévő, kész modulokból építkezünk Előre nem tudható, hogy hogyan fognak kapcsolódni egymáshoz Ha már létezik egy rutingyűjtemény

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 elhagyvaegy megközelítőleg jó programkészítése, melyeket tesztekkel lehet ellenőrizni.

Boehm, Jackopini 1964 Minden algoritmikus programvezé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 Mindenszekvencia elemnek egy belépési és egy kilépési pontja lehet.(egyik rész kimeneteamásik rész bemenete.) Mindenszekvencia 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 bemindaddig, amíg0-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 afeldolgozásnak. Mit fog kinyomtatni? Mi a probléma itt? be 33 5 12 db 2345 2346 2347 2348 2348

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 33 5 12 db 0 1 2 3 3

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 tömb 1 2 3 4 5 6 5 2 6 1 3 4 x = 1 min = 1 y=1 6 y 1 2 3 4 5 6 min 1 2 2 4 4 4 min=4

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

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

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

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

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

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

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

Rendezés 10 index tömb 1 2 3 4 5 6 1 2 3 4 6 5 x = 5 min = 6 felcserélés Az eredmény: index tömb 1 2 3 4 5 6 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. Asertés darabja három és fél arany, egykecske ára egy és egyharmad arany, egyjuh á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 ígyk = 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ételis 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