Algoritmusok

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 71

Ksztette: Subecz Zoltn, Szolnoki Fiskola, http://suzo.uw.hu, subecz@szolf.

hu

Algoritmusok
Ajnlott irodalom az Interneten: A doksi.hu oldalon a Programozs-elmlet kategriban sok knyv van ebben a tmban. Regisztrls utn letlthet. Algoritmusokhoz: doksi.hu oldalon: Az algoritmus Elemi algoritmusok Elemi programozsi ttelek Hernyk Zoltn - Algoritmusok s adatstruktrk, 1. flv http://www.fzolee.hu/download/download.php?fname=./Adatszerkezetek_es_Prog%20_tetelek.pdf http://e-oktat.pmmf.hu/webgui/www/uploads/images/725/1b-algoritmusok.pdf http://www.vasvill.hu/~kerese/tetelek/ Adatszerkezetekhez: (utols fejezet) doksi.hu oldalon: Adatszerkezetek pldatr Dr. Juhsz Istvn - Adatszerkezetek es algoritmusok http://www.fzolee.hu/download/download.php?fname=./Adatszerkezetek_es_Prog%20_tetelek.pdf Ajnlott irodalom: - Jrdn Tams, Pomahzi Sndor: Adatszerkezetek s algoritmusok EKF Lceum Kiad - Szlvi Pter - Zsak Lszl: Mdszeres programozs: Programozsi ttelek. Mikrolgia sorozat, ELTE IK - Szlvi Pter - Zsak Lszl: Mdszeres programozs: programozsi bevezet. Mikrolgia sorozat, ELTE IK Egyb irodalom: Mgorin Huhn gnes: Algoritmusok s adatszerkezetek Juhsz Gyula Felsoktatsi Kiad Fehrvri Arnold, Marton Lszl: Algoritmusok s Adatstruktrk Novadat Kiad Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest: Algoritmusok, Mszaki Knyvkiad, 2003 Ivnyi Antal: Informatikai algoritmusok I., ELTE Etvs Kiad, 2004 Cormen T.H.- Leiserson C.E.-Rivest R.L.-Stein C.: j algoritmusok. Scolar Informatika. 2003. Ross J.-Harris S.: Kezdknyv az algoritmusokrl. Szak Kiad, 2006. Vlissedes J.-Helm R.-Johnson R.-Gamma E.: Programtervezsi mintk. Kiskapu Kiad. 2004. Lipshutz: Adatszerkezetek, Panem Kft. Budapest, 1993. Wirth: Algoritmusok + adatstruktrk = programok, Mszaki Knyvkiad, Budapest, 1982 -1-

Minden algoritmushoz ksztse el a programkdot is C# nyelven.

Tartalomjegyzk
Tartalomjegyzk............................................................................................................................................2 1. fejezet.........................................................................................................................................................3 1.1 Alapok..................................................................................................................................................3 1.2 Az algoritmus rszei............................................................................................................................5 1.3 Algoritmusler eszkzk....................................................................................................................8 2. fejezet Programozsi ttelek....................................................................................................................19 2.1 Elemi programozsi ttelek................................................................................................................19 2.2 sszetett programozsi ttelek..........................................................................................................28 Alapok......................................................................................................................................................49 Lista..........................................................................................................................................................52 Verem, Stack............................................................................................................................................56 Sor............................................................................................................................................................61 Fa..............................................................................................................................................................64 Grf..........................................................................................................................................................70

-2-

1. fejezet
1.1 Alapok
Algoritmus fogalma: Az algoritmus olyan lpssorozat, amely egy feladat megoldsa sorn vges szm lpsben vgeredmnyre jutunk. Kt dolgot kell kiemelni. Az egyik, hogy vges szm lpsben jutunk eredmnyre. Ez azrt lnyeges, mert az alkalmazott algoritmust ksbbiekben le is kell tudni programozni. A msik lnyeges szempont, hogy eredmnyre jutunk, hiszen kszthetnk olyan lpssorozatot, amely sem vges, sem vgtelen lpsben nem vezet eredmnyre. Egy problma megoldsnak vges szm rszlpsben trtn egyrtelm s teljes lerst algoritmusnak nevezzk. - rtheten s kvetheten egy folyamatot r le. - Programozsi nyelvtl fggetlen ( sok fajta nyelven le lehet majd kdolni). - Az algoritmus egy cselekvsi sorozat formlis lersa Kvetelmnyek: Az egyes rszlpseknek vgrehajthatnak kell lennie. A lpseknek egyrtelmnek kell lenni. Ez biztostja, hogy tetszlegesen sokszor vgrehajtva, mindig ugyanazt a rszeredmnyt kapjuk. A rszlpseket vges sokszor kell vgrehajtani. Vges sok lpsben vgre kell hajtdnia. Ha a program soha nem rne vget, akkor pldul a program futsnak eredmnyt soha nem tudnnk meg, teht a program haszontalan lenne. - Elemi lpsekre bontjk a problmt. - az algoritmust alkot utastsok legyenek egyrtelmek, - utastsok gpiesen vgrehajthatk, Az olyan algoritmust, amelyet egy szmtgp vgre tud hajtani, programnak nevezzk. A szmtgpi program abban klnbzik egy neki megfelel logikai algoritmustl, hogy a programnak nevezett algoritmus szigor formai elrsokhoz, jellsrendszerhez kttt. Ilyen lehetsges jellsrendszer a Pascal, C stb. programozsi nyelv. A programozsi nyelvek formai szablyai nagyon ktttek. Ha egy karaktert mr rosszul runk, akkor a fordt mr hibt jelez. Ezzel szemben az algoritmusok formai szablyai kevsb ktttek. Az algoritmusok lersi szablyai knyvenknt is klnbzhetnek bizonyos hatrok kztt. A feladat kidolgozsban absztrakt objektumokat, absztrakt algoritmus elemeket alkalmazunk. Ez azt jelenti, hogy nem csak a program nyelvekben elre definilt szimblumokat hasznljuk fel, hanem sajt magunk ltal definilt jellseket is hasznlhatunk az ltalunk definilt mvelet csoportok vgrehajtsra. Ugyangy nemcsak a megszokott adatszerkezeteket hasznlhatjuk, hanem ltrehozhatunk jakat. 1960-as vek vgig monolitikus programozs Jellemzi: Egy programoz egy program A programoknak nincs szerkezete A j program legfontosabb kritriumai jl ttekinthet szerkezete van jl dokumentlt -3-

bizonythatmdon azt csinlja, amit kell Modulris programozs Oszd meg s uralkodj elv Top-Down dekompozci A feladatot rszfeladatokra bontjuk,majd azokat tovbbi rszfeladatokra, mg kezelhet mretr szproblmkhoz nem jutunk Bottom-Up kompozci Itt is rszfeladatokat oldunk meg, de elre nem tudhat, hogy hogyan fognak kapcsoldni egymshoz A modulris programozs elnyei: Rszprogramok knnyen ttekinthetk Knnyebben megrhat Knnyebben tesztelhet Tbb modul rhat egy idben(prhuzamos problmamegolds) Knnyebben javthat A modulok szabvnyosthatk Modulknyvtrakban trolhatk jrafelhasznlhatk Az algoritmus tervezsnek alapja a dekompozci: A feladatot rszekre kell bontani, a rszeket meg kell oldani, majd a megoldott rszeket kell sszelltani, hogy egytt mkdhessenek. A rszekre bontsnl kt irnyzatot klnbztetnk meg: - Fellrl lefel, fokozatosan, lpsenknt finomtssal. (Top-down mdszer) - Alulrl felfel (bottom-up) mdszer, ahol a kisebb feladatok megoldsval kezdjk, majd azutn gondolkodunk az sszellts struktrjn.

-4-

Struktrltprogramozs Top-Down dekompozcit egszti ki Az eredeti feladat rszfeladatra bontsa,keletkezik egy absztraktprogram,mely egy absztrakt szmtgpen mkdik s mivel az eredeti specifikcibl indulunk ki bizonythat mdon mkdik a program. Finomts,mely cskkenti az absztrakcit(egy rszproblma kifejtse) jabb absztrakt gpen jabb utastskszlet mellett megint bizonythatan mkdik a program. Tovbbi finomtsok,mg egy konkrt gp konkrt utastskszletig eljutunk. Az algoritmus vezrlsi szerkezete meghatrozza, hogy a programban (algoritmusban) lert utastsokat a program milyen sorrendben hajtsa vgre.

1.2 Az algoritmus rszei


szekvencik (utastsok egyms utnisga), Az egymst kvet utastsokat (vagy teendket) nevezzk szekvencinak. A szekvencit alkot utastsok a megads (lers) sorrendjben vgrehajtandk utasts 1 utasts 2 Htkznapi letbl vett algoritmus: Utcai telefonkszlk hasznlatnak algoritmusa Emelje fel a kzibeszlt Vrja meg a trcsahangot Ha van trcsahang, akkor Dobjon be egy 50 Ft-ost! Trcszzon! Vge szelekci, ms nven elgazs (az algoritmus feltteltl fgg elgaztatsa). A szelekci (ms nven elgazs) olyan vezrlsi szerkezet, amely egy logikai felttel hatsra a program vgrehajtsa kt vagy tbb irnyra sztbomlik s a felttel eredmnytl fggen klnbz szekvencit hajt vgre a program. Kt (vagy tbb) mveletcsoport kzl legfeljebb csak az egyiket kell vgrehajtani. A dnts mindig valamilyen logikai feltteltl fggenek, s annak ismeretben egyrtelm a dnts. A program szekvencijt 2 vagy tbb irnyba osztjk meg egy logikai kifejezs rtktl fggen. Az elbbi plda finomtsa: Utcai telefonkszlk hasznlatnak algoritmusa Emelje fel a kzibeszlt Vrja meg a trcsahangot Ha nincs bg hang, akkor Keressen egy msik telefonkszlket! Kezdje ellrl a folyamatot egybknt Dobjon be egy 50 Ft-ost! Trcszzon! Vge -5-

Elgazsok fajti: Egyszer elgazs (egy utastsblokkbl ll): az utastsblokk a feltteltl fggen vagy vgrehajtsra kerl, vagy nem. HA stt van AKKOR kapcsold fel a villanyt kt utastsblokkbl ll sszetett elgazs: A kt utastsblokk kzl a feltteltl fggen pontosan az egyik utastsblokk hajtdik vgre. HA meleg_van AKKOR nyisd ki az ablakot KLNBEN folytasd a munkd. tbb utastsblokkbl ll sszetett elgazs: A tbb utastsblokk kzl legfeljebb az egyik kerl vgrehajtsra - elkpzelhet, hogy egyik felttel sem teljesl. Ekkor - ha van KLNBEN g, akkor az hajtdik vgre - ha nincs KLNBEN g, akkor egyik blokk sem hajtdik vgre - ha tbb felttel is teljesl, akkor sorrendben csak az els hajtdik vgre ELGAZS HA kaphat_tr AKKOR sss_trs_stit HA kaphat_mk AKKOR sss_mkos_stit HA kaphat_di AKKOR sss_dis_stit KLNBEN sss_alms_stit ELGAZS VGE itercik ms nven ciklusok (utastsok ismtlse, amg teljesl egy vizsglt felttel), Egy programrszlet tbbszri vgrehajtst teszi lehetv. A ciklus olyan programszerkezet, amely egy szekvencit ismtel. A ciklusnak utastsok sorozatt ismtli. Egy feltteltl fggen egy adott utastsblokk tbbszri ismtelt vgrehajtst jelenti. Az utastsblokkot ciklusmagnak nevezzk. A felttelt ciklus vezrl felttelnek.
Szrpautomata hasznlati algoritmusa: Vlaszd ki a megfelel szrpt! Dobj be egy 100 Ft-ost! Nyomd meg a kvnt szrphz tartoz gombot! Ismteld amg nem telik meg a pohr: Nzd a poharat! Vedd ki a poharat! Idd meg a szrpt! Vge Ciklusok fajti:

-6-

Szmlls ciklus A ciklus fejben a ciklusmag ismtlsnek szmt hatrozzuk meg. Ez is elltesztel ciklus, teht ha az ismtlsek szma 0 lenne, akkor a ciklusmag nem fut le egyszer sem. Mindhrom esetnl ugyanaz lesz a plda: rassuk ki a szmokat 10-tl 20-ig: Ciklus A=10-tl 20-ig Ki: A Ciklus vge Elltesztel ciklus a ciklusmag vgrehajtst meghatroz felttel a ciklusfejben van. A felttel vizsglata egyszer mindenkppen lezajlik. A ciklusfejbe a ciklus vgrehajtsnak a felttelt rjuk (a bennmarads felttele), vagyis ha a felttel ppen igaz, akkor vgrehajtjuk a ciklusmagot. Lehetsges olyan helyzet, hogy a program vgrehajtsa sorn a ciklus felttele eleve hamis, ekkor a ciklus mag sohasem hajtdik vgre. A:=10 Ciklus amg A<=20 Ki:A A=A+1 Ciklus vge Az algoritmusoknl az rtkads jele: := ( C s C# nyelvekben: = ) a felttelvizsglat jele: = ( C s C# nyelvekben: == ) Htultesztel ciklus a ciklusfej nem tartalmaz felttelt, a ciklusmag mindenkppen lefut egyszer, s a ciklusmag lefutsa utn vizsgljuk meg a felttel teljeslst. Itt ltalban szintn a bennmarads felttelt rjuk le. A:=10 Ciklus Ki:A A=A+1 amg A<=10 Struktrlt programozs: olyan algoritmusok ksztse, amely csak a fenti hrom tevkenysgszerkezet tartalmaz (szekvencia, szelekci, iterci). Matematikusok bizonytottk, hogy minden algoritmus elkszthet csak ezen hrom szerkezet segtsgvel.

-7-

1.3 Algoritmusler eszkzk


Az algoritmus ler eszkzk feladata, az hogy ltalnosan megfogalmazott feladat megoldsi lpssorozatot programozhatsg szempontjbl konkrtan megadjuk. Az algoritmus ttekinthet formban val lersra szmtalan eszkz ltezik: szveges lers, megfogalmazs pszeudokd, folyamatbra vagy blokkdiagram, struktogram, Jackson diagram. Szveges lers A szveges lers sorn sajt szavainkkal rjuk le a feladat megoldsnak lpseit. Ekkor kln elre elfogadott szablyokhoz nem kell alkalmazkodni, egyedi lersmdot vlaszthatunk. Mr tallkoztunk vele. pl. a szrpautomata lersa Pszeudokd A pszeudokd a beszlt nyelv mondatait alkalmaz olyan utasts sorozatbl ll, amelyek egy-egy rszfeladat megoldst jelentik. A pszeudokd olyan mondatszer lers, amely alapveten hromfle vezrlsi szerkezetet alkalmaz: - felsorolst (szekvencit), - Esetsztvlasztst (szelekcit, kivlasztst), - Ismtlst (ciklust, itercit). Ezzel is tallkoztunk mr: pl.: A:=10 Ciklus amg A<=20 Ki:A A=A+1 Ciklus vge

-8-

Folyamatbra Grafikus brk segtsgvel trtnik az algoritmus lersa A grafikai jeleket nyilakkal ktjk ssze, a program futsnak megfelel mdon. A folyamatbrk fbb rszei az albbiak:

Kezds:

Elemi utasts, tevkenysg:

Feltteles elgazs: Ha a felttel igaz, akkor az i-vel jellt gon a program, egybknt az n-nel jellt gon folyik tovbb.

Vge: A bemenetre s a kimenetre egyes knyvekre kln jellst hasznlnak: tglalap helyett trapz:

-9-

A vezrlsi szerkezetek megvalstsa: Szekvencia: Szelekci ( feltteles elgazs ):

Iterci ( ciklus):

- 10 -

Pldk folyamatbrra: Plda: A teafzs algoritmust mutatja be. Minden egyes lps, amit a teafzs sorn vgznk, egy szekvencinak foghat fel. Vannak olyan esetek, mikor vrakozni kell ezek egy ciklussal megvalsthatk.

- 11 -

Plda: Bekr a felhasznltl egy szmot (N). sszeadja 1-tl N-ig az egszeket. ( Az S vltozba ) Kirja a vgeredmnyt.

- 12 -

Plda: Bekr a felhasznltl egy egsz szmot (N), majd utna annyi tovbbi egsz szmot kr be, amekkora az N rtke. A cl, a bekrt szmok sszegzse, s az sszeg eredmnynek kirsa a kpernyre. Az sszeg az S segdvltozban jn ltre. Az I (egsz szm tpus) vltoz trolja, hogy eddig mennyi szm beolvassa trtnt meg.

- 13 -

Struktogram: Egy programot egymsba gyazott dobozokkal szemlltet. Szekvencia:

Szelekci ( feltteles elgazs ):

Iterci (ciklus) Szmlls ciklus:

Ell tesztel ciklus:

Htul tesztel ciklus:

- 14 -

Plda:

Plda:

Plda: Beolvasunk kt szmot. Eldntjk, hogy melyik a nagyobb, majd kirjuk.

- 15 -

Plda: Ell tesztels ciklus:

Plda: Egsz szmokat olvassunk be mindaddig,amg 0-t nem adnak be. Ha 0-t kapunk, kirjuk hny darab szmot olvastunk be a 0 kivtelvel.

Plda: Htul tesztel ciklus.

- 16 -

Plda: Egsz szmokat olvassunk be mindaddig,amg 0-t nem adnak be. Ha 0-t kapunk, kirjuk hny darab szmot olvastunk be a 0 kivtelvel.

Plda Szmlls ciklus.

Plda: Bekr a felhasznltl egy szmot (N). sszeadja 1-tl N-ig az egszeket. ( Az S vltozba ) Kirja a vgeredmnyt.

- 17 -

Plda: Bekr a felhasznltl egy egsz szmot (N), majd utna annyi tovbbi egsz szmot kr be, amekkora az N rtke. A cl, a bekrt szmok sszegzse, s az sszeg eredmnynek kirsa a kpernyre. Az sszeg az S segdvltozban jn ltre. Az I (egsz szm tpus) vltoz trolja, hogy eddig mennyi szm beolvassa trtnt meg.

Plda Az elz struktogram tovbbfejlesztett vltozata. Csak akkor adja hozz az S vltozhoz a felhasznl ltal megadott A rtkt, ha az nagyobb, mint 5.

- 18 -

2. fejezet Programozsi ttelek


A Strukturlt programozs tantrgy befejezse utn folytatjuk innen. A tovbbiakban olyan algoritmusokat trgyalunk meg, amelyek a programozs sorn rendszeresen elfordul feladatok megoldsra ksz vlaszt adnak. Ezeket az algoritmusokat programozsi tteleknek hvjk. A programozsi ttelek azok az ptkvek, amelyek egy program ltrehozsa sorn gyakran elfordulnak. Minden programozsi ttelhez ksztsen egy vals feladatra C# programot is! A C tpus nyelveknl pl. C, C++, C# a tmbk 0-tl indexeldnek. Ezrt vigyzni kell majd az algoritmus kdolsnl. Sok programozsi ttelhez van C# kd: http://csharptk.ektf.hu

2.1 Elemi programozsi ttelek


Egy sorozathoz egy rtket rendel hozz. A sorozat lehet tmb, de ms sszetett adatszerkezet is. pl. string, lista, sor, Van hogy az elemek nincsenek kigyjtve, hanem csak szveggel adjuk meg: pl. az 50 s 100 kztti egszek. Az egyszersg miatt a tmbkrl lesz sz. A kiindul adatok X[N], N elem tmbben vannak. Ehhez hatroz meg egy rtket eredmnyknt. Az sszetett programozsi tteleknl az eredmny nem egy rtk, hanem tbb rtk (rtkek sorozata) lesz. 1. Sorozatszmts A sorozat minden elemn vgigmenve egy adott szmolst vgznk (pl. sszegzs, tlagszmts) s eredmnyl egy rtket kapunk. Pldk: - Hatrozza meg az [1, 100] intervallumba es pros szmok sszegt! - Hatrozza meg az els n termszetes szm sszegt! - Adott az egsz szmok egy intervalluma. Hatrozza meg az intervallumba es egsz szmok kbeinek sszegt! - hinyzsi statisztika ksztse. Egy tanulrl tudjuk, hogy a hnap egyes napjain hny rt mulasztott, Hatrozza meg, hogy ezen hnapban mennyi mulasztott rinak a szma. - Egy osztly tanulinak flvi matematika osztlyzatai ismertek. Szmtsa ki a matematika flvi tlageredmnyt! Be: X(N) - X nev, N elem tmb f - fggvny F0 - kezdrtk Ki: Y - rtk f: az a fggvny, amit alkalmazni kell az egyes feladatokban. Ha ssze kell adni az elemeket, akkor a fggvny az sszeads. sszeadsnl F0=0 A vgeredmny az Y vltozban kpzdik. - 19 -

Eljrs Sorozatszmts Y:=F0 // Belltjuk Y kezd rtkt Ciklus i:=1-tl N-ig Y:=f(Y,X(i)) // Minden lpsnl az Y aktulis rtkre s X(i)-re alkalmazzuk az f fggvnyt. // sszeadsnl: az eddigi rtkek sszeghez hozzadjuk az X(i) rtket. Ciklus vge Eljrs vge Feladatonknt ms-ms dolgot kell kiszmtani. 1.1 sszegzs ttele Pl. Adott egy N elem szmsorozat. Szmoljuk ki az elemek sszegt! Eljrs S:=0 Ciklus I=1-tl N-ig S:=S+A(I) Ciklus vge Eljrs vge. A lpegetsben haladhattunk volna visszafel is. Ha pl. tlagukat kell kiszmtani, akkor az sszegket osztjuk N-el.

- 20 -

2. Megszmols Egy X[N] tmbben keressk hogy hny db. T tulajdonsg eleme van. Itt az a krds, hogy az adott tulajdonsg hnyszor fordul el, teht definilunk egy DB nev egsz rtkeket felvev vltozt, amelynek a kezd rtke 0. Az fogja tartalmazni a krdses elemszmot. A vlaszhoz vgig kell nzni a teljes tmbt. Pldk: - Szmoljuk meg, hogy a [25, 68] intervallumban hny darab ttel oszthat szm tallhat! - Hny prmszm tallhat a termszetes szmok egy adott intervallumban? - Adjuk meg, hogy egy adott iskola nyilvntartsban hny Nagy Gbor nev tanul szerepel! Be: Ki: X(N) - X nev, N elem tmb T - tulajdonsg DB N darabszm 0<=DB<=N, X-beli T tulajdonsg elemek szma

Eljrs Megszmols DB:=0 Ciklus i:=1-tl N-ig Ha T(X(i)), akkor DB:=DB+1 Ciklus vge Eljrs vge Vgig megynk minden elemen s ha az adott elem T tulajdonsg, akkor Db-t megnveljk 1-el. Plda: Szmoljuk meg, hogy hny darab 100-nl nagyobb elem van a tmbben: Eljrs Megszmols DB:=0 Ciklus i:=1-tl N-ig Ha X(i)>100, akkor DB:=DB+1 Ciklus vge Eljrs vge

- 21 -

3. Maximumkivlaszts Egy sorozat legnagyobb elemt kell megtallni. Pldk - Keressk meg egy intervallumon a legkisebb fggvnyrtket! - Az f(x) = 2x3 - 3x2 + 4x - 9 fggvnyt a [-2; 15] egszintervallumon rtelmezzk. Hatrozza meg az intervallumnak azt az elemt, ahol a fggvny helyettestsi rtke a legnagyobb! Mekkora ez az rtk? - Egy krhzban megmrtk minden betegnek a lzt. Adjuk meg, hogy kinek a legmagasabb a hmrsklete. - Az pttbor 18 brigdja kztt hat napig tart versenyt hirdettek meg. Egy tblzatban rgztettk naponta a brigdteljestmnyeket, Ki lett a gyztes brigd? Be: Ki: X(N) - X nev, N elem tmb MAX N - sorszm 1<=MAX<=N, X(MAX)>=X(i) minden 1<=i<=N esetn

Nem a legnagyobb elemnek az rtkt, hanem a sorszmt kapjuk meg. Ebbl az rtke knnyen addik: X(MAX) Itt is vgig kell menni a sorozat minden elemn. Eljrs Maximumkivlaszts MAX:=1 // MAX-ra kezd rtkknt belltjuk az els elem indext. // gy a ciklusban mr csak a 2. elemtl kell vizsglni. Ciklus i:=2-tl N-ig Ha X(i)>X(MAX), akkor MAX:=i // Ha az adott elem nagyobb mint X(MAX), akkor MAX:=i Ciklus vge Eljrs vge A minimum-kivlaszts hasonlan: Eljrs Minimumkivlaszts MIN:=1 Ciklus i:=2-tl N-ig Ha X(i)<X(MIN), akkor MIN:=i // Ha az adott elem nagyobb mint X(MIN), akkor MIN:=i Ciklus vge Eljrs vge Ha a legnagyobb elemnek az rtkt s nem a sorszmt keressk, akkor ez a megolds is j: Eljrs Maximumkivlaszts MAX:=X(1) Ciklus i:=2-tl N-ig Ha X(i)>MAX, akkor MAX:=X(i) Ciklus vge Eljrs vge

- 22 -

Az eddigi tteleknl vgig kellett a tmb minden elemn menni. A kvetkez 3 ttelnl nem kell minden elemen vgig menni ltalban. 4. Eldnts Dntsk el, hogy egy X[N] tmbben, hogy van-e benne T tulajdonsg elem. Adott egy N elem sorozat s egy, a sorozat elemein rtelmezett T tulajdonsg. Az algoritmus eredmnye: annak eldntse, hogy van-e a sorozatban legalbb egy T tulajdonsggal rendelkez elem. A feltett krdsre igennel, vagy nemmel kell vlaszolni. Pldk - Egy megadott intervallum tartalmaz-e nyolccal oszthat szmot? - Adott termszetes szmrl dntsk el, hogy van-e valdi osztja! - Egy adott nvrl dntsk el, hogy szerepel-e az adott nvsorban! - Termszetes szmok adott intervallumban van-e prmszm? Be: Ki: X(N) - X nev, N elem tmb T - tulajdonsg VAN - logikai rtk VAN=igaz, ha ltezik olyan 1<=i<=N, melyre T(X(i)), VAN=hamis egybknt.

Nem kell vgig menni a sorozat elemn ltalban. Hiszen ha mr talltunk egy T tulajdonsg elemet, akkor megkaptuk a vlaszt. Addig kell menni, amg nem tallunk. Ez jelentsen javtja a hatkonysgot: Egy tbb milli elemet tartalmaz tmbnl nem mindegy hogy vgig kell e menni vagy nem, ha mr az elejn el tudjuk dnteni a krdst. Eljrs Eldnts i:=1 Ciklus amg i<=N s nem T(X(i)) // Nem megynk tovbb, ha mr tlmentnk a sorozat vgn, vagy az adott elem T tulajdonsg. i:=i+1 // tovbb lp a kvetkez elemre. Ciklus vge VAN:=(i<=N) // Mskppen: HA (i<=N) akkor VAN:= Igaz // Klnben VAN:= Hamis // Ha a ciklus utn i<=N, akkor biztos, hogy talltunk T tulajdonsg elemet. Eljrs vge Plda: Dntsk el, hogy van-e 10-es szm a tmbben: Eljrs Eldnts i:=1 Ciklus amg i<=N s X(i) != 10 i:=i+1 Ciklus vge VAN:=(i<=N) Eljrs vge

( != jelentse: nem egyenl )

- 23 -

4.2 Eldnts MIND Itt azt kell eldnteni, hogy minden elem T tulajdonsg e a sorozatban. Addig megynk, amg tallunk egy olyan elemet, ami nem T tulajdonsg. Eljrs Eldnts-MIND I:=1 Ciklus amg i<=N s T(X(i)) i:=i+1 Ciklus vge MIND:=(I>N) // Ha tlmentnk az utols elemen, akkor biztos, hogy minden elem T tulajdonsg. Eljrs vge Plda: Dntsk el, hogy minden elem 10-es rtk-e a tmbben: Eljrs Eldnts-MIND I:=1 Ciklus amg i<=N s X(i) = 10 i:=i+1 Ciklus vge MIND:=(I>N) // Ha tlmentnk az utols elemen, akkor biztos, hogy minden elem T tulajdonsg. Eljrs vge

- 24 -

5. Kivlaszts Hasonl az elzhz. De itt tudjuk, hogy van az elemek kztt T tulajdonsg. A feladat: az els T tulajdonsg elem sorszmnak a megadsa. ltalban itt sem kell minden elemen vgig menni: ha megtalltuk a keresettet, akkor megllunk. ( hatkonysg!) Adott egy N elem sorozat, egy, a sorozat elemein rtelmezett T tulajdonsg, valamint azt is tudjuk, hogy a sorozatban van legalbb egy T tulajdonsg elem. A feladat ezen elem sorszmnak meghatrozsa. Pldk: - Ismerjk egy hnap nevt. a hnapnevek sorozata alapjn mondjuk meg a sorszmt. - Adjuk meg egy termszetes szm (szm>1) legkisebb 1-tl klnbz osztjt. - A naptrban tallhat nvnapok alapjn adjuk meg bartunknak mikor van a nvnapja. Be: X(N) - X nev, N elem tmb T - tulajdonsg Ki: S N sorszm 1<=S<=N s T(X(S))

Tudjuk hogy: Ltezik olyan 1<=i<=N, melyre T(X(i)) Eljrs Kivlaszts i:=1 Ciklus amg nem T(X(i)) i:=i+1 Ciklus vge S:=i Eljrs vge Plda: Vlasszuk ki az els 25-s rtk elemet a sorozatbl: Eljrs Kivlaszts i:=1 Ciklus amg X(i) != 25 i:=i+1 Ciklus vge S:=i Eljrs vge Plda: Vlasszuk ki az utols 25-s rtk elemet a sorozatbl: Eljrs Kivlaszts i:=N Ciklus amg X(i) != 25 i:=i-1 Ciklus vge S:=i Eljrs vge

- 25 -

6. Lineris keress Lineris: lesz majd ms fajta keress is. Hasonl az elz kt ttelhez: Rendelkezsre ll egy N elem sorozat, egy, a sorozat elemein rtelmezett T tulajdonsg. Olyan algoritmust kell rni, amely eldnti, hogy van-e T tulajdonsg elem a sorozatban, s ha van, akkor megadja a sorszmt. Feladatok: - Egy szmokat tartalmaz tmbben van e 100-nl nagyobb szm? Ha igen, akkor hnyadik? - Egy nvsorban tallhat-e Szab Istvn nev tanul, s ha igen hnyadik? - Adott a tanulk v vgi matematika eredmnye. llaptsuk meg, hogy van-e bukott kzttk! Ha van, akkor adjuk meg (az egyiknek) a nevt. Be: Ki: X(N) - X nev, N elem tmb T - tulajdonsg VAN - logikai vltoz Ha VAN, akkor S N sorszm VAN=igaz, ha ltezik olyan 1<=i<=N, melyre T(X(i)), VAN=hamis egybknt. Ha VAN, akkor S : 1<=S<=N s T(X(S)) Ugyanaz, mint az Eldnts, csak a pirossal jellt sor lett beszrva. Eljrs Keress i:=1 Ciklus amg i<=N s nem T(X(i)) i:=i+1 Ciklus vge VAN:=(i<=N) Ha VAN, akkor S:=i Eljrs vge Plda: Dntsk el, hogy van-e negatv szm a sorozatban. Ha igen, akkor adjuk meg a sorszmt. Eljrs Keress i:=1 Ciklus amg i<=N s X(i)>=0 i:=i+1 Ciklus vge VAN:=(i<=N) Ha VAN, akkor S:=i Eljrs vge

- 26 -

Plda: Dntsk el, hogy van-e negatv szm a sorozatban. Ha igen, akkor adjuk meg az utols sorszmt. Eljrs Keress i:=N Ciklus amg i>=1 s X(i)>=0 i:=i-1 Ciklus vge VAN:=(i>=1) Ha VAN, akkor S:=i Eljrs vge

- 27 -

2.2 sszetett programozsi ttelek


Az eddigi programozsi ttelekben egy rtket szolgltattak. A tovbbiakban olyan ttelek nznk, amelyek tbb rtket adnak vissza. Ennek megfelelen az eredmnyeket is egy tmbben kapjuk vissza. Mindegyik ttelnl vgig megynk a teljes tmbn. 1. Msols Adott egy X bemeneti tmb. Az elemeket msoljuk t egy msik tmbbe (Y), gy hogy msols kzben rajtuk vltoztatst vgznk egy f fggvny szerint. Pldk: - Egy osztly tanulinak jegye alapjn hatrozzuk meg, hogy a bizonytvnyukba jeles, j, kzepes, elgsges, vagy elgtelen sz kerlt. - Egy szveg minden magnhangzjt cserljk ki e betre. Be: Ki: X(N) - X nev, N elem tmb f - fggvny Y(N) - Y nev, N elem tmb Y(i)=f(X(i)) minden 1<=i<=N esetn

Eljrs Msols Ciklus i:=1-tl N-ig Y(i):=f(X(i)) Ciklus vge Eljrs vge Plda Az X tmbbl msoljuk t az elemek ngyzeteit az Y tmbbe: Eljrs Msols Ciklus i:=1-tl N-ig Y(i):=X(i)*X(i) Ciklus vge Eljrs vge

- 28 -

2. Kivlogats Egy N elem sorozat sszes T tulajdonsggal rendelkez elemnek sorszmt gyjtsk ki egy msik sorozatba. Feladatok: - Egy szemlyi nyilvntartsban emberek neve s szemlyi szma szerepel Adjuk meg a 20 vnl fiatalabb lnyokat. - Adjuk meg egy termszetes szm sszes osztjt. - Adjuk meg egy osztly azon tanulit, akiknek 5-s lett a dolgozata. Be: Ki: X(N) - X nev, N elem tmb T - tulajdonsg DB N - darabszm Y(DB): - Y nev, DB elem tmb 0<=DB<=N, X-beli T tulajdonsg elemek szma Y(DB): minden 1<=i<=DB esetn T(X(Y(i))) Eljrs Kivlogats DB:=0 // megadja, hogy hny elemet raktunk mr t eddig az Y tmbbe. Ciklus i:=1-tl N-ig Ha T(X(i)), akkor DB:=DB+1 : Y(DB):=i // egy j elemnl: DB-t nveljk 1-el, s betesszk az elemet Y-ba. Ciklus vge Eljrs vge Ha nem a sorszmokat, hanem az rtkeket kell kigyjteni: Csak az egyik sorban kell egy kis vltoztats: Ha T(X(i)), akkor DB:=DB+1 : Y(DB):=X(i) Feladat: Az X tmbbl vlogassuk ki a pozitv elemeket az Y tmbbe: Eljrs Kivlogats DB:=0 Ciklus i:=1-tl N-ig Ha X(i)>0, akkor DB:=DB+1 : Y(DB):=X(i) Ciklus vge Eljrs vge

- 29 -

3. Sztvlogats Itt az eredmny nem egy, hanem tbb sorozat Egy X tmb T tulajdonsg elemeit vlogassuk ki egy Y tmbbe. A tbbit a Z tmbbe. Van olyan feladat, ahol nem 2, hanem tbb tmbbe trtnik a sztvlogats. Feladatok: - Adott N db termszetes szm. Vlogassuk szt a prosakat s a pratlanokat. - Az osztly tanulit vlogassuk szt lnyokra ill. fikra - A tanulkat jegyeik alapjn vlogassuk 5 csoportra: 5-s, 4-es, 3-as, 2-es, 1-esek. a., Sztvlogats kt tmbbe Be: Ki: X(N) - X nev, N elem tmb T - tulajdonsg DB N - darabszm Y(DB) - Y nev, DB elem tmb Z(N-DB): - Z nev, DB elem tmb 0<=DB<=N, X-beli T tulajdonsg elemek szma Y(DB) : minden 1<=i<=DB esetn T(Y(i)) Z(N-DB) : minden 1<=i<=N-DB esetn nemT(Z(i)) Eljrs Sztvlogats_kt_tmbbe DB:=0 : DBZ:=0 Ciklus i:=1-tl N-ig Ha T(X(i)), akkor DB :=DB +1 : Y(DB) :=X(i) klnben DBZ:=DBZ+1 : Z(DBZ):=X(i) Ciklus vge Eljrs vge Plda Az X tmbbl a negatv szmokat tegyk Y-ba, a tbbit Z-be: Eljrs Sztvlogats_kt_tmbbe DB:=0 : DBZ:=0 Ciklus i:=1-tl N-ig Ha X(i)<0, akkor DB :=DB +1 : Y(DB) :=X(i) klnben DBZ:=DBZ+1 : Z(DBZ):=X(i) Ciklus vge Eljrs vge

- 30 -

b., Sztvlogats egy tmbbe Az Y tmb elejre vlogatjuk a T tulajdonsgakat a vgre a tbbit. Be: Ki: X(N) - X nev, N elem tmb T - tulajdonsg DB N - darabszm Y(N) - Y nev, N elem tmb 0<=DB<=N, X-beli T tulajdonsg elemek szma Y(N) : minden 1<=i<=DB esetn T(Y(i)) s minden DB+1<=i<=N esetn nemT(Y(i)) Eljrs Sztvlogats_egy_tmbbe DB:=0 : DBZ:=0 Ciklus i:=1-tl N-ig Ha T(X(i)), akkor DB :=DB +1 : Y(DB):=X(i) klnben DBZ:=DBZ+1 : Y(N+1-DBZ):=X(i) Ciklus vge Eljrs vge

- 31 -

c., Sztvlogats helyben Az elemeket ugyanabba a tmbbe vlogatjuk szt: A T tulajdonsgakat elre gyjtjk a nem T tulajdonsgakat htra. A tmb els elemt kivesszk a helyrl s betesszk egy segdvltozba. Az utols elemtl visszafel keresnk egy T tulajdonsgt. Ha tallunk, akkor ezt elre hozzuk a kivett elem helyre. Ezutn a htul felszabadult helyre ellrl keresnk egy nem T tulajdonsg elemet. S ha tallunk, akkor azt htra tesszk. Mindezt addig vgezzk, amg a tmbben kt irnyban haladva ssze nem tallkozunk. A segdvltozba azrt vesszk ki az els elemet, hogy felszabaduljon egy hely a cserlgetseknek. Be: Ki: X(N) - X nev, N elem tmb T - tulajdonsg DB N - darabszm X(N) - X nev, N elem tmb segd: segdvltoz 0<=DB<=N, X-beli T tulajdonsg elemek szma X(N) : minden 1<=i<=DB esetn T(X(i)) s minden DB+1<=i<=N esetn nemT(X(i)) Eljrs Sztvlogats_helyben E:=1 : U:=N : segd:=X(1) // E: els, U: utols Ciklus amg E<U Ciklus amg E<U s nem T(X(U)) U:=U-1 ( T tulajdonsg elem keresse ) Ciklus vge Ha E<U, akkor X(E):= X(U) : E:=E+1 Ciklus amg E<U s T(X(E)) E:=E+1 (nem T tulajdonsg elem keresse ) Ciklus vge Ha E<U akkor X(U):=X(E) : U:=U-1 Felttel vge Ciklus vge X(E):=segd // a vgn visszatesszk a kivett elemet. // Az E ltt vannak a T tulajdonsgak, utna a nem T tulajdonsgak. // DB: A t tulajdonsg elemek szma Ha T(segd) akkor DB:=E klnben DB:=E-1 Eljrs vge Hzi feladat: c/2, Sztvlogats helyben 2. megolds: Elindulunk a tmbben ellrl s htulrl. Keresnk olyan elemeket, amelyeket fel kell cserlni. Ha tallunk, akkor cserlnk, majd folytatjuk a keresst.

- 32 -

4. Metszet Kt sorozatbl (X sY) vlogassuk ki azokat az elemeket egy harmadikba (Z), amelyek mind a kettben megtallhatak. X s Y halmazok: minden elem csak egyszer fordul el. gy Z is halmaz lesz. Pldk: - Adjuk meg kt szm sszes kzs osztjt. - Ismerjk, hogy mely madarak vannak nyron Magyarorszgon. Azt is tudjuk hogy tlen melyikek vannak itt. Adjuk meg a nem kltz madarakat. - Ngy ember heti szabad esti ismeretben adjuk meg, hogy a hten melyik nap mehetnek el egytt moziba. Be: Ki: X(N) - X nev, N elem tmb Y(M) - Y nev, M elem tmb DB N - darabszm Z(DB) - Z nev, DB elem tmb X s Y halmazok 0<=DB<=min(N,M) minden 1<=i<=DB esetn Z(i) X s Z(i) Y Az algoritmus egy kivlogats, ami a belsejben egy eldntst tartalmaz. Eljrs Metszet DB:=0 Ciklus i:=1-tl N-ig // Vgig megynk az X tmbn egyesvel j:=1 // Eldntj, hogy az adott elem szerepel-e az Y tmbben is Ciklus amg j<=N s X(i)<>Y(j) j:=j+1 Ciklus vge // Ha szerepel az Y-ban is, akkor ttesszk Z-be. Ha j<=M akkor DB:=DB+1 : Z(DB):=X(i) Ciklus vge Eljrs vge Hzi feladat: Van kt halmaz, amelyeket az X s Y tmbkben trolunk. rjunk algoritmust: - Eldnts: Van-e a kt halmaznak kzs eleme? - Kivlaszts: tudjuk, hogy van kzs elemk. Adjuk meg ennek a kzs elemnek az rtkt. - Megszmols: hny kzs eleme van a kt sorozatnak?

- 33 -

5. Uni (Egyests) Van kt halmaz-sorozat: X,Y. Egy harmadik sorozatba (Z) vlogassuk ki azokat az elemeket, amelyek legalbb az egyikben elfordulnak. Plda: - Kt tanr rarendje alapjn adjuk meg azokat az idpontokat, amikor legalbb az egyik bent van az iskolban. - Ismerjk 2 orszgrl kln-kln, hogy milyen fajta llatok lnek ott. Adjuk meg azokat az llatokat, amelyik legalbb az egyik orszgban l. Be: Ki: X(N) - X nev, N elem tmb Y(M) - Y nev, M elem tmb DB N - darabszm Z(DB) - Z nev, DB elem tmb

X s Y halmazok 0<=DB<=N+M, XUY halmaz elemeinek szma Z(DB) : minden 1<=i<=DB esetn Z(i) X vagy Z(i) Y Eljrs Uni Z:=X : DB:=N // X-et Z-be msoljuk Ciklus i:=1-tl M-ig // Kivlogatjuk Y-bl azokat az elemeket, amelyek // nincsenek X-ben j:=1 Ciklus amg j<=N s X(j)<>Y(i) j:=j+1 Ciklus vge Ha j>M akkor DB:=DB+1 : Z(DB):=Y(i) Ciklus vge Eljrs vge Hzi feladat: - Egy x tmbbl msoljuk t az elemeket Y-ba, de az X azonos elemeit csak egyszer. - Ksztsk el kt halmaz (X,Y) klnbsgt.

- 34 -

6. sszefuttats (Rendezettek unija) Itt is kt halmaz (X,Y) Unijnak meghatrozsa a feladat. De tudjuk, hogy a kt halmaz rendezett: mindkt tmbben nvekv sorrendben vannak az elemek. Ezt kihasznlva egy hatkonyabb (gyorsabb) algoritmust tudunk kszteni, mint az elz ltalnos Uni algoritmusa. Feladatok: - Egy osztly fi s lnytanulinak nvsora alapjn lltsuk el az osztlynvsort. - Egy iskolban 4 szakkrre jrnak a tanulk. (van, aki tbbre is). A nvsorok alapjn lltsuk ssze a szakkrre jr tanulk nvsort. Be: Ki: X(N) - X nev, N elem tmb Y(M) - Y nev, M elem tmb Z(K) - Z nev, K elem tmb X s Y elemei rendezettek Uf: Z(K) : minden 1<=i<=K esetn Z(i) X vagy Z(i) Y (K a XUY halmaz elemeinek szma) A megoldsban haladjunk prhuzamosan a kt sorozatban. X1 vagy Y1 kzl a kisebbet tegyk Zbe. Amelyikbl ttettk, abban tovbb lpnk egyet s jra 1-1 elemet hasonltunk. Ha egyenlek voltak, akkor az egyiket msoljuk Z-be, majd mindkt sorozatban tovbblpnk. Ha az egyiknek a vgre rtnk, akkor a msikbl a maradkot a Z vghez msoljuk. Eljrs sszefuttats i:=1 : j:=1 // X s Y elejre llunk k:=0 Ciklus amg i<=N s j<=M // amg az egyiknek a vgre nem rnk k:=k+1 // biztosan ttesznk valamit Z-be Elgazs X(i)<Y(j) esetn: Z(k):=X(i) : i:=i+1 X(i)=Y(j) esetn: Z(k):=X(i) : i:=i+1 : j:=j+1 X(i)>Y(j) esetn: Z(k):=Y(j) : j:=j+1 Elgazs vge Ciklus vge Cilkus amg i<=N // Ha X-bl mg maradt ki, akkor azt Z-be msoljuk. k:=k+1 : Z(k):=X(i) : i:=i+1 Ciklus vge Cilkus amg j<=M // Ha Y-bl mg maradt ki, akkor azt Z-be msoljuk. k:=k+1 : Z(k):=Y(j) : j:=j+1 Ciklus vge Eljrs vge

- 35 -

Keress rendezett sorozatban Eddig is tanultunk mr keressi algoritmust. Itt is ez a feladat: Rendelkezsre ll egy N elem sorozat, egy, a sorozat elemein rtelmezett T tulajdonsg. Olyan algoritmust kell rni, amely eldnti, hogy van-e T tulajdonsg elem a sorozatban, s ha van, akkor megadja a sorszmt. De a tmb, amiben most keresnk rendezett: nvekv sorrendben vannak benne az elemek. Ezt kihasznlva egy hatkonyabb ( gyorsabb ) algoritmust tudunk kszteni, mint az ltalnos keressi algoritmus. 1. Lineris keresssel: Ha a keresett elemnl nagyobb rtk elemet tallunk, akkor a keresett elem mr biztosan nem fordul el. A keresst be lehet fejezni. X elemeinek sorrendje rtk szerint nvekv (rendezett) Az eredeti keres algoritmusunkat alaktjuk t: Y: a keresett elem. Eljrs Keress i:=1 Ciklus amg i<=N s X(i)<Y // Ez volt az eredetiben: Ciklus amg i<=N s nem T(X(i)) i:=i+1 Ciklus vge VAN:=(i<=N) Ha VAN, akkor S:=i Eljrs vge Hasonltsok szma: Minimum: tlag: Maximum: 1 (N+1)/2 N

- 36 -

2. Logaritmikus (binris) keresssel: Vizsgljuk meg elszr a sorozat kzps elemt. Ha ez a keresett elem, akkor kszen vagyunk. Ha a keresett elem ennl kisebb, akkor csak a sorozat els felben kell keresni tovbb. Ha a keresett elem ennl nagyobb, akkor csak a sorozat msodik felben kell keresni tovbb. Eljrs Logaritmikus_keress E:=1 : U:=N // E: els, U: utols Ciklus k:=[(E+U)/2] // (E+U)/2 egsz rsze // k: kzps elem Elgazs X(k)<Y esetn: E:=k+1 // Ha a keresett nagyobb mint a kzps, akkor az E rtkt a kzps mg visszk X(k)>Y esetn: U:=k-1 Elgazs vge Mgnem E>U vagy X(k)=Y // addig tart a keress, amg meg nem talltuk a keresett elemet, vagy E>U. Ciklus vge VAN:=(E<=U) Ha VAN, akkor S:=k Eljrs vge Hasonltsok szma: Minimum: tlag: Maximum: 1 log2(N) log2(N)

A log miatt hvjk logaritmikus keressnek. A felezs miatt hvjk felezses, vagy binris keressnek. Hzi feladat: X rendezett sorozat. - Kivlogats: Vlogassuk ki X-bl a T tulajdonsg elemeket egy msik tmbbe. - Megszmols: Szmoljuk meg, hogy hny db T tulajdonsg elem van T-ben.

- 37 -

Visszalpses keress (Backtrack) 8 kirlyn problma: Hogyan (s hnyfle mdon) helyezhet el 8 kirlyn a sakktbln gy, hogy semelyik kett ne sse egymst. Algiritmusa: 1. Felrakjuk az els kirlynt az els oszlopba brhova. 2. Felrakjuk a msodik kirlynt a msodik oszlopba gy, hogy ne ssk egymst az elzvel. 3. Felrakjuk a harmadik kirlynt a harmadik oszlopba gy, hogy a fent lvk ne ssk egymst. 4. Felrakjuk a negyedik kirlynt a negyedik oszlopba gy, hogy a fent lvk ne ssk egymst. . 8. Felrakjuk a nyolcadik kirlynt a nyolcadik oszlopba gy, hogy a fent lvk ne ssk egymst. Ha valamelyik lpst nem tudjuk megcsinlni, mert nem tudjuk az adott kirlynt letenni gy, hogy a fent lvk ne ssk egymst, akkor: - visszalpnk az elz lpsre (az elz oszlopra) s vlasztunk annak a kirlynnek egy msik helyet, majd folytatjuk tovbb. - Van amikor 1 visszalps nem elg, mert gy sem tudjuk letenni a kirlynt. Ilyenkor kettt, esetleg tbbet is vissza kell lpni. 88-as tbln 92 olyan leraksi md van, amikor a kirlynk nem tik egymst. Egy lehetsges megolds:

http://hu.wikipedia.org/wiki/8_kir%C3%A1lyn%C5%91_probl%C3%A9ma

- 38 -

Egy lehetsges elhelyezst megad algoritmus: ( Csak olvasmny ) Eljrs bt(i) Ha i > 0 akkor d[i] := d[i] + 1 Ciklus amg d[i]<=8 s rossz(i) d[i] := d[i] + 1 Ciklus vge Ha d[i] <= 8 akkor Ha i = 8 akkor KI( d[] ) klnben bt(i+1) Elgazs vge klnben d[i] := 0; bt(i-1); Elgazs vge Elgazs vge Eljrs vge Fggvny rossz(i):logikai rossz := hamis Ciklus j := 1-tl (i-1)-ig Ha (T[j]=T[i]) vagy (T[j]-j=T[i]-i) vagy (T[j]+j=T[i]+i) akkor rossz := igaz kiugrs a ciklusbl Elgazs vge Ciklus vge Fggvny vge // fprogram bt(1);

- 39 -

3. fejezet Programozsi ttelek-2 Rendezsi algoritmusok


A rendezs klasszikus szmtstechnikai feladat. A problmakr lnyege, hogy egy adathalmaz elemeit meghatrozott sorrendbe rakjuk. ltalnosan azt mondhatjuk, hogy adott egy N elem X tmb, s a tmbelemeket kell nvekv vagy cskken sorrend szerint rendezni. Igen sokfle rendezsi algoritmus ltezik, klnbz hatkonysggal. Az hogy egy adott problma magoldsra melyiket vlasztjuk, a megoldand feladattl fgg. Pl. ha mr van elismeretnk arrl, hogy az elemek hogyan helyezkednek el a tmbben, akkor ahhoz vlaszthatunk optimlis rendezsi algoritmust. Pl. ha tudjuk, hogy a tmb els fele mr rendezett, a msodik mg nem, akkor megunk is kitallhatunk egy j rendezsi algoritmust erre a problmra. A rendezs helyben trtnjen, azaz az eredmnytmb megegyezik a bemen adatok tmbjvel. A rendezsek hatkonysgnak legfontosabb szempontja az, hogy hny sszehasonlts s hny csere trtnik a rendezs sorn. Br a modern szmtgpek nhny ezer rtk esetn gyorsan el tudjk vgezni a rendezseket, azonban a gyakori tbb millis bemen adat esetn a hatkonysg krdse nagyon fontos. Az internetes keresk ( pl. Google ) is kifinomult rendezsi s keressi algoritmusokat hasznlnak. A rendezsek sorn gyakran alkalmazzuk a Csere eljrst, amely kicserli a kt bemen paramtert egymssal: Eljrs Csere( a, b ) cs := a a := b c := cs Eljrs vge A rendezses feladatokhoz: Be: Ki: X(N) - X nev, N elem tmb X(N) - X nev, N elem tmb X(N) : elemek sorrendje rtk szerint nvekv (rendezett)

- 40 -

Egyszer csers rendezs Hasonltsuk ssze az els elemet a sorozat sszes tbbi mgtte lev elemvel. Ha valamelyik kisebb nla, akkor cserljk meg azzal. gy egy ciklus utn a legkisebb elem az els helyre kerl. Folytassuk ugyanezt a sorozat msodik elemvel, , utoljra pedig az utols elttivel. Eljrs Csers_rendezs Ciklus I:=1-tl N-1-ig Ciklus J:=I+1-tl N-ig Ha X(I)>X(J), akkor Csere(X[I],X(J)) Ciklus vge Ciklus vge Eljrs vge I=1 5,3,9,1,7 3,5,9,1,7 3,5,9,1,7 1,5,9,3,7 1,5,9,3,7 1,5,9,3,7 1,5,9,3,7 1,3,9,5,7 1,3,9,5,7 1,3,9,5,7 1,3,5,9,7 1,3,5,9,7 1,3,5,7,9

I=2

I=3 I=4

Helyfoglals: N+1 Hasonltsok szma: N*(N-1)/2 O(n2) Mozgatsok szma: 0-tl 3*N*(N-1)/2-ig O(n2) Legjobb esetben: 0 Legrosszabb esetben: 3*N*(N-1)/2 A csere = 3 mozgats A vgrehajtsi id hasonltsok szma s a mozgatsok szmtl fgg ord-jells (O jells): nagysgrend Egy O(n2) futsidej algoritmus ktszer akkora mret bemenetre ngyszer annyi ideig fog futni, hromszor akkora bemenetre kilencszer annyi ideig. Egy polinom legnagyobb kitevj tagja: pl. ax2+bx+c => O(x2)

- 41 -

Minimum-kivlasztsos rendezs Az elz mdszer gyengesge a sok felesleges csere. A csere = 3 mozgats Clszerbb lenne az aktulis els elemet a mgtte levk kzl egyedl a legkisebbel cserlni. Ehhez a bels ciklusban cserk helyett egy minimum-kivlasztst csinlni. Eljrs Minimum_kivlasztsos_rendezs Ciklus I:=1-tl N-1-ig MIN:=I Ciklus J:=I+1-tl N-ig Ha X(MIN)>X(J), akkor MIN:=J Ciklus vge Csere(X[I],X(MIN)) Ciklus vge Eljrs vge Kirtkelsek eltt: I=1 5,3,9,1,7 I=2 1,3,9,5,7 I=3 1,3,9,5,7 I=4 1,3,5,9,7 Helyfoglals: N+1 Hasonltsok szma: N*(N-1)/2 Mozgatsok szma: 3*(N-1) Javult az tlagos futsi id. O(n2) O(n)

- 42 -

Buborkos rendezs A, megolds (gyenge vltozat) A bels ciklusban egyesvel vgigmegyek a tmb elemein. (1.-tl N-1.-g) Az adott elemet sszehasonltom a kvetkezvel. Ha az adott elem nagyobb, mint a kvetkez, akkor megcserlem ket. A ciklus vgre a legnagyobb elem biztos, hogy a helyre kerl. ( A legutols helyre. ) A nagyobb rtk elemek htrafel, a kisebbek elre fel mozdulnak. Ha a ciklus elejn a legnagyobb elem az els helyen llt, akkor a ciklusban mint egy bubork a vzzel teli csben halad htra fel. Ha ezt a bels ciklust N-1-szer megcsinlom egyms utn, akkor a sorozat rendezett lesz. Eljrs Buborkos_rendezs1 Ciklus I:=1-tl N-1-ig Ciklus J:=1-tl N-1-ig Ha X(J)>X(J+1), akkor Csere(X[J],X(J+1)) Ciklus vge Ciklus vge Eljrs vge

- 43 -

B, jobb megolds: Az elz megoldsban: mivel a legnagyobb elem egy ciklus utn a helyre kerl, ezrt a kvetkez ciklusban azt mr nem kell sszehasonltani. Elg az utols eltti elemig elmenni. Eljrs Buborkos_rendezs2 Ciklus I:=N-tl 2-ig -1-esvel Ciklus J:=1-tl I-1-ig Ha X(J)>X(J+1), akkor Csere(X[J],X(J+1)) Ciklus vge Ciklus vge Eljrs vge I=5 5,3,9,1,7 3,5,9,1,7 3,5,9,1,7 3,5,1,9,7 3,5,1,7,9 3,5,1,7,9 3,5,1,7,9 3,1,5,7,9 3,1,5,7,9 3,1,5,7,9 1,3,5,7,9 1,3,5,7,9 1,3,5,7,9 1,3,5,7,9 O(n2) O(n2)

I=4

I=3 I=2

Helyfoglals: N+1 Hasonltsok szma: N*(N-1)/2 Mozgatsok szma: 0-tl 3*N*(N-1)/2-ig

- 44 -

Javtott buborkos rendezs Javtsuk az elz megoldst: - Ha a bels ciklus egy lefutsa alatt nem volt csere, akkor a sorozat rendezett, nem kell tovbb csinlni. - Ha volt csere, de pldul a legutols csere a sorozat kzepnl volt, akkor a sorozat kzepe utn biztosan rendezett a sorozat. A kvetkez ciklusban csak az eltte lev rsszel kell foglalkozni. Minden menetben figyeljk a legutols csere helyt, s a kvetkez menetben csak addig rendezznk. Eljrs Javtott_Buborkos_rendezs I:=N Ciklus amg I>=2 Cs:=0 Ciklus J:=1-tl I-1-ig Ha X(J)>X(J+1), akkor Csere(X[J],X(J+1)) : Cs:=J // Cs-ben trolja el az utols csere helyt Ciklus vge I:=Cs // A bels ciklus kvetkez futsnl mr csak I-1-ig kell elmenni. Ciklus vge Eljrs vge I=5 5,3,9,1,7 3,5,9,1,7 3,5,9,1,7 3,5,1,9,7 3,5,1,7,9 3,5,1,7,9 3,5,1,7,9 3,1,5,7,9 3,1,5,7,9 1,3,5,7,9 1,3,5,7,9

I=4

I=2

Helyfoglals: N+1 Hasonltsok szma: N-1 tl N*(N-1)/2-ig Mozgatsok szma: 0-tl 3*N*(N-1)/2-ig Jelents javuls az tlagos vgrehajtsi idben van.

O(n2) O(n2)

- 45 -

Beillesztses (beszrsos) rendezs A krtyk sorba rendezshez hasonl mdszer. - Ha a msodik elem kisebb, mint az els, akkor beszrjuk az els el: - megcserljk a kt elemet. gy az els 2 elem mr rendezett. - A 3. elemnek is megkeressk a helyt az 1-2 elemek rendezett sorozatban, s beszrjuk a megfelel helyre. - Az i. elemnl: - a tmb els i-1 eleme rendezett - az i-ik elemnek megkeresem a helyt s beszrom a megfelel pontra. - a beszrs folyamata: - Az i. elemtl haladok lefel: - amg nagyobbat tallok eltte, addig cserlgetem az eltte levvel. - Ha mr nincs eltte nagyobb, akkor megtalltam a helyt Eljrs Beillesztses_rendezs Ciklus I:=2-tl N-ig // A 2. elemtl indulok => az N. elemig // Az I. a beszrand elem. J:=I-1 // Addig viszem lefel ezt az elemet, amg nagyobbat tallok. Ciklus amg J>0 s X(J)>X(J+1) // Ha mr nincs eltte nagyobb, akkor megtalltam a helyt Csere(X[J],X(J+1)) J:=J-1 Ciklus vge Ciklus vge Eljrs vge I=2 I=3 I=4 5,3,9,1,7 3,5,9,1,7 3,5,9,1,7 3,5,9,1,7 3,5,1,9,7 3,1,5,9,7 1,3,5,9,7 1,3,5,9,7 1,3,5,7,9 O(n2) O(n2)

I=5

Helyfoglals: N+1 Hasonltsok szma: N-1 tl N*(N-1)/2-ig Mozgatsok szma: 0-tl 3*N*(N-1)/2-ig

- 46 -

Javtott beillesztses rendezs Az elz javtsa. Ha pl. az I. elem kicsi akkor amg a helyre kerl sok cserlgetst kell vgezni a bels ciklusban. Minden csere = 3 mozgats Ezrt a csere helyett legyen csak 1 mozgats: A beillesztendt nem tesszk be azonnal a sorozatba, hanem csak a tbbieket tologatjuk htra, s a beillesztendt csak a vgn tesszk a helyre. Eljrs Beillesztses_rendezs Ciklus I:=2-tl N-ig J:=I-1 Y:=X(I) // Az I. elemez kimentjk egy segdvltozba, Ciklus amg J>0 s X(J)>Y // Amg nagyobb van eltte X[J+1]:=X(J) // A nagyobbat felfel mozgatjuk J:=J-1 Ciklus vge X(J+1):=Y // beszrjuk a helyre Ciklus vge Eljrs vge I=2 I=3 I=4 5,3,9,1,7 3,5,9,1,7 3,5,9,1,7 3,5,9,1,7 3,5,1,9,7 3,1,5,9,7 1,3,5,9,7 1,3,5,9,7 1,3,5,7,9

I=5

Helyfoglals: N+1 Hasonltsok szma: N-1 tl N*(N-1)/2-ig O(n2) Mozgatsok szma: 2*(N-1)-tl 2*(N-1)+N*(N-1)/2-ig O(n2) Hzi feladat: Algoritmusok-Feladatok.doc-ban: - Rendezs Shell-mdszerrel - Gyorsrendezs (QuickSort) - Lists beillesztses rendezs

- 47 -

4. fejezet Adatszerkezetek
(17. Szbeli ttelben is van 2 alkrds) Az algoritmusoknl lttuk, hogy a szveges algoritmusok egy absztrakt szveges formban, magyarul rjk le a kvnt lpseket. gy kiss eltrek voltak a programozsi nyelvtl, mg akkor is ha ugyanazt rtk le. A lnyeg ugyanaz, de a lersi md eltr. Amit az algoritmusban lerunk magyarul, vagy grafikus formban az megtallhat a legtbb programozsi nyelvben a sajt nyelvn. Az adatszerkezeteknl ugyangy: A programozsban hasznlt adattpusokat rjk le magyarul, absztrakt formban. A lnyeg ugyanaz, de a lersi md eltr. Amit az algoritmusban lerunk magyarul, vagy grafikus formban az megtallhat a legtbb programozsi nyelvben a sajt nyelvn. Vagy ha nincs meg, de szeretnnk hasznlni, akkor ltre kell hoznia a programoznak. Pl. ha egy nyelvben nincsen LISTA adatszerkezet, akkor a programoz ltrehozhatja pl. tmbkbl s rekordokbl, vagy rekordokbl s mutatkbl. Az ilyen j adatszerkezetek ltrehozsnak tmja mr nem fr bele a tananyagba.

- 48 -

Alapok
Elemi adatszerkezetek: Egsz Mveletek: Vals Mveletek: rtkads, + - * / ^ Logikai Mveletek: NEM, VAGY, S Karakter Mveletek: rtkads, Kdhoz rtk, rtkhez kd, Elz, Kvetkez Mutat A mutat a memria egy adott celljra mutat. Segtsgvel knny a memribl adatokat ki s beolvasni. Mveletek: rtkads, lefoglals, felszabadts. Konstans (NIL) belltsa (sehova sem mu-tat). Pl: Lefoglal (p): Lefoglal 2 byte-ot a memriban, s a memria kezdcmt a p mutatba teszi. Felszabadt (p): Elengedi a p ltal megcmzett terletet, s visszaadja azt az opercis rendszernek. Felsorols A programoz definilja a Konstansok felsorolsval. Plda: TYPE NAPOK = ( Hetfo, Kedd, ) Mveletek: rtkads, rendezs, elz, kvetkez Intervallum Pl.: 15..30 15 s 30 kztti egsz szmok Mveletek: Megegyeznek a bzistpus mveleteivel. rtkads, + - * DIV (egszoszts), MOD, negls, hatvnyozs.

- 49 -

sszetett adatszerkezetek: Az sszetett Adatszerkezetek osztlyozsa: Homogn adatszerkezet: Az adatelemek azonos tpusak. Heterogn adatszerkezet: Az adatelemek klnbz tpusak. Heterogn: - rekord Homogn: Struktra nlkli:

Az egyes adatelemek fggetlenek, nincs kzttk kapcsolat. Az elemek kztt nincs sorrend, mindegy, hogy hol helyezkednek el egymshoz kpest.

- halmaz Asszociatv: - tmb, - tblzat pl. mtrix, 2 dimenzis tmb - direkt llomny: kzvetlen elrs fjl, Egy nagy llomnynak is egybl egy adott elemre tudok ugrani a programban - indexelt llomny. pl. egy indexelt adatbzis tbla Szekvencilis: - lista - sor - verem - sztring - soros llomny. Pl szveges fjl: Az adatokat csak egyms utn tudjuk elrni. mint egy magn-kazettn A szveges fjlok ilyenek. A sorokat csak egyms utn tudom kiolvasni a programban. Hierarchikus: - fa Hls: - grf Statikus adatszerkezetek: Elemeinek szma lland Pl. egy statikus tmb Dinamikus adatszerkezetek: Elemeinek szma vltozhat. Pl. Lista, Sor, Verem, ArrayList Rekord: C#-ban Struct nem csak egy fajta tpus adatot tartalmazhat. Mveletek: rtkads, szelekcis mvelet ( . (pont) ) Plda: tpus ADAT :=Record nev : string; magassg: egsz; End;

- 50 -

Halmaz Halmaztpus := Halmaz ( ElemTpus ) Nincs sorrendisg az elemek kztt Mveletek: rtkads, halmazmveletek ( \), lekrdezsek ( ELEME-E, RSZ-HALMAZA-E, RES-E), pl. Egy szm ELEME-E a halmaznak? A:= ELEME-E(x,H) A: logikai (bool) H: halmaz pl. RES-E a halmaz A:=RES-E(H) RES /res halmaz ltrehozsa/. RES(H): ltrehoz egy H nev res halmazt.

Szveg, Szting, Karakterlnc Szvegtpus := Szveg ( MaxHossz ). Mveletek: rtkads, + (sszefzs), indexels, szvegkezel Fggvnyek (Bal, Jobb, Kzp, Jel /adott sorszm jel/, RES-E, RES /res szveg ltre-hozsa/.

Tmb A legismertebb, a leggyakrabban alkalmazott statikus adatszerkezet. A tmb minden eleme egsz szmok sorozatn keresztl rhet el (ezek az egsz szmok a tmbindexek), Az elemek kztt lineris rendezettsg van. ( az elemeket egy elem elzi meg, s egy kveti ). Mveletek: Eljrs RES ( Vltoz X: Tmbtpus ) RES(T): Egy res tmbt hoz ltre Fggvny ELEMSZM Megadja a tmb elemeinek a szmt pl. X:= ELEMSZM(T) Fggvny ELEMRTK Megadja a tmb adott index elemnek az rtkt. pl. A:= ELEMRTK(T,5) lekrdezi a T tmb 5. elemnek az rtkt. Eljrs ELEMMDOST Mdostja a tmb adott elemt pl. ELEMMDOST(T,10,3) A T tmb 10 elemnek az rtkt 3-ra lltja

- 51 -

Lista

NIL: olyan mutat, amelyik nem mutat sehova sem: nincs kvetkez elem. A Lista elemei mindig kt msik elemmel vannak kzvetlen kapcsolatban, kivve a kt szls elemet. Mveletei: RES(L): Ltrehoz egy res listt. ELSRE(L): A lista els elemre ugrik VGRE(L): Az utols elemre ugrik KVETKEZRE(L): A lista kvetkez elemre ugrik ELZRE(L): A lista elz elemre ugrik AKTULIS_RTKE(L): Megadja az aktulis elem rtkt. pl. X:= AKTULIS_RTKE(L) AKTULIS_MDOST(L,X): Az aktulis elemnek az X rtket adja AKTULIS_MG(L,X): Az aktulis elem mg beszr egy j elemet, s annak az X rtket adja. AKTULIS_EL(L,X): Az aktulis elem el beszr egy j elemet, s annak az X rtket adja. AKTULIS_TRL(L): Trli az aktulis elemet a listbl UTOLS_E(L): Megadja, hogy a lista utols elemn llunk-e? ELEJN-E (L): Megadja, hogy a lista els elemn llunk-e? RES_E(L): megadja, hogy res-e a lista, vagy van neki eleme. Listt pl. mtrix vagy struktrk segtsgvel lehet megvalstani.

- 52 -

Plda Fordtsd meg egy lista sorrendjt - Az eredeti lista vltozatlanul hagysval Tpus ElemTpus= // pl. egsz Vltoz regLista,jLista : ListaTpus jElem : ElemTpus Program: Be:regLista Ha nem res-e?(regLista) akkor res(jLista) Elsre(regLista) Ciklus amg nem Tele-e?(jLista) s nem Vgn-e?(regLista) jElem:=Elemrtk(regLista) BeszrEl(jLista,jElem) Kvetkezre(regLista) Cv Ha Vgn-e?(regLista) akkor jElem:=Elemrtk(regLista) BeszrEl(jLista,jElem) Ki:jLista klnben Ki:Menetkzben megtelt az j lista klnben Ki:Nincs mit megfordtani Program vge A Be:reglista utasts helyett hasznljuk az albbi algoritmusrszletet! res(regLista) Be:jElem Ciklus amg jElem<>res BeszrMg(regLista,jElem) Be:jElem cv A Ki:jLista utasts helyett hasznljuk az albbi algoritmusrszletet! Elsre(jLista) Ciklus amg nem Vgn-e?(jLista) Ki:Elemrtk(jLista) Kvetkezre(jLista) Cv Ki:Elemrtk(jLista)

- 53 -

Hzi feladat Fordtsd meg egy lista sorrendjt - Az eredeti lista transzformcijval. Mivel az eredeti listt transzformljuk, fel sem merlhet a krds, hogy van-e elg hely, ha mr az eredeti lista a memriban van. A lista elemeit az albbi bra szerint pakoljuk t.

Tpus ElemTpus= // pl. egsz Vltoz Hossz,i : Termszetes Lista : ListaTpus AktElem : ElemTpus Program: Be:Lista Ha nem res-e?(Lista) akkor Hossz:=1 Elsre(Lista) Ciklus amg nem Vgn-e?(Lista) Hossz:=Hossz+1 Kvetkezre(Lista) Cv Ciklus i=1-tl (Hossz-1)-ig Elsre(Lista) Ciklus j=1-tl Hossz-i-1-ig Kvetkezre(Lista) Cv AktElem:=Elemrtk(Lista) Kihagy(Lista) Ciklus amg nem Vgn-e?(Lista) Kvetkezre(Lista) Cv BeszrMg(Lista,AktElem) Cv Ki:Lista klnben Ki:Nincs mit tlncolni Program vge

- 54 -

Hzi feladatok 1. Szemlyi szmokat trolunk nvekv sorrend listba fzve. Ksztsd el a frfiak ill. nk szemlyi szmnak nvekv listjt, ha a) csak eszzadban szletett magyar llampolgrok b) nem csak eszzadban szletett s nem csak magyar llampolgrok szerepelnek az eredeti listban! 2. Rendezz egy listt, a) j listt generlva; b) helyben! 3. Egy osztly tanuli matematika ill. fizika versenyen vettek rszt. A kt verseny rsztvevi nevk szerinti nvekv rendben listkba vannak fzve. Ksztsd el a csak egy versenyen ill. mindkt versenyen indultak nvekv listjt! 4. Nhny tbbtag szorzataknt elllt polinomban az azonos kitevj tagokat mg nem vontuk ssze. Az egyes tagok nem nulla egytthatjbl s kitevjbl kpzett rendezett prok kitev szerint cskken rendben listba vannak fzve. Ksztsd el az sszevonsok utni listt! 5. Az elbbi feladat eredmnyeknt lert polinombl vonj ki kettt egymsbl! 6. Egy polinomot sszes egytthatjnak kitevk szerint cskken rend listjval brzolunk. Szmtsd ki adott helyen vett helyettestsi rtkt! 7. A felvteli vizsgk lezajlsa utn a jelltek pontszmnak, nevnek, rtestsi cmnek rendezett hrmasa pontszm szerint rendezett listba vannak fzve. Adott a biztos felvtel ponthatra, valamint a fellebezs als ponthatra. Ksztsd el a fellebbezsre jogosultak nv szerint rendezett listjt! 8. Listban troljuk egy kosrlabda-szakosztly tagjainak nevt s magassgt, magassg szerinti cskken sorrendben. Kszts kt j listt, melyek egyikben minden msodik kosaras, msikban a maradk szerepel! A kt j lista magassg szerint rendezett legyen! Az eredeti lista alakuljon t a kt j listv!

- 55 -

Verem, Stack
A verem a leggyakrabban alkalmazott adatszerkezet a tmb utn. Mint egy verembe: fllrl tudjuk bele tenni az elemet az elz tetejre. Ha egy j elemet a verembe tesznk, akkor a tbbi 1-el lentebb megy.

48210

LIFO tpus adatszerkezet. Last In First Out: Amit utoljra betettnk azt tudjuk elszr kivenni. Egy verem akkor s csak akkor res, ha nincs eleme. Az res verembl nem lehet elemet kivenni. A tele verembe nem lehet tovbbi elemet tenni. A verembl csak a legfels elemet lehet kivenni, ekkor a tbbi bent marad, s nem vltozik.

Mveletei: RES(V): ltrehoz egy res vermet. VEREMBE(V,X): Az X rtk elemet a verem tetejre teszi. VEREMBL(V,X): A verembl kiveszi a legfels elemet s az X vltozba teszi. RES_E(V): Megadja, hogy res-e a verem. TELE_E(V): megadja, hogy tele van-e a verem. TET(V): Lekrdezi a verem legfels elemnek az rtkt. (De nem trli az elemet a verembl.) pl. X:=TET(V) Vermet pl. tmb segtsgvel lehet megvalstani. Feladat Olvasunk be egszeket 0 vgjelig. A szmokat rassuk ki fordtott sorrendben. Vltoz x: egsz V : VeremTpus Program: res(V) Be: x Ciklus amg x<>0 VEREMBE(V,X) Be: x Ciklus vge Ciklus amg RES_E(V)==hamis VEREMBL(V,X) Ki:x Ciklus vge Program vge - 56 -

- 57 -

Hzi feladat Ellenrizd egy sszetett kifejezs zrjelezsnek helyessgt, ha kerek, szgletes, kapcsos zrjelek mindegyike elfordulhat! Megjegyzsek: A zrjel-helyessg ellenrzsnek elvei: Csuk zrjel nem lehet megelz nyitzrjel nlkl. A kifejezs vizsglatnak vgn nem maradhat bezratlan nyitzrjel. Nem lehet keresztzrjelezs, azaz egy fajta nyitzrjel utn nem kvetkezhet msfajta csuk zrjel. Ennek megfelelen clszer a kifejezs elemzse sorn a nyitzrjeleket verembe tenni, csuk zrjel esetn az utols nyitzrjelet kivenni. Hibs a kifejezs, ha brmely csuk zrjel esetn a verem tetejn nem neki megfelel nyitzrjel van, vagy res a verem, ill. a kifejezs levizsglsa utn nem res a verem. Nem foglalkozunk annak lehetsgvel, hogy elfogyhat a hely

- 58 -

jells: : igaz

: hamis

- 59 -

Hzi feladat Egy szjtkban csak olyan karaktersorozatokat fogadunk el, melyekben szimmetrikus betcsoportok vannak s a teljes szveg eleje s vge egyms tkrkpei. Ksztsd el a prblkozsokat ellenrz algoritmust!

- 60 -

Sor
A vgn tudunk bele tenni s az elejn tudunk kivenni belle rtket. A sor els eleme a legrgebben betett elem. FIFO: First In FirstOut: Amit elszr betettnk azt tudjuk kivenni. 3782 Egy sor akkor s csak akkor res, ha nincs eleme. Az res sornak nincs els eleme. A res sorbl nem lehet elemet kivenni. Tele sorba nem lehet elemet helyezni. A sor els eleme a legrgebben betett elem. A sorbl csak az els elemet lehet kivenni, a tbbi ennek hatsra nem vltozik.

Mveletei: RES(S): ltrehoz egy res sort. SORBA(S,A): A sorba betesz egy j elemet, aminek az A rtket adja SORBL(S,A): Kiveszi az els elemet a sorbl s azt az A vltozba teszi. ELS(S): Megadja a sor els elemnek az rtkt. pl. A:=ELS(S) TELE_E(S): Megadja, hogy tele van-e a sor. RES_E(S): Megadja, hogy res-e a sor. Sort pl. tmb segtsgvel lehet megvalstani.

- 61 -

Feladat Szimulld egy mozglpcs mkdst! A napi mkds kezdetn res a lpcs. Egy idegysg alatt a mozglpcs elejre r lpcsfokrl lelpnek a rajta llk, minden lpcsfok tovbbhalad egy fzist, a vgn felbukkan lpcsfokra vletlenszeren lp fl maximum kt ember. A napi mkds vgn fzisokon keresztl rl ki a mozglpcs. Jelentsd meg fzisonknt a lelpk s a fellpk szmt! Megjegyzs: A nap elejn res a mozglpcs. Nyits utn elkezd feltltdni a lpcs. Mire az els fellp lpcsfoka felr a mozglpcs tetejre, a lpcs ugyan hzagosan, de kitltdik. Innen zrsig a tetejrl lelp valaki, a lpcsfokok egyet feljebb lpnek, alul belp egy res lpcsfok, erre lp(nek) fel valaki(k). Zrskor alul nem engednek senkit fellpni, pontosabban a folyamat forrsa elapad, az utasok a mozglpcs tetejn lpcsfokonknt tvoznak. Tpus ElemTpus = Termszetes Vltoz Mozglpcs : SorTpus Belp,Kilp : ElemTpus VgeNap : Szveg Program: res(Mozglpcs) Ciklus amg nem Tele-e?(Mozglpcs) Belp:=Vletlen(3) Sorba(Mozglpcs,Belp) Ki:Belp Cv Ciklus Sorbl(Mozglpcs,Kilp) Ki:Kilp Belp:=Vletlen(3) Sorba(Mozglpcs,Belp) Ki:Belp Be:VgeNap amg VgeNap<>Vge Ciklus amg nem res-e?(Mozglpcs) Sorbl(Mozglpcs,Kilp) Ki:Kilp cv Program vge Hzi feladatok 1. Sznhzi elads utn a parkol kapujt f- ill. mellkton kzelthetik meg az autk. A kapur a ftvonalrl 3, a mellktvonalrl 1 autt enged ki, de idegysgenknt csak egyet. A kt t gyakorlatilag megtelik, mire a kapur elkezdi kiengedni az autkat, tekintve, hogy kifel kell fizetni. rj algoritmust a kapur szmra! 2. Gyrbe fztt n ember kzl mondka segtsgvel minden k-adikat kihzzuk mgnem mr csak egyvalaki marad. Ksztsd el a kiszmol algoritmust! A mondknak csak a sztagszma rdekes. - 62 -

3.Futtasd ssze kt rendezett sor tartalmt egy harmadikba! 4. :Szimulld egy fizet autplyabejr forgalmt! K db sor van, melyekhez idegysgenknt vletlenszeren rkezik maximum L db aut. Igyekeznek a legrvidebb sorba llni. Ezalatt minden sort egy-egy aut hagyja el. Helyfoglals szempontjbl nmikpp hatkony reprezentcit vlassz!

- 63 -

Fa
A hierarchikus adatszerkezetben egy elemnek akrhny rkvetkezje lehet, de minden elemnek csak egyetlen megelzje ltezik. Van egy kitntetett eleme, amelynek nincs megelzje, s tbb olyan eleme, amelynek nincs rkvetkezje. A gykrelem a fa azon eleme, amelynek nincs megelzje. A legegyszerbb fa egyetlen gykrbl ll. A levlelemek a fa azon elemei, amelyeknek nincs rkvetkezjk. Brmennyi lehet bellk. gy rhetek el, hogy a gykrelembl indulva veszem a gykrelem rkvetkezjt, majd annak a rkvetkezjt stb. Az t a gykrelemtl kiindul, klnbz szinteken tmen, s levlelemben vget r egymshoz kapcsold l-sorozat. Az t hosszn az adott tban szerepl lek szmt rtjk. Minden levlelem a gykrtl pontosan egy ton rhet el. A fn bell vannak szintek, egy elem szintje megegyezik az elem gykrelemtl vett tvolsgval. A 0. szinten a gykrelem helyezkedik el, az els szinten a gykrelem rkvetkezi. A maximlis szintszmot a fa magassgnak vagy mlysgnek nevezzk. Minden kzbens elem egy rszfa gykereknt tekinthet, gy a fa rszfkra bonthat. A rszfa maga is egy fa, aminek a kiindul eleme szintn gykrelem.

A fa minden csompontban s a levlelemeken is tartalmaz 1-1 rtket. Binris fa: A szmtstechnikban kitntetett szerepe van a binris fnak. Keressekre, rendezsekre lehet hasznlni. A binris fa olyan fa, amelyben minden elemnek legfeljebb kt rkvetkezje lehet.

- 64 -

Binris ft pl. mtrix segtsgvel lehet megvalstani.

Binris fa bejrsa: pl. ahhoz, hogy az elemeit ki tudjuk ratni be kell jrni a teljes ft. A fa bejrsra rekurzv algoritmust hasznlnak. Az algoritmus be tud jrni brmilyen szerkezet s brmilyen mlysg binris ft. Bejr ( f: BinFa ) Ha nem res_E (f) akkor // Ha az adott elem levlelem, akkor // nem lp tovbb. Bejr ( BalGyerek (f)); // Rekurzv hvs // Elindul a bal oldali gon Kir (Gykrelem); // kirja az adott elem rtkt Bejr ( JobbGyerek (f)); // Rekurzv hvs // Elindul a jobb oldali gon Elgazs vge Eljrs vge res_E (f) : A levlelem az egy res rszfa. BalGyerek (f): Egy adott csompontban llva a BalGyerek (f) megadja a csompontbl kiindul bal oldali rszft. A binris fa bejrsakor hrom stratgit alkalmazhatunk: Preorder bejrs azaz Gykr elem, baloldal, jobboldal Inorder bejrs azaz Baloldal, gykr, jobboldal (ilyen volt az elz plda) Postorder bejrs azaz Baloldal, jobboldal, gykr.

- 65 -

Plda

Plda Adja meg a kvetkez binris fa preorder, inorder s postorder bejrst:

Hzi feladat - 66 -

Adjuk meg a kvetkez binris fa bejrsait:

- 67 -

Hzi feladat Dntsd el egy szmokat tartalmaz binris frl, hogy piramis-e! Piramis a fa, ha minden rszfban a gykr rtke nagyobb, mint a bal- ill. jobb rszfabeli elemek. Megjegyzs : Mivel a binris fa egy tipikusan rekurzv tpus, radsul egy llapotbl kt rekurzv folytats van, clszer a feladat megoldsra rekurzv algoritmust rni. Ha csak egy rekurzv rkvetkez lenne, az iteratv s a rekurzv mdszer kztt nem lenne szmottev klnbsg. Teht a feladat rekurzv tfogalmazsa gy szlna. Piramis a fa, ha gykreleme nagyobb mindkt oldali rkvetkezjnl, s a rkvetkezkhz tartozkt rszfa is piramis. A rszfk kztt kitntetett szerep a levlelem, mert olyan rszfa, melynek csak gykere van. gy egyik irnyban sincs olyan rkvetkezje, mely nla nagyobb lehetne. gy a levlelem trivilisan piramis. Mr ltszik, hogy logikai rtk rekurzv fggvnyt kell kszteni, ahol a rekurzv gban megvizsgljuk a gykrelem s a ktoldalt rkvetkez elemek viszonyt, tovbb hivatkozunk a rszfk piramis voltra mindezek eredmnyt s mvelettel kapcsoljuk ssze. A nemrekurzv gon levlelem van, gy azt kijelentjk piramisnak. A rekurzv gat finomtani kell azzal, hogy nem biztosan van mindkt irnyban rszfa. Mivel nem kell j ft ltrehozni, hanem egy meglvt kell feldolgozni, nem vizsgljuk a memria elgsgessgt. gy tekintjk, hogy a binris fa lehet beolvas ill. kirat utasts argumentuma valamint, hogy a fa legalbb egyelem.

- 68 -

Tpus ElemTpus = Vals Vltoz BinFa : BinFaTpus Piramis : Logikai Fggvny Piramis-e?(vlt F:BinFaTpus) : Logikai Vltoz Sv : Logikai Ha nem (res-e?(BalGyerek(F)) s res-e?(JobbGyerek(F))) akkor Ha nem res-e?(BalGyerek(F)) akkor Sv:=GykrElem(F)>GykrElem(BalGyerek(F)) s Piramis-e?(BalGyerek(F)) elg vge Ha nem res-e?(JobbGyerek(F)) akkor Sv:=GykrElem(F)>GykrElem(JobbGyerek(F)) s Piramis-e?(JobbGyerek(F)) elg vge Piramis-e?:=Sv klnben Piramis-e?:=igaz elg vge Fggvny vge Program: Be:BinFa Piramis:=Piramis-e?(BinFa) Ha Piramis akkor Ki:A fa egy piramis. klnben Ki:A fa nem piramis Program vge Hzi feladat 1. Egy binris fa leveleiben szmok vannak. Add meg a szmok minimumt! 2. Furcsa fnknak megfeleltethet egy binris fa. A binris fa csompontjai az gelgazsoknak felelnek meg. Adott a fa trzsnek hossza s keresztmetszete. Minden elgazsnl az j g hossza s keresztmetszete az elz p hnyada. Mekkora a fa trfogata, az gak s trzs sszhossza? Add meg a legtvolabbi levlig vezet t csompontjait s hosszt!

- 69 -

Grf
A grf egy homogn, dinamikus adatszerkezet, a fk ltalnostsa, olyan adatszerkezet,amelyben az elemeknek akrhny megelzjk s rkvetkezjk lehet. Egy elem akr nmaga megelzje s rkvetkezje is lehet. A grf hlzatok modellezsre hasznlhat. Pl. szmtgpes hlzat, Internet, thlzat (trkp), csvezetk-hlzat stb. Reprezentlni sszefgg irnytott grf segtsgvel lehet.

Grf bejrsa: Az algoritmus a bejrs pillanatnyi llapott a cscsok sznezsvel (fehr, szrke, fekete) tartja szmon. Kezdetben minden cscs fehr, s ksbb szrkre, majd feketre vltozhat. Egy cscs elrtt vlik, amikor elszr tallunk r a keress sorn, s ezutn a szne nem lehet fehr. Egy fekete cscs sszes szomszdja elrt cscs, a szrke cscsoknak lehetnek fehr szomszdjaik. Egy cscs akkor vlik szrkv, amikor elrtk, s akkor feketv, ha a belle kiindul sszes lt mr tvizsgltuk. A bejrs addig tart, amg minden cscs fekete nem lesz.

- 70 -

A grf adattpus az egyik legelvontabb, legnehezebben kezelhet, de mgis sok esetben szksges adattpus. A grfok szemlltetshez kpzeljnk el egy orszgot, az orszgban lv teleplseket s a teleplseket sszekt utakat. Ezek gy egytt grfot alkotnak. A teleplsek az adott rendszerben a grf csompontjai, a teleplseket sszekt utak a grf lei s az egyes utak hossza a grf lnek slyozsa. Tbb krdst lehet feltenni, amelyekre szmtgpes programmal keressk a vlaszt: El lehet-e jutni az egyik vrosbl a msikba? Hny km a tvolsga kt tetszlegesen kivlasztott vrosnak? Ha a teherautnak X km-re elegend zemanyaga van, merre kell mennie, hogy egy adott vrosbl eljusson egy msikba. Melyik a legrvidebb t kt vros kztt? Adott egy tbb vrost rint krt. Melyik az optimlis tvonal A fent emltett grfokat gyakran brzoljuk egy kt-dimenzis tmbbel. A tmbnek annyi oszlopa s sora van, ahny vros van. Ha kt vros kztt t tallhat, akkor a megfelel sor s oszlop ltal meghatrozott helyen a tvolsgtl fgg pozitv szmot runk, amely vrosok kztt nincsen t, ott nullt runk. Termszetesen a vrosoknak sajt magukhoz nem vezet t, ezrt az tlban csupa nulla szerepel.

Br ez az brzols nagyon gyakori, de nem tl helytakarkos. Nyilvnval, hogy minden adat ktszer szerepel, hiszen az oszlopok s sorok egymssal felcserlhetk, azaz lehetne a trols kevsb helypocskol. Ha csak az utakat trolnnk s a nem utakat nem trolnnk, akkor nagysgrendekkel kevesebb adatra lenne szksgnk. Termszetesen, amennyiben csak nhny adattal rendelkeznk, a feldolgoz programok sokkal egyszerbbek lehetnek, ha a fenti laza brzolst hasznljuk. Nagy mennyisg adat esetn, szmthat a trlhely mrete. Ekkor a dolgok termszetbl fakadan a feldolgoz algoritmusok lesznek bonyolultabbak.

- 71 -

You might also like