algoritmusok_es_adatstrukturak.pdf
TRANSCRIPT
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
1/358
Pusztai Pl
ALGORITMUSOK S
ADATSTRUKTRK
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
2/358
Kszlt a HEFOP 3.3.1-P.-2004-09-0102/1.0 plyzat tmogatsval.
Szerz: Pusztai Plegyetemi adjunktus
Lektor: Pukler Antalegyetemi adjunktus
Varjasi Norbertegyetemi adjunktus
Pusztai Pl, 2006
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
3/358
Marton Lszl emlkre
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
4/358
Algoritmusok s adatstruktrk A dokumentum hasznlata
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 4
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 4
A dokumentum hasznlata
Mozgs a dokumentumbanA dokumentumban val mozgshoz a Windows s az Adobe Reader meg-szokott elemeit s mdszereit hasznlhatjuk.
Minden lap tetejn s aljn egy navigcis sor tallhat, itt a megfelelhivatkozsra kattintva ugorhatunk a hasznlati tmutatra, a tartalomjegy-zkre, valamint a trgymutatra. A s anyilakkal az elzs a kvet-kezoldalra lphetnk t, mg a Vissza mezaz utoljra megnzett oldalravisz vissza bennnket.
Pozcionls a knyvjelzablak segtsgvel
A bal oldali knyvjelz ablakban tartalomjegyzkfa tallhat, amelynekbejegyzseire kattintva az adott fejezet/alfejezet els oldalra jutunk. Azaktulis pozcinkat a tartalomjegyzkfban kiemelt bejegyzs mutatja.
A tartalomjegyzk s a trgymutat hasznlata
Ugrs megadott helyre a tartalomjegyzk segtsgvel
Kattintsunk a tartalomjegyzk megfelel pontjra, ezzel az adott fejezetelsoldalra jutunk.
Keress a szvegben
A dokumentumban val keresshez hasznljuk megszokott mdon aSzerkeszts men Keress parancst. Az Adobe Reader az adott pozci-tl kezdve keres a szvegben.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
5/358
Algoritmusok s adatstruktrk Tartalomjegyzk
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 5
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 5
Tartalomjegyzk
1. Elsz ............................................................................................. 8
2. Bevezets...................................................................................... 10
3. Egyszeradattpusok................................................................... 16
3.1. Egsz tpus..................................................................................................163.2. Karakter tpus.............................................................................................163.3. Logikai tpus ...............................................................................................173.4. Vals tpus ..................................................................................................17
4. Adatok trolsa............................................................................. 194.1. Vltoz ........................................................................................................194.2. Kifejezs ......................................................................................................194.3. Fggvnyek.................................................................................................204.4. Az rtkad utasts...................................................................................214.5. Beolvas utasts ........................................................................................224.6. Kir utasts...............................................................................................23
5. Adatszerkezeti tblzat ................................................................ 24
6. Algoritmusok megadsa............................................................... 26
7. Strukturlt algoritmusok tervezse .............................................. 32
7.1. Szekvencia...................................................................................................327.2. Szelekci......................................................................................................337.3. Iterci.........................................................................................................37
8. Elemi feladatok ............................................................................ 44
8.1. Prmfelbonts .............................................................................................44
8.2. Monoton nvsorozat.............................................................................458.3. Pozitv adatok maximuma, tlaga............................................................468.4. exhatvnysora.............................................................................................478.5. Gykkeress intervallumfelezssel ..........................................................498.6. Integrlrtk meghatrozsa kzeltssel................................................508.7. Feladatok.....................................................................................................52
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
6/358
Algoritmusok s adatstruktrk Tartalomjegyzk
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 6
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 6
9. sszetett adattpusok................................................................... 55
9.1. Tmbk.......................................................................................................55
9.2. Sztringek......................................................................................................709.3. Halmazok....................................................................................................799.4. Rekordok.....................................................................................................89
10. Szubrutinok................................................................................. 94
11. Algoritmusok............................................................................... 99
11.1. Algoritmusok hatkonysga ...................................................................9911.2. Elemi statisztikk .....................................................................................9911.3. Rendezs s keress...............................................................................105
11.4. Ellenrztt input....................................................................................11611.5. Rekurzv algoritmusok ..........................................................................12411.6. Visszalpses algoritmusok ..................................................................13011.7. Feladatok.................................................................................................138
12. Verem......................................................................................... 143
12.1. ltalnos jellemzs ................................................................................14312.2. Gyorsrendezs sajt veremmel ............................................................14412.3. Feladatok.................................................................................................148
13. Dinamikus adatstruktrk......................................................... 149
13.1. Dinamikus tmbk................................................................................14913.2. Mutatk s dinamikus vltozk...........................................................14913.3. Kollekcik...............................................................................................15313.4. Lncolt listk ..........................................................................................15913.5. sszetett listk .......................................................................................16613.6. Feladatok.................................................................................................170
14. Fjlok ......................................................................................... 174
14.1. Fjlok kezelse........................................................................................17514.2. Szekvencilis fjlok................................................................................17814.3. Vletlen elrsfjlok ...........................................................................17914.4. Feladatok.................................................................................................193
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
7/358
Algoritmusok s adatstruktrk Tartalomjegyzk
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 7
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 7
15. Grfok......................................................................................... 194
15.1. Alapfogalmak..........................................................................................194
15.2. Trols .....................................................................................................19615.3. Fk ...........................................................................................................20115.4. tkeress.................................................................................................21415.5. Feladatok.................................................................................................227
16. Irodalomjegyzk ....................................................................... 228
17. Fggelk ................................................................................... 229
17.1. C programok ..........................................................................................23217.2. Pascal programok...................................................................................296
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
8/358
Algoritmusok s adatstruktrk Elsz
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 8
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 8
1.
Elsz
Az algoritmusokat az emberisg mr jval azeltt ismerte s hasznlta,mieltt az ket vgrehajtani tud szmtgpeket megptette.
Noha az algoritmus sz eredete egy IX. szzadi perzsa matematikus(Al-Hvrizmi) nevhez ktdik [Knu 87] [Sai 86], az algoritmusokat mint egy feladat megoldshoz vezetlpsek sorozatt mr idszmt-sunk eltt is hasznltk.
Sokig csak papron, kzzel volt lehetsg az algoritmusok vgre-hajtsra, ma mr szmtgpek vgzik ezt helyettnk.
Az univerzlis, magasszintprogramozsi nyelvek [Ny 03] megjelen-se ta olyan eszkzrendszert hasznlhatunk algoritmusaink lersra, afeladatunkat megold program megrsra, amelyek kzel llnak az emberigondolkods-, s jellsmdhoz.
Termszetesen ezeket a programokat kzvetlenl nem rtik meg aszmtgpek, le kell ket fordtani az adott szmtgp utastskszlet-re, s csak ezutn hajthatk vgre, futtathatk le.
Knyvnkben bevezetett adatstruktrk s algoritmus megadsi md-szerek nem egy konkrt programozsi nyelvhez ktdnek, tbb nyelvbl(C, Pascal, Basic) lettek sszegyrva, kiemelve a kzs, ltalnos rsze-ket, gy lehetsgnk van az algoritmusok nyelv-fggetlen lnyegrekoncentrlni.
Algoritmusainkat strukturlt mdon ksztjk, azaz csak a szekvencia,szelekci, iterci vezrlelemekbl ptkeznk, ugr utastsok nlkl, gymegoldsaink ttekinthetk s knnyen programozhatk lesznek.
Amellett, hogy bemutatjuk s elemezzk a kivlasztott algoritmusokat,elsdleges clunk az algoritmikus feladatmegold kszsg kialaktsa, fej-lesztse, a logikus gondolkodsra val nevels.
Ha egy algoritmushoz olyan adatszerkezetet hasznlunk, amelyet aprogramrsra sznt nyelv nem tmogat (pl. a C nyelvben nincsenek hal-mazok), akkor kitrnk a megvalsts lehetsgeire.
A megoldsok, noha nem gy terveztk ket, akr objektumorientl-tan is programozhatk, kihasznlva ezzel az egysgbezrs elnyeit. Fel-adataink azonban tbbnyire kevs kzs rszt tartalmaznak, ezrt az ob-jektumorientlt programozs igazi erejt ad rkls, gy annak elnyeinem rvnyesthetk.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
9/358
Algoritmusok s adatstruktrk Elsz
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 9
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 9
Egy univerzlis programozsi nyelv ismeretben algoritmusaink prog-ramm rhatk, kiprblhatk, hiszen a visszacsatols, a megolds he-
lyessgnek szmtgppel trtnellenrzse a tanulsi folyamat szervesrsze. Ezt a tantrgyunktl fggetlen, nll programozst megknnyten-d, a jegyzetben szereplmegoldsokat C s Pascal nyelven programoz-tuk, amelyekhez a Borland cg Turbo C s Turbo Pascal fejlesztrendsze-rt hasznltuk. A forrsprogramok a fggelkben megtallhatk.
Ismerve az egyedl elvgzett, nll munka hasznossgt s maradan-dsgt, fejezeteink vgn egy csokor, az adott tmhoz kapcsold fel-adatot tznk ki, amelybl kedvre vlogathat a gyakorlsra vgy, tudstlemrni kvn hallgat, olvas.
Jegyzetnk a BSc kpzs, mszaki informatika szakos hallgatkAlgo-ritmusok s adatstruktrk cm tantrgyhoz kszlt, amelyet a msodikflvben, heti kt rban tanulnak a nappali tagozaton. Pldinkat ennekmegfelelen vlogattuk, szem eltt tartva az sszelltott tananyag 30 r-ban trtntanthatsgt.
Hallgatink az els flvtl kezdden hrom flven keresztl (heti3-5 rban) tanuljk a Programozs cm tantrgyat, amely kt flv C segy flv objektumorientlt Java programozst tartalmaz.Tantrgyunk tfed teht a C programozs msodik flvvel, gy
Knnyebb a bevezetfejezetek tantsa. Megoldsainkat a hallgatk C nyelven programozni tudjk, gy nem-
csak kiprblhatjk, ellenrizhetik azokat, hanem egyben anyagot iskapnak a C nyelvprogramozs gyakorlshoz.
A nehezebb rszeket (pl. mutatk, dinamikus adatstruktrk) kzel egyidben trgyalja a kt tantrgy, megknnytve ezzel a megrtsket.
Tudjuk, hogy a rendelkezsre ll idkeret nem engedi meg az sszes fel-adat rszletes trgyalst, de bzunk benne, hogy a jegyzet anyaga tanri
segdlet nlkl, nllan is feldolgozhat, megrthets elsajtthat.
Gyr, 2006. mjus A szerz
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
10/358
Algoritmusok s adatstruktrk Bevezets
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 10
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 10
2.
Bevezets
Ha egy feladat megoldsra szmtgpes programot ksztnk, akkorltalban az albbi lpseket, tevkenysgeket kell elvgeznnk:
1.
A feladat megfogalmazsa, pontosts, ltalnosts.2. Matematikai (vagy egyb) modell kivlasztsa, megadsa (ha szksges,
ill. lehetsges).3.
Az adatszerkezet definilsa, az input-output specifiklsa.4.
A megoldst megvalst algoritmus megtervezse, elksztse.5. Programrs, kdols (az adatszerkezet s az algoritmus alapjn).
6.
Tesztels, hibakeress.7. Dokumentls (felhasznlknak, fejlesztknek).
Termszetesen az adott munka, ill. feladat jellegbl addan bizonyoslpsek el is maradhatnak (pl. 2., 7.), ill. javts, mdosts esetn szksglehet egy korbbi szintre val visszalpsre is.
Jegyzetnkben elssorban a megoldsok rdemi rszt jelent3. s 4.lpsekre fkuszlunk az
Algoritmusok + Adatstruktrk = Programok
kplet alapjn [Wir 82], de mint ahogy a puding prbja az evs, itt az5., 6. lpsek igazoljk vissza megoldsunk helyessgt, helytelensgt.
Az 1-5. megoldsi lpseket az albbi feladat megoldsn keresztlszemlltetjk, de az alkalmazott adattpusokat, az adatszerkezeti tblzatot,az algoritmus megadsi mdszereket, azaz a megolds eszkzeit a ksbbifejezetekben rszletesen trgyaljuk.
Feladat: Alaktsunk t egy pozitv egsz szmot egy adott (2-16) szm-rendszerbe!
1.
ltalnosts: A megoldst nem kt konkrt adatra, hanem megadha-t, input adatokra ksztjk el, gy tetszlegesen konvertlhatunk.
2. Matematikai modell: Ez maga az algoritmus, miszerint elszr a
megadott szmot, utna a keletkezhnyadosokat mindaddig osszukel az adott szmrendszer alapszmval, amg a hnyados nulla nemlesz. Minden osztsnl jegyezzk fel az oszts maradkt. Ezekbl,mint szmjegyekbl, a feljegyzsk fordtott sorrendjben szmot k-pezve, a megoldst kapjuk.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
11/358
Algoritmusok s adatstruktrk Bevezets
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 11
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 11
Pl: 40-et 2-s szmrendszerbe Pl: 40-et 16-s szmrendszerbe
40
20105210
0
00101
Eredmny: 101000 Eredmny: 28
3. Adatszerkezet: Tekintettel a hexadecimlis szmrendszer betvel
jellt szmjegyeire, ill. a nagy egsz szmok (4 bjt) esetn a kettesszmrendszerbeli, esetlegesen 32 szmjegyes eredmnyre, az eredmnytpusa csak sztring lehet.
Funkci Azonost Tpus Jelleg
Az talaktand szm A Egsz I
A szmrendszer alapszma B Egsz I
Az eredmny szm ER Sztring M, O
Az ER vltoz munka jelleg is, mert rtke az algoritmus sorn alakul,vltozik, ahogyan a maradkokat egy sztringg fzzk.
4. Algoritmus:A lehetsges szmjegyeket egy sztringkonstansban dekla-rljuk:
KonstansSZAMJEGYEK 0123456789ABCDEF
A megolds pszeudokdja:
/* Szmrendszer konverzi */KONVERTAL(A,B)
ER repeat
ER SZAMJEGYEK[A MOD B+1]+ERA A DIV B
untilA=0returnER
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
12/358
Algoritmusok s adatstruktrk Bevezets
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 12
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 12
5. Programrs: Az albbiakban, az sszehasonlts vgett hrom
magasszints egy gpkzeli nyelven is programm rtuk a megold-
sunkat.C program/* SZRKONV.C : Szmrendszer konverzi */#include #include #define MaxHossz 32+1 /* +1: a vgjelnek */#define SzamJegyek "0123456789ABCDEF"
void Konvertal(int a, int b, char *er){ int i,j; char cs;
/* Osztogats */
i=0;do {er[i++]=SzamJegyek[a%b];a=a/b;
} while (a>0);/* Vgjel */er[i]='\0';/* Megfordts */for (j=0,i--; j
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
13/358
Algoritmusok s adatstruktrk Bevezets
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 13
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 13
Pascal program{ Szmrendszer konverzi }program SZRKONV;
uses crt;const SzamJegyek:string='0123456789ABCDEF';
function Konvertal(a,b:integer):string;var er:string;begin
er:='';repeat
er:=SzamJegyek[a mod b+1]+er;a:=a div b;
until a=0;Konvertal:=er;
end;
var a,b:integer;begin
clrscr;write('A konvertland pozitv egsz szm:'); readln(a);write('A szmrendszer alapszma (2-16):'); readln(b);writeln(Konvertal(a,b));
end.
Basic program' Szmrendszer konverzi
Option ExplicitConst SzamJegyek = "0123456789ABCDEF"
Function Konvertal(a As Integer, b As Integer) As StringDim er As Stringer = ""Do
er = Mid(SzamJegyek, a Mod b + 1, 1) + era = a / b
Loop Until a = 0Konvertal = er
End Function
Sub Hivo()Dim a As IntegerDim b As Integera = InputBox("A konvertland pozitv egsz szm:")b = InputBox("A szmrendszer alapszma (2-16):")MsgBox (Konvertal(a, b))
End Sub
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
14/358
Algoritmusok s adatstruktrk Bevezets
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 14
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 14
Megjegyzs: Ebben a Visual Basic megoldsban a Hivoszubrutin vgzi el aC s Pascal megoldsok fprogramjnak szerept, azaz az adatbekrst, a
konvertlst elvgz Konvertal szubrutin meghvst, majd a kapott ered-mny kirst.
Assembly program; Szmrendszer konverzi
.MODEL SMALL
.STACK 100h
.DATASzJ DB "0123456789ABCDEF"Er DB 32 dup (?)
.CODEmov ax,@DATA ;DS-be az adatszegmensmov ds,ax ;szegmenscmtmov ax,40 ;A konvertland szmmov bx,2 ;A cl szr. alapszmamov di,Offset Er ;Az eredmnyterlet
;offset cmecall Konv ;CX-ben az Er sztring hossza
mov ah,2 ;Kirsmov si,0
Kiir: mov dl,Er[si]int 21h
inc siloop Kiir
mov ah,4ch ;Befejezsint 21h
; Input: AX = a konvertland pozitv egsz szm; BX = a cl szmrendszer alapszma; DI = az eredmnyterlet offset cme; Output: DS:DI = az eredmnysztring kezdcme; CX = az eredmnysztring hossza; Elroml regiszterek: AX,DX,DI,SI
Konv PROCmov cx,0
Oszt: mov dx,0 ;Az elzmaradk trlsediv bx ;Osztsinc cxpush dx ;Maradkot a verembecmp ax,0jne Osztmov dx,cx ;CX megjegyzse
Cikl: pop si ;Az eredmny ellltsamov al,SzJ[si] ;AL-be a megfelelkaraktert
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
15/358
Algoritmusok s adatstruktrk Bevezets
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 15
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 15
mov [di],al ;A clterletre rjukinc diloop Cikl
mov cx,dx ;CX belltsaret ;Visszatrs a hvhozKonv ENDP
END
Megjegyzs: Ezen Turbo Assembly megolds fprogramja fix adatokkalhvja meg a megoldst elvgzKonvszubrutint, gy elkerltk az adatbek-rs programozst.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
16/358
Algoritmusok s adatstruktrk Egyszeradattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 16
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 16
3.
Egyszeradattpusok
Minden programfejleszt rendszer meghatrozza, definilja az adatokazon krt, amelyet kezelni tud. Azt, hogy milyen fajta adatokat hasznl-hatunk, ezekkel milyen mveleteket vgezhetnk, ezek hogyan troldnak,az adattpusok definiljk. Attl fggen, hogy az adattpus egy, ill. tbbadat egyidejhasznlatt engedi meg, megklnbztetnk egyszers ssze-tettadattpusokat. Ebben a fejezetben az egyszeradattpusokrl lesz sz,amelyekbl ksbb, sszetett adattpusokat ptnk (lsd 9.).
3.1.Egsz tpus
Egsz szmok hasznlatt megengedadattpus.Konstans: pl. 326Mveletek:
Eljel (+, ) Multiplikatv: Szorzs (*), Egsz oszts hnyadosa (/, DIV), Egsz
oszts maradka (%, MOD) Additv: sszeads (+), Kivons () Hasonltsok: Egyenl(=), Nem egyenl(), Kisebb (), Kisebb vagy egyenl(=)
A hasonltsok eredmnyeknt logikai, a tbbi mvelet eredmnyekntegsz rtket kapunk.Pl. 5/3 1, 5 DIV 3 1, 5 MOD 3=5 % 3 igaz
3.2.Karakter tpus
Karakterek hasznlatt megengedadattpus.Konstans: pl. A, #27Mveletek:
sszefzs (+) Hasonltsok: mint az egszeknl, csak itt nem a szmok rtke, ha-
nem a karakterek ASCII kdja szerint trtnik a hasonlts.
A hasonltsok eredmnyeknt logikai rtket, az sszefzs eredmnye-knt egy kt karakterbl ll sztringet (lsd 9.2.) kapunk.Pl. A
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
17/358
Algoritmusok s adatstruktrk Egyszeradattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 17
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 17
Megjegyzs Szimpla aposztrfot hasznlunk, mg a sztringeknl (lsd 9.2.) duplt.
Egy karakterkonstanst a karakter ASCII kdjnak segtsgvel is meg-adhatunk (gondoljunk csak a nem begpelhetkarakterekre), ekkor akarakter kdja el a # karaktert tesszk (pl. #65 a 65-s kd A karak-tert, a #27 az Esc billentyhz tartoz karaktert definilja).
3.3.Logikai tpus
Konstans: igaz, hamisMveletek:
Tagads (NOT), s (AND), Vagy (OR) Hasonltsok: mint az egszeknl.
Hogy valamennyi hasonlts rtelmezett legyen, a kt logikai rtk kzttis definilunk sorrendisget, a hamis megelzi az igaz rtket.A hasonltsok s a mveletek eredmnyeknt logikai rtket kapunk.Pl. hamis < igaz igaz
A B NOT A A AND B A OR B
igaz igaz hamis igaz igaz
igaz hamis hamis hamis igaz
hamis igaz igaz hamis igaz
hamis hamis igaz hamis hamis
3.1. tblzat.A logikai mveletek.
3.4.Vals tpus
Vals szmok hasznlatt megengedadattpus.Konstans: pl. 3.14Mveletek: mint az egszeknl, csak itt egyetlen oszts megengedett (/), atbbi (DIV, MOD, %) nem rtelmezett.A hasonltsok eredmnyeknt logikai, a tbbi mvelet eredmnyekntvals rtket kapunk.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
18/358
Algoritmusok s adatstruktrk Egyszeradattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 18
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 18
Megjegyzs: A programfejleszt rendszerek ltalban tbbfle egsz, ill.vals tpus hasznlatt engedik meg, ezekkel kln nem foglalkozunk, azalgoritmus programm rsakor a megfelel, az adatok pontos trolshozmr elegendtpust clszervlasztani. Felesleges pldul 4 bjtos egsztpust hasznlni akkor, amikor az egsz adataink elfrnek 1 bjton is. Azegyszersg kedvrt pldaprogramjainkban egsz tpusknt ltalban azint,ill. integer,vals tpusknt afloat,ill. realtpusokat hasznljuk.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
19/358
Algoritmusok s adatstruktrk Adatok trolsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 19
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 19
4.Adatok trolsa
Ahhoz, hogy adatainkat a szmtgp kezelni tudja, trolnia kell. A trolsmikntje, konkrt megvalstsa egyrszt az adatok tpustl, msrszt azalkalmazott fejlesztkrnyezettl s az opercis rendszertl is fgg, ezrtezt nem rszletezzk (lsd [Ny 03]). Az adatok memriban trtnegysze-rtrolsrl ebben a fejezetben, a dinamikus trkezelsrl a 13., mg a klsadathordozn, fjlokban trtnadattrolsrl a 14. fejezetben lesz sz.
4.1.Vltoz
Vltozn olyan azonostval elltott memriaterletet rtnk, ahol a vl-toz tpusnak megfeleladatot trolhatunk.A vltoz rtkn az ppen benne trolt adatot rtjk. Ez az rtk az
algoritmus, ill. a program vgrehajtsa sorn megvltozhat innen ered azelnevezse , ilyenkor a vltozba kerlj adat fellrja a rgit.
4.2.Kifejezs
Kifejezsen olyan szmtsi mveletsort rtnk, amellyel megmondjuk,hogy milyen adatokkal, milyen mveleteket, milyen sorrendben kvnunk
elvgezni. A kifejezs kirtkelse, kiszmtsa utn egy j rtk a kifeje-zs rtke keletkezik.A kifejezsben szerepelhetnek:
Konstansok, vltozk, fggvnyhvsok Mveletek Zrjelek (csak kerek zrjelek hasznlhatk)
A kifejezsben szerepladatokat (konstansok, vltozk) operandusoknak,a mveleteket opertoroknak is szoktk nevezni.Pl. (B+SQRT(B*B4*A*C))/(2*A)A 4 s a 2 konstansok, az A, B, C vltozk, az SQRT pedig a ngyzet-gykvonst elvgzfggvny neve.A mveletek ersorrendje (prioritsa) cskkenersorrendben:
Egyoperandus: Eljel (+,), Tagads (NOT) Multiplikatv (*, /, DIV, MOD, %, AND) Additv (+,, OR) Hasonltsok (=, , , =, IN)
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
20/358
Algoritmusok s adatstruktrk Adatok trolsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 20
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 20
Megjegyzs A hasonltsokat relcis mveleteknek is nevezik.
A sztring- s halmazmveleteket (pl. a tartalmazs IN mvelett) amegfelelfejezetekben trgyaljuk.
A kifejezsek kirtkelsnek szablyai:
1.
A zrjelbe tett kifejezsek s fggvnyhvsok operandus szintreemelkednek.
2. A magasabb priorits mveletek vgrehajtsa megelzi az alacso-nyabb priorits mveletek vgrehajtst.
3.
Az azonos priorits mveleteknl a balrl-jobbra szably rvnyes,miszerint a vgrehajts balrl jobbra haladva trtnik.
4. A logikai kifejezsek kirtkelse befejezdik, amint az eredmny rt-ke mr nem vltozhat.
5.
A numerikus mveleteknl az eredmny egsz, ha az operandusokegszek s vals, ha valamelyik operandus vals.
A szablyok alapjn egyrtelmen meghatrozhat a kifejezsben szereplmveletek vgrehajtsi sorrendje, gy a kifejezs rtke mindig egyrtelm-en kiszmthat.
4.3.Fggvnyek
Munknk sorn, az algoritmusok ksztse kzben feltesszk, hogy bizo-nyos szmolsokat, talaktsokat elvgezhetnk, azaz lteznek az albbitevkenysgeket elvgzfggvnyek.
4.3.1.Matematikai fggvnyek
ABS(X) X abszolt rtke.EXP(X) Az exponencilis fggvny (ex) rtke az X helyen.
LOG(X) A termszetes alap logaritmus fggvny rtke az Xhelyen.SIN(X) X szinusza (X radinban adott).COS(X) X koszinusza (X radinban adott).SQR(X) X ngyzete.SQRT(X) X ngyzetgyke.RANDOM(X) Egy vletlen egsz szm 0-tl X1-ig (X egsz rtk).
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
21/358
Algoritmusok s adatstruktrk Adatok trolsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 21
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 21
4.3.2.Konverzis fggvnyek
ASC(X) Az X karakter ASCII kdja (pl. ASC(A)65).
CHR(X) Az X ASCII kd karakter (pl. CHR(65)A).Megjegyzs A C nyelvben nincs szksg ezekre a konverzikra, mert egy karakter
s kdjnak hasznlata ekvivalens. A sztringkezel fggvnyeket valamint a dinamikus trkezelshez,
fjlkezelshez kapcsold fggvnyeket a megfelel fejezetekben tr-gyaljuk.
4.4.
Az rtkad utastsEgy vagy tbb azonos tpus vltoznak rtket adhatunk, bennk adatottrolhatunk.Jells:
vltozkifejezsvagy
vltoz vltoz kifejezsVgrehajts:
Kirtkels: a kifejezs rtknek kiszmtsa. Trols: ha az rtk trolhat, akkor troldik a vltoz(k)ban, kln-
ben hiba lp fel.
Egy rtk akkor trolhat egy adott vltozban, ha
a tpusuk megegyezik, vals tpus vltozhoz egsz rtket rendelnk, egsz tpus vltozhoz vals rtket rendelnk,
sztring tpus vltozhoz karaktert rendelnk.Az esetleges tlcsordulstl (amikor egy rtk a nagysga miatt nem trol-hat), valamint a tpuseltrsek esetn szksges (a trolsi md klnb-zsgbl fakad) konverziktl eltekintnk, feltesszk, hogy a konverzi-k automatikusan vgrehajtdnak. Vals rtkek egsz vltozkhoz rende-lst megengedjk, ekkor a szm egsz rsze konvertldik, a trtrszfigyelmen kvl marad.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
22/358
Algoritmusok s adatstruktrk Adatok trolsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 22
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 22
Megjegyzs: A C nyelvben megengedett egszek s karakterek kzttiautomatikus oda-vissza konverzit nem engedjk meg, mg ott kt karak-
ter sszege a kdok sszegt adja, addig a mi jellsmdunk szerint egy,ktkarakteres sztringet.
Pl. II+1 /* I rtkhez hozzad 1-et s az eredmnyt I-be teszi. */IJK0 /* Az I, J, K vltozkba nullt tesz. */
Az elsplda rtkadsa normlis esetben megnveli eggyel az I vltozrtkt, szlssges esetben (ha pl. I-ben, a tpusnak megfelel legna-gyobb szm van ppen) azonban nem. A szmtgp vges memrijbanugyanis nem trolhatunk vgtelen nagy szmokat, a szmtgp szmbr-
zolsa csak bizonyos korltok kztt (rtelmezsi tartomny, pontossg)engedi meg a szmok hasznlatt.
4.5.Beolvas utasts
Egy vagy tbb vltoznak rtket adhat a felhasznl a standard inputeszkz, a billentyzet segtsgvel.Jells:
Be: vltozlista
A vltozlista vltozk vesszvel elvlasztott sorozata.Pl. Be: A, B, CVgrehajts: a felhasznl ltal megadott adatok troldnak a felsoroltvltozkban.
Megjegyzs Adatok bekrsekor ltalban valamilyen informcit (pl. tjkoztat
zenetet) kell adni arrl, hogy milyen adatot vrunk. Az egyszersgkedvrt ettl eltekintnk, a megoldsok programm rsakor viszontclszerezeket megtenni.
Feltesszk, hogy a felhasznl j adatot ad meg, az adatok ellenrz-svel (ha csak a feladat jellege nem kifejezetten ilyen, lsd 11.4.) nemfoglalkozunk.
Csak az egsz, karakter, vals s sztring tpus adatok beolvassa meg-engedett. Nem krhetnk be teht logikai rtkeket, halmazokat, tm-bket, rekordokat. Az sszetett adatok (lsd 9.) bekrse elemenknt,ill. meznknt trtnhet, ha azok bekrse megengedett.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
23/358
Algoritmusok s adatstruktrk Adatok trolsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 23
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 23
4.6.Kir utasts
Egy vagy tbb kifejezs rtke kirathat a standard output eszkzre, a
kpernyre.Jells:
Ki: kifejezslistaA kifejezslista kifejezsek vesszvel elvlasztott sorozata.Pl. Ki: A kr sugara:, R, terlete:, R*R*3.14Vgrehajts: a kifejezsek rtke kirtkeldik, majd sorban kirdik a kp-ernyre.
A pldban szerepl els s harmadik kifejezs rtkei maguk a(sztring) konstansok, a msodik az Rvltoz tartalma, a negyedik pedig,
az R aktulis rtkbl kiszmolt rtk lesz, ezek rdnak ki.
Megjegyzs
Az egyszersg kedvrt a kirs esetleges pozcionlsval, tagolssal,soremelssel itt nem foglalkozunk, ezeket a megoldsok programmrsakor kell megtennnk (a feladathoz illeszkeden, vagy ha ez nemkttt, akkor tetszs szerint).
Csak az egsz, karakter, vals s sztring tpus adatok kirsa megen-gedett. Nem rhatunk ki teht logikai rtkeket, halmazokat, tmbket,rekordokat. Az sszetett adatok (lsd 9.) kirsa elemenknt, ill. me-znknt trtnhet, ha azok kirsa megengedett.
Az rtkad, beolvas s kir utastsokat alaptevkenysgekneknevezzk.Azt, hogy egy feladat megoldshoz szksges alaptevkenysgeket milyensorrendben kell vgrehajtani, a vezrlszerkezetekkel szablyozhatjuk, ame-lyeket a ksbbiekben (lsd 7.) ismertetnk.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
24/358
Algoritmusok s adatstruktrk Adatszerkezeti tblzat
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 24
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 24
5.
Adatszerkezeti tblzat
Egy feladat megoldshoz szksges adatokat s a trolsukra hasznltvltozkat egy olyan tblzatban adjuk meg, amelyben egy-egy adatot az tkezel vltoz tulajdonsgainak megadsval jellemznk. Ngy tulajdon-sgot tartunk fontosnak:
Funkci: ez a tulajdonsg mutatja meg, hogy a vltozba milyen adatkerl, mire hasznljuk a vltozt.
Azonost: a vltoz azonostja (neve), ezzel hivatkozunk az adatra. Tpus: a vltoz, s ezen keresztl az adat tpusa, trolsi mdja. Itt ad-
juk meg az sszetett vltozt jellemzinformcikat is (pl. tmbdimen-zik).
Jelleg: a vltozban kiindulsi (input), vgeredmny (output), ill. rsz-eredmny (munka) adatot trolunk-e.
A vltozk azonostinak (csakgy, mint a feladat megoldshoz deklarltkonstansok, tpusok, szubrutinok azonostinak) egyedieknek kell lennik.Clszerrvid, de kifejezneveket vlasztani. A megoldsok programmrst megknnytend, az azonostkban csak az angol betket, a szmje-
gyeket s az alhzs karaktert hasznljuk. Az olvashatsg s a knnyebbttekinthetsg rdekben ezeket nagybetvel rjuk, csakgy, mint a mve-letek s fggvnyek neveit.
A munka jelleg vltozkban rszeredmnyeket, ill. az algoritmusmegadshoz, vezrlshez szksges adatokat troljuk.
Egy vltoz, a benne trolt adattl fggen tbbfle jelleggel is ren-delkezhet. A jellegeket a kezdbetikkel rvidtjk.
Pl: Egy rendezalgoritmushoz az albbi adatszerkezeti tblzat defini-lhat:
Funkci Azonost Tpus Jelleg
A rendezendelemek A Egydimenzis, tetsz-leges elemtpus tmb
I, M, O
A rendezendelemek szma N Egsz I
Kt elem cserjhez CS Az A tmb elemeivelmegegyeztpus
M
Segdvltozk I, J, K Egsz M
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
25/358
Algoritmusok s adatstruktrk Adatszerkezeti tblzat
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 25
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 25
A tetszleges elemtpus jelen esetben azt jelenti, hogy az algoritmus m-kdik az sszes olyan adatsorra, amelynek elemeire rtelmezettek a hason-
lts mveletek. A konkrt elemtpust a rendezend adatsor elemeinektpusa hatrozza meg.Az A tmbben kapjuk (input) a rendezend elemeket, az algoritmus
sorn itt rendezzk ket (munka), s a legvgn itt lesznek sorba rendezveis (output). A tmbk mrett (mreteit) is itt tntetjk fel, ha ez a feladatszempontjbl lnyeges (lsd 9.1.).
Ha egy feladat megoldsa sorn egy adott konstans rtketvagy egy j,ltalunk definilt tpusttbb helyen is hasznlni szeretnnk, akkor clszerket egyszer deklarlni, s utna csak az azonostjukat hasznlni. Az
albbi egyszerformalizmust fogjuk hasznlni:Konstans
Azonost AdatTpus
Azonost Tpuslers
Pl.
KonstansSORMAX 10
OSZLMAX 20Tpus
ELEM EgszMATRIX Ktdimenzis ELEM tmb[SORMAX, OSZLMAX]
A fenti pldban kt konstanst s kt tpust deklarlunk gy, hogy aMATRIX tmbtpus deklarlsban mr hasznljuk is az eltte deklarltELEM tpust s mretkonstansokat.
Megjegyzs: A feladatok kitzsekor gyakran hasznlunk szimblumokat(azonostkat) az adatok jellsre (pl. N), amelyek trolsra felhasznltvltozknak clszeren, de nem szksgszeren, ugyanazokat az azonos-tkat, neveket adjuk (pl. N). Azrt, hogy ez ne okozzon flrertst (azazne keverjk az adatokat az ket trol vltozkkal), az adatok azonostjtdlt kiemelssel rjuk, a vltozk azonostit (csakgy, mint a feladat meg-oldshoz deklarlt konstansok, tpusok, szubrutinok azonostit) nem.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
26/358
Algoritmusok s adatstruktrk Algoritmusok megadsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 26
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 26
6.
Algoritmusok megadsa
Az algoritmusok megadsra, lersra tbbfle eszkz ll rendelkezsnkre.
Szveges lersAz algoritmust szavakkal, mondatokkal rjuk le. Szksg esetn az egyeslpseket sorszmokkal ltjuk el, amelyek a megolds menett, a lpsekvgrehajtsi sorrendjt fejezik ki. Minden megoldsnl hasznlni fogjuk.
FolyamatbraAz algoritmus folyamatt kifejez jellsmd, amelyen jl kvethet azalgoritmus lpseinek sorrendje, a megolds menete. Csak ebben a feje-zetben hasznljuk.
D-diagramOlyan strukturlt folyamatbra, amely csak a szekvencia, szelekci, itercivezrlszerkezeteket engedi meg, csak ezekbl ptkezik. Csak ebben afejezetben hasznljuk, ahol a mintafeladat megoldsban szerepl folya-matbra egyben D-diagram is.
Megjegyzs: A nvben szerepl D bet a D-diagramot definil E. W.
Dijkstra nevbl ered, aki gy prblt rendet tenni a folyamatbra felt-teles s felttel nlkli vezrlstadsaival okozhat kuszasgban.
StruktradiagramAz algoritmusok fellrl-lefel trtn tervezst tmogat eszkz. El-szr csak a fbb lpseket definiljuk, majd azokat hasonl mdon kifejt-ve, fokozatosan jutunk el a teljes megolds lersig. Az algoritmusok ter-vezsnl ezt fogjuk hasznlni.
Megjegyzs: Szerkezeti brnak is nevezik [Mar 93].
StruktogramAz algoritmusok vezrlszerkezeteit dobozokkal kifejez mdszer.Csak ebben a fejezetben hasznljuk.
PszeudokdOlyan utastsszint ler eszkz, amelynek vezrlszerkezeteit a
magasszint
programozsi nyelvekben megszokott mdon, vagy ahhoz
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
27/358
Algoritmusok s adatstruktrk Algoritmusok megadsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 27
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 27
nagyon hasonlan rjuk le. Mivel az alapul vett hrom programozsi nyelv(C, Pascal, Basic) kicsit eltr szintaktikval hasznlja ezeket a vezrl-
szerkezeteket, ezrt egy ltalnos, egyszerstett, a kzs lnyeget kifejezjellsmdot definilunk. Az elbb felsorolt nyelvek ismeretben taln eza lers olvashat, ill. programozhat a legknnyebben, ezrt valamennyimegoldsnl hasznlni fogjuk.
Az egyszersg s rvidsg rdekben bizonyos feladatok megolds-nl (mint az albbi pldban is) feltesszk, hogy az input adatok mr ren-delkezsre llnak, ezeket megkapjuk, mg az output eredmnyeket vissza-adjuk. Ilyenkor a megoldst egy szubrutin (lsd 10.) vgzi, amelynek nevemgtt zrjelben felsoroljuk a kommunikcit vgz, input ill. output
adatokat tartalmaz vltozk azonostit (mint a szubrutin paramtereit),jelezve ezzel azt, hogy a megolds csak az rdemi rszt tartalmazza, azesetleges adatbekrs s eredmnykirs, a szubrutint hv programrsz(pl. a fprogram) feladata.
Az algoritmus megadsi mdszerek hasonlsgt, klnbzsgt azalbbi feladat megoldsn szeretnnk szemlltetni.
Feladat: Hatrozzuk meg kt egsz szm legnagyobb kzs osztjt!
Megolds: A feladatra Euklidesz (kb. 2300 vvel ezeltt) egy, a marad-
kos osztson alapul megoldst adott, amelynek lnyege a kvetkez:Az as b0szmokra vgezzk el a maradkos osztst, azaz
a = bq1+ r1 (0 |r1| < |b|).
Ezutn b s r1kztt is,
b = r1q2+ r2 (0 |r2| < |r1|)
s gy tovbb. Mivel a maradkok (r1, r2, ) abszolt rtkben monotoncskkennek, gy vges szm lpsben bekvetkezik az
rn1= rnqn+1+ rn+1 (0 < |rn+1| < |rn|)rn= rn+1qn+2
llapot, azaz a maradk (rn+2) nulla lesz. Az utols nem nulla maradk (rn+1)az as bszmok abszolt rtkben legnagyobb kzs osztjt adja.
Az algoritmus lnyege abban ll, hogy abszolt rtkben egyre kisebbszmokra (as bhelyett bs a mod brtkekre) vgzi el sorban ugyanazt(egy maradkos osztst), egszen addig, amg az oszts maradka nullanem lesz.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
28/358
Algoritmusok s adatstruktrk Algoritmusok megadsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 28
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 28
Szveges lersHogy a nullval val osztst elkerljk, a b=0felttelt vizsgljuk meg el-
szr.1.
Ha brtke 0, akkor artke a megolds s kszen vagyunk.2. Ha brtke nem 0, akkor osszuk el artkt brtkvel maradkosan
s jellje az oszts maradkt r.3. Legyen aj rtke b, bj rtke rs folytassuk a vgrehajtst az 1. l-
pssel.
A vgrehajtsi lpseket egyszeren megsorszmoztuk.Az algoritmusok kzzel, papron trtnlejtszsa nemcsak az al-
goritmus elksztst, de a mr ksz algoritmusok megrtst is segtheti.Az albbi tblzat az algoritmus egyes lpseihez tartoz a, bs rrt-keket tartalmazza, ami jl tkrzi az algoritmus mkdst.
a b r a b r a b r a b r a b r a b r a b r
1. 40 18 4 6 9 6 -5 3 -2 2 -5 2 -10 -8 -2 0 21 0 0 0
2. 18 4 2 9 6 3 3 -2 1 -5 2 -1 -8 -2 0 21 0
3. 4 2 0 6 3 0 -2 1 0 2 -1 0 -2 0
4. 2 0 3 0 1 0 -1 0
6.1. tblzat.rtkek alakulsa osztssal.
Megjegyzs
Az algoritmusnak csak abban az esetben van rtelme, ha a bszm nemnulla (ekkor aakr 0 is lehet).
Az algoritmus az a=0s b=0extrm esetben a 0 eredmnyt adja.
Ha a szmok csak termszetes szmok lehetnek (1, 2,), akkor a marad-kos oszts helyett kivonson alapul algoritmus is adhat, amely lnyeg-ben ugyanazt vgzi, csak a maradkos oszts ismtelt kivonsokkal he-lyettestdik.
1. Ha artke megegyezik brtkvel, akkor ez az rtk a megolds skszen vagyunk.
2.
Ha artke nem egyezik megbrtkvel, akkor a nagyobb szm rt-kt cskkentsk a kisebb szm rtkvel s folytassuk a vgrehajtst az1. lpssel.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
29/358
Algoritmusok s adatstruktrk Algoritmusok megadsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 29
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 29
a b a b
1. 40 18 6 9
2. 22 18 6 3
3. 4 18 3 3
4. 4 14
5. 4 10
6. 4 6
7. 4 2
8. 2 2
6.2. tblzat. rtkek alakulsa kivonssal.
A tovbbi megoldsok egzaktabb jellsmdot hasznlnak, ezrt elttemegadjuk a feladathoz tartoz adatszerkezeti tblzatot is.
Adatszerkezeti tblzat
Funkci Azonost Tpus Jelleg
Egyik szm A Egsz I, M, O
Msik szm B Egsz I, MAz osztsos algoritmusban az osztsmaradka
R Egsz M
A rekurzv fggvnyek eredmnye ER Egsz O
Az A s B vltozk munka jellegt az indokolja, hogy rtkk megvltozikaz algoritmus sorn, A output jellegt pedig az, hogy itt keletkezik azeredmny.
Mind a maradkos osztson, mind a kivonson alapul algoritmust
bemutatjuk az albbiakban, de az R vltoz csak az osztson alapul algo-ritmushoz, mg az ER vltoz csak a rekurzv megoldsokhoz szksges.
A rekurzv fggvnyek ER vltozjt a megolds strukturltsgnakmegrzse rdekben hasznltuk (lsd 10.).
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
30/358
Algoritmusok s adatstruktrk Algoritmusok megadsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 30
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 30
Folyamatbra
Struktradiagram
Struktogram
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
31/358
Algoritmusok s adatstruktrk Algoritmusok megadsa
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 31
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 31
Pszeudokd
LNKO_OSZTASSAL(A,B)
whileB0R A MOD BA BB R
LNKO_KIVONASSAL(A,B)
whileABifA>B
A A-Belse
B B-A
A feladatra rekurzv megoldsok is adhatk, ezek pszeudokdja a kvet-kez:
LNKO_OSZTASSAL(A,B)
ifB=0ER A
else
ER LNKO_OSZTASSAL(B,A MOD B)returnER
LNKO_KIVONASSAL(A,B)
ifA=BER A
else
ifA>BER LNKO_KIVONASSAL(A-B,B)
else
ER LNKO_KIVONASSAL(A,B-A)returnER
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
32/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 32
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 32
7.
Strukturlt algoritmusok tervezse
Egy feladat megoldsa kzben, az egyes tevkenysgek vgrehajtsi sor-rendjt vezrlszerkezetekkel definiljuk. Az egyes vezrlszerkezeteket(szekvencia, szelekci, iterci), ezek jellst kln fejezetekben, kln-bzpldkon szemlltetve trgyaljuk.
7.1.Szekvencia
Olyan vezrlszerkezet, amelynek sorn az egyes rsztevkenysgeketsorban, egyms utn hajtjuk vgre.
Struktradiagram-jellsT
T1 T2 Tn...
Jelents: A T tevkenysg vgrehajtsa a T1, T2, , Tnrsztevkenysgekegyms utni vgrehajtsbl ll.
Megjegyzs: Ha tbb, egymst kvet rsztevkenysg alaptevkenysg,akkor azok egyetlen tglalapba sszevonva is megadhatk, elkerlve ezzelaz bra tl gyors szlesedst.
Pszeudokd-jellsT1T2T
n
A T1, T2, , Tnrsztevkenysgeket egyszeren a T tevkenysg helyrerjuk, egyms al, egyvonalba.
Feladat: Hatrozzuk meg egy adott sugar kr terlett s kerlett!
Megolds: Egy kr terlett az r2, kerlett a 2rmatematikai kpletekdefiniljk, ezeket kell kiszmolnunk.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
33/358
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
34/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 34
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 34
Jelents: A T tevkenysg vgrehajtsa annak a Ti rsztevkenysgnek avgrehajtst jelenti, amelyhez tartoz fifelttel igaz. Ha egyik felttel sem
teljesl, akkor a T tevkenysg res tevkenysg.Pszeudokd-jells
iff1T1
elseiff2T2
...elseiffn
Tn
A fentieket a T tevkenysg helyre rjuk gy, hogy a T1, T2, , Tnrsz-tevkenysgek beljebb, egyms al, egyvonalba kerljenek.
Megjegyzs: Ha a szelekciban csak egy felttel szerepel (n=1), akkornincs elsersz.Pl.
ifA>0
DB DB+1
Ha a szelekciban lvfelttelek kzl az egyik biztosan teljesl, akkor azutols felttel (if fn) elhagyhat.
Pl.ifA>B
Ki: A
else
Ki: B
A szelekci ezen tagolsa amellett, hogy az ttekinthetsget nveli, els-sorban azrt szksges, mert gy jelezzk az egyes gakhoz tartoz rszte-vkenysgek elejt s vgt. Fokozottan gyeljnk erre tbb, egymsba
gyazott szelekci esetn, mert csak a tagols jelzi azt, hogy az egyes te-vkenysgek melyik felttelhez tartoznak.
Feladat: Oldjuk meg az ax2+bx+c=0msodfok egyenletet, ahol az a, b, cegytthatk vals szmok!
Megolds: Minden esetet megvizsglunk, a megoldsokat ezek alapjnszmoljuk s rjuk ki.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
35/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 35
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 35
Funkci Azonost Tpus Jelleg
Az egytthatk A, B, C Vals I
Az egyik vals gyk X1 Vals OA msik vals gyk X2 Vals O
A komplex gykk vals rsze V Vals O
A komplex gykk kpzetes rsze K Vals O
A diszkriminns rtke D Vals M
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
36/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 36
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 36
Kt vals gyk
Kiszmols Kirs
X1 (B+SQRT(D)/(2*A)X2 (BSQRT(D)/(2*A)
Ki: Kt vals gyk:, X1, X2
/* Msodfok egyenlet megoldsa */Be: A,B,CifA=0
/* Nem msodfok eset */ifB=0
/*Nem elsfok eset */ifC=0Ki: Minden vals szm megolds!
else
Ki: Nincs megolds!else
Ki: Elsfok:,-C/Belse
/* Msodfok eset */D B*B-4*A*CifD>0
/* Kt vals gyk */X1 (-B+SQRT(D))/(2*A)X2 (-B-SQRT(D))/(2*A)Ki: Kt vals gyk:,X1,X2
elseifD=0Ki: Msodfok:,-B/(2*A)
else
/* Komplex gykk */V -B/(2*A)K ABS(SQRT(-D)/(2*A))Ki: Egyik komplex gyk:,V,+,K,iKi: Msik komplex gyk:,V,-,K,i
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
37/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 37
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 37
Megjegyzs: A diszkriminns kiszmtsnl a ngyzetre emelst egyszerszorzssal vgeztk (az SQR fggvny hasznlata helyett).
7.3.Iterci
Olyan vezrlszerkezet, amelyben egy tevkenysg ismtelten vgrehajthat.Azt a tevkenysget, amelyet az iterci vagy ms nven ciklus so-
rn ismtelten vgrehajtunk, ciklusmagnak nevezzk.Hrom alapvetciklusszervezs ltezik, ezeket ismertetjk a tovbbi-
akban.
7.3.1.Ellteszteliterci
Struktradiagram-jells
f : a ciklust vezrl felttel (logikaikifejezs)
T1 : a ciklus magja (az ismtelendtevkenysg)
Jelents: A T tevkenysg vgrehajtsa a T1tevkenysg ismtelt vgrehaj-tst jelenti gy, hogy amg teljesl a ciklust vezrl felttel, addig vgre-hajtjuk a T1ciklusmagot. A felttel rtkt a ciklusmag vgrehajtsa elttvizsgljuk.
Pszeudokd-jellswhilef
T1
Az elssort a Thelyre, mg a T1ciklusmag tevkenysgeit beljebb rjuk.
Megjegyzs A T1ciklusmagnak olyan tevkenysget is tartalmaznia kell, amely hatssal
van a ciklust vezrlfelttel rtkre (mert klnben vgtelen ismtlds,vgtelen ciklus keletkezhet ha a felttel rtke kezdetben igaz).
Ha a felttel rtke kezdetben hamis, akkor a ciklusmag egyszer semkerl vgrehajtsra, ekkor a T tevkenysg res tevkenysg.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
38/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 38
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 38
Feladat: Hatrozzuk meg egy 1-nl nagyobb egsz szm 1-tl klnbz,legkisebb osztjt!
Megolds: Mivel ilyen oszt biztosan ltezik, ha ms nem, a szm nma-ga, ezrt 2-tl kezdve sorra vesszk az egsz szmokat s megnzzk,hogy osztja-e az adott szmot vagy sem. Ha osztja, azaz megvan bennemaradk nlkl, akkor ez a szm a megolds, klnben vesszk a kvetke-zszmot.
Funkci Azonost Tpus Jelleg
A vizsglt szm N Egsz I
Az aktulis oszt O Egsz M, O
/* Legkisebb oszt */Be: NO 2whileN MOD O0
O O+1Ki: O
7.3.2.Nvekmnyes iterci
Gyakran a ciklusmagot adott szmban, ill. adott rtkeken vgiglpdelvekell vgrehajtani. Az ilyen feladatok megoldsa egy specilis elltesztelciklussal, a nvekmnyes ciklussal trtnhet.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
39/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 39
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 39
Struktradiagram-jells
T
CV KE, VE, LE
T1
*
CV: ciklusvltoz
KE: kezdrtk
VE: vgrtk
LE: lpskz
T1 : a ciklus magja (az ismtelendtevkenysg)
Jelents: A T tevkenysg vgrehajtsa a T1tevkenysg ismtelt vgrehaj-tst jelenti gy, hogy a ciklusvltoz a kezdrtktl a vgrtkig lpdel, a
megadott lpskzzel.Pontostva:
1. Kiszmoldnak a kezdrtk, vgrtk s lpskz rtkek, amelyektetszleges vals kifejezssel megadhatk (de ltalban egsz szmok).
2. A ciklusvltoz felveszi a kezdrtket.3.
A lpskz eljeltl fggen kirtkeldik a CV=VE (negatv lpskz esetn) felttel.
4.
Ha a felttel igaz, akkor vgrehajtdik a T1ciklusmag, s a ciklusvlto-
z rtke mdosul a lpskz rtkvel (CV CV+LE), majd a 3.ponttl folytatdik a vgrehajts.
5. Ha a felttel hamis, kilpnk a ciklusbl.
Pszeudokd-jellsforCV KE,VE,LE
T1
Az elssort a Thelyre, mg a T1ciklusmag tevkenysgeit beljebb rjuk.
Megjegyzs
Ha a lpskz 1, akkor azt elhagyhatjuk, azaz ha nem rjuk ki, akkor 1az alaprtelmezs.
A nulla lpskz nem megengedett. Mivel a ciklus elltesztel, gy lehet, hogy a ciklusmag egyszer sem
kerl vgrehajtsra (pl. pozitv lpskz esetn, ha a kezdrtk na-gyobb, mint a vgrtk). Ekkor a T tevkenysg res tevkenysg.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
40/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 40
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 40
Feladat: Hatrozzuk meg egy pozitv egsz szm faktorilist!
Megolds: Az n!=1*2*3*(n1)*n kplet nem hasznlhat kzvetlenl,
ezrt a kpletet egy ciklus segtsgvel kell kiszmoltatnunk. Ha a kezdet-ben 1-re lltott eredmnyhez, sorba hozzszorozzuk a szmokat (2-tl n-ig), az eredmnyt mindig visszatve az eredmnyt trol vltozba, akkora vgre ppen a kvnt szorzat ll elebben a vltozban.
Funkci Azonost Tpus Jelleg
N rtke N Egsz I
Az aktulis szorzat FAKT Egsz M, O
Az aktulis szorz I Egsz M
/* Faktorilis */Be: NFAKT 1for I 2,N
FAKT FAKT*IKi: FAKT
Megjegyzs: A faktorilis fggvny egy, az exponencilis fggvnynl isnagyobb mrtkben nvfggvny, gy csak kis nrtkekre szmolhat kipontosan n!rtke. A megolds programm rsakor ppen ezrt clszeraz eredmnyt trol (FAKT) vltozt a legnagyobb egsz tpusra vagyvals tpusra deklarlni.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
41/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 41
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 41
7.3.3.Htulteszteliterci
Struktradiagram-jells
f : a ciklust vezrl felttel (logikaikifejezs)
T1 : a ciklus magja (az ismtelendtevkenysg)
Jelents: A T tevkenysg vgrehajtsa a T1tevkenysg ismtelt vgrehaj-
tst jelenti gy, hogy amg a ciklust vezrlfelttel igazz nem vlik, ad-dig vgrehajtjuk a T1ciklusmagot. A felttel rtkt a ciklusmag vgrehaj-tsa utn vizsgljuk.
Pszeudokd-jellsrepeat
T1untilf
Az els sort a T helyre, a T1 ciklusmag tevkenysgeit beljebb, mg azutols sort az elssorral egyvonalba rjuk.
Megjegyzs A T1 ciklusmagnak olyan tevkenysget is tartalmaznia kell, amely
hatssal van a ciklust vezrlfelttel rtkre (mert klnben vgtelenismtlds, vgtelen ciklus keletkezhet ha a felttel rtke kezdet-ben hamis).
A T1ciklusmag legalbb egyszer vgrehajtdik.
Feladat: Krjnk be karaktereket az Esc billenty (vgjel) letsig s
rjuk ki minden egyes karakterre a karakter ASCII kdjt s azt, hogy an-gol bet, szmjegy vagy egyb karakter volt-e a megadott karakter!
Megolds: Az ilyen jelleg feladatoknl, ahol az adatok szma nem is-mert, radsul tetszlegesen nagy lehet, az sszes adat nem trolhat egyidben a memriban (hiszen a memriakapacits is vges), kvetkezs-kppen az adatok bekrse s feldolgozsa nem klnlhet el egymstl.Egy adatot, a bekrse utn nyomban fel is dolgozzuk, gy a kvetkezadatot ugyanabba a vltozba bekrhetjk.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
42/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 42
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 42
Funkci Azonost Tpus Jelleg
Az aktulis karakter CH Karakter M
/* Karakterek vizsglata */Ki: Karakterek vizsglata (Kilps:Esc)repeat
/* Bekrs */Be: CHifCH#27
/* Kirs */Ki: CH,ASC(CH)/* Kirtkels */if(CH>='A') AND (CH='a') AND (CH='0') AND (CH
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
43/358
Algoritmusok s adatstruktrk Strukturlt algoritmusok tervezse
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 43
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 43
Megjegyzs Az aktulis karaktert trol vltoz munka jelleg, annak ellenre,
hogy rtkt bekrjk s kirjuk az algoritmus sorn, hiszen a feladategsze szempontjbl nem szmt sem kiindul (input), sem vgered-mny (output) adatnak a benne trolt adat.
A felttelvizsglatok halmazok s az IN mvelet segtsgvel rvideb-ben is megadhatk (lsd 9.3.).
A beolvasst clszerolyan utastssal programozni, amelyik nem jele-nti meg a lettt karaktert a kpernyn (klnben a kirs miatt kt-szer jelennek meg a karakterek).
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
44/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 44
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 44
8.
Elemi feladatok
Ez a fejezet olyan feladatokat tartalmaz, amelyek megoldhatk egyszeradattpusok hasznlatval.
8.1.Prmfelbonts
Feladat: Adott egy N(>1) egsz szm, mint input adat. rjuk ki a szmprmtnyezs felbontst!Pl: 12 2*2*3
Megolds: Felhasznlva a legkisebb osztt megad algoritmust (lsd7.3.1.), a prmtnyezket a kvetkezkppen kaphatjuk meg: megkeresska szm legkisebb osztjt, kirjuk, mint prmtnyezt, osztjuk vele a sz-mot, majd jra keressk az j szmra a legkisebb osztt, egszen addig,amg az osztsok eredmnyeknt a szm eggy nem vlik. A legkisebboszt keresst kezdetben 2-tl kezdjk, majd mindig az elzoszt rt-ktl folytatjuk (hiszen a kisebb osztkat mr megvizsgltuk), s csak ak-kor lpnk a kvetkez lehetsges osztra, ha az adott oszt (mr) nemosztja a szmot. Hogy a plda szerinti eredmnyt rjuk ki, az utols osztkivtelvel, az osztk utn egy szorzsjelet is kirunk. Azt, hogy egy osztaz utols volt-e vagy sem, a szm elfogysa, 1 rtke jelzi.
Funkci Azonost Tpus Jelleg
A felbontand szm N Egsz I, M
Az aktulis oszt O Egsz M, O
/* Prmfelbonts */Be: NO 2whileN>1
ifN MOD O=0N N DIV OifN=1
Ki: Oelse
Ki: O,'*'else
O O+1
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
45/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 45
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 45
8.2.Monoton nvsorozat
Feladat: AdottN(>1) darab szm, mint input adat, aholNis input adat.
Krjk be ket s mondjuk meg, hogy az adatmegads sorrendjben mo-noton nvk-e vagy sem!
Megolds: Az ilyen jellegfeladatoknl, ahol azt kell eldntennk, hogyegy adott felttel teljesl-e az sszes adatra vagy sem, a kvetkezkppenjrhatunk el. Egy logikai vltozban troljuk az eredmnyt, azaz azt, hogyteljesl-e az adott felttel az adatsorozat elemeire vagy sem. Kezdetben avltoz rtkt igazra lltjuk, majd sorban megvizsgljuk az egyes eleme-ket. Az elsolyan elemnl, amely megsrti az adott felttelt, az eredmnyt
hamisra lltjuk, s a vizsglatot befejezhetjk, hiszen az eredmny eldlt.Ha a sorozat vizsglata utn igaz rtk marad az eredmnyvltozban,akkor a sorozat minden elemre teljeslt a megadott felttel.
Most, az adatbekrs miatt, nem llunk meg a vizsglattal az elsnem meg-felel elemnl, az sszes adatot beolvassuk s feldolgozzuk, eredmnyt ateljes adatsor beolvassa utn kzlnk. A monoton nvst olyan elem srtimeg, amely kisebb, mint az t megelz elem. A vizsglatot a msodikelemtl kezdve vgezzk, hiszen az elselem rtke tetszleges lehet.
Megjegyzs: Az adatsor elemei most ugyan vals szmok, de a monotonnvs rtelmezhetminden olyan adatra, amelyekre rtelmezettek a ha-sonltsok.
Funkci Azonost Tpus Jelleg
Az adatok szma N Egsz I
Az aktulis adat A Vals I
Az aktulis adatot megelzadat ELOZO Vals M
Monoton nv-e a sorozat NOVO Logikai M, OCiklusvltoz I Egsz M
/* Monoton nvsorozat */Be: N/* Elsadat */Be: A/* Kezdrtkek */NOVO igazELOZO A
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
46/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 46
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 46
/* Tbbi adat */forI 2,N
Be: A
ifA
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
47/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 47
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 47
kvnt tlag. Termszetesen, ha nem volt pozitv adat, akkor az tlaguksem rtelmezhet.
Funkci Azonost Tpus JellegAz adatok szma N Egsz I
Az aktulis adat AKT Vals I
A pozitv adatok maximuma MAX Vals M, O
A pozitv adatok tlaga ATL Vals O
A pozitv adatok darabszma DB Egsz M
A pozitv adatok sszege OSSZ Vals M
Ciklusvltoz I Egsz M
/* Pozitv adatok maximuma, tlaga */Be: N/* Kezdrtkek */DB OSSZ 0/* Adatbekrs, feldolgozs */forI 1,N
Be: AKTifAKT>=0
DB DB+1OSSZ OSSZ+AKT
ifDB=1MAX AKT
else ifAKT>MAXMAX AKT
/* Eredmnykirs */ifDB=0
Ki: Nem volt pozitv adat!else
ATL OSSZ/DBKi: A pozitv adatok maximuma:,MAXKi: A pozitv adatok tlaga:,ATL
8.4.exhatvnysora
Feladat: Kzeltsk exrtkt a hatvnysornak felhasznlsval!
Megolds: Mint ismeretes
=
=0 !n
nx
n
xe . Ez az sszeg termszetesen nem
szmolhat a vgtelensgig, valahol abba kell hagyni, tekintettel idnkvgessgre s a szmtgp trolsi pontossgra. Csak addig sszegznk,
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
48/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 48
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 48
amg az ltalnos tag egy megadott (nullnl nagyobb) pontossgnl ab-szolt rtkben kisebb nem lesz. Ez elbb utbb bekvetkezik, mivel az
ltalnos tag (xn
/n!) abszolt rtke hatrrtkben a 0-hoz tart.Az ltalnos tag kiszmtsa nem trtnhet gy, hogy kiszmoljuk a szm-llt is, meg a nevezt is s elosszuk ket egymssal, hiszen mindkt rtkhamar kicsordulna a szmtgp brzolsi pontossgbl (nem is beszl-ve az ismtelt vgrehajtsokrl), ezrt az ltalnos tag rtkt lpsenknt,az elz tag rtkbl szmoljuk ki, egy egyszertrttel (x/n) val szor-zssal. Az sszegzst az els kt tag sszegvel kezdjk, hogy az ered-mnyben xis szerepeljen.
Megjegyzs Az, hogy az ltalnos tag mr elrte a megadott pontossgot, mg nem
felttlenl jelenti azt, hogy exrtkt is ilyen pontossggal kzeltjk. Az exponencilis fggvnnyel kiszmolt rtk sem abszolt pontos, az
is csak egy kzeltrtk.
Funkci Azonost Tpus Jelleg
x, ahol a fggvnyrtket kzeltjk X Vals I
A pontossg EPSZ Vals IA kzelts nlpsszma N Egsz M, O
A kzeltrtk OSSZ Vals M, O
Az aktulis tag rtke AKT Vals M
/* Az exponencilis fggvny kzeltse */Be: X,EPSZ/* Kezdrtkek */N 1AKT XOSSZ 1+AKT/* Kzelts */whileABS(AKT)>=EPSZ
N N+1AKT AKT*X/NOSSZ OSSZ+AKT
/* Eredmnykirs */Ki: N rtke:,NKi: A kzeltrtk:,OSSZKi: A pontos rtk:,EXP(X)
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
49/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 49
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 49
8.5.Gykkeress intervallumfelezssel
Feladat: Hatrozzuk meg egyf(x)=0egyenlet egy gykt, egy adott [a, b]
intervallumban, adott pontossggal!Megolds: Feltesszk, hogy az f(x)fggvny folytonos az [a, b]interval-lumban s az intervallum kt vgpontjban ellenttes eljel. Ebben azesetben ugyanis biztosan van legalbb egy gyk az [a, b]intervallumban saz intervallumfelezses megoldsi mdszer alkalmazhat. Felezzk meg azintervallumot! Ha a felezpontban felvett fggvnyrtk 0, akkor szeren-csnk van, megkaptuk a keresett gykt, ha nem, vizsgljuk meg, hogymelyik vgpontban felvett fggvnyrtkkel azonos eljel. Ha f(a)-val
egyezeljel, akkor hagyjuk el az intervallum elsfelt, haf(b)-vel, akkora msodikat, ha 0, akkor mindkt felt, a felezpontot kivve. A gyk biz-tosan a megmarad intervallumban lesz. Az j intervallumra ismteljkmeg a fenti tevkenysgeket egszen addig, amg az intervallum hosszarvidebb nem lesz a megadott (nullnl nagyobb) pontossgnl. Ebben azesetben a maradk intervallum brmelyik pontjt elfogadhatjuk (pl. a fele-zpontot) az egyenlet gykeknt.
Megjegyzs: A konkrtf(x)fggvny a forrsprogramba berand, a mell-
kelt (lsd fggelk) megoldsban ez azf(x)=sin(x)fggvny.
Funkci Azonost Tpus Jelleg
Az intervallum kezdpontja A Vals I
Az intervallum vgpontja B Vals I
A kzelts pontossga EPSZ Vals I
A kiszmtott kzeltrtk GYOK Vals O
A vizsglt intervallum kezdpontja XK Vals M
A vizsglt intervallum vgpontja XV Vals M
A vizsglt intervallum felezpontja XF Vals M
Fggvnyrtk a kezdpontban YK Vals M
Fggvnyrtk a vgpontban YV Vals M
Fggvnyrtk a felezpontban YF Vals M
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
50/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 50
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 50
/* Gykkeress intervallumfelezssel *//* Adatbekrs */Be: A,B,EPSZ
/* Kezdrtkek */XK AXV BYK f(A)YV f(B)/* Kzelts */whileXV-XK>EPSZ
/* Felezpont */XF (XK+XV)/2YF f(XF)/* Cskkents */
ifYK*YF
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
51/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 51
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 51
Formalizlva, ha az intervallumot n egyenl rszre osztjuk, az i-edikosztspontban felvett fggvnyrtket yi -vel jelljk, akkor a trapzok
sszege gy rhat fel:)
2(
1
1
0
=
++
=n
i
in y
yyhT
aholy0az a-ban,yna b-ben felvett fggvnyrtk s h=(ba)/n.
8.1. bra.A trapz-mdszer.
Megjegyzs: A konkrtf(x)fggvny a forrsprogramba berand, a mell-kelt (lsd fggelk) megoldsban ez azf(x)=3x2fggvny.
Funkci Azonost Tpus Jelleg
Az intervallum kezdpontja A Vals I
Az intervallum vgpontja B Vals I
A kzelts pontossga EPSZ Vals I
A beoszts finomsga N Egsz MA rszintervallumok hossza H Vals M
Az aktulis terletsszeg T Vals M, O
Az elsill. az elzterletsszeg E Vals M
Fggvnyrtk az ahelyen Y0 Vals M
Fggvnyrtk a bhelyen YN Vals M
Ciklusvltoz I Egsz M
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
52/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 52
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 52
/* Hatrozott integrl kzeltse trapz-mdszerrel *//* Adatbekrs */Be: A,B,EPSZ
/* Kezdrtkek */Y0 f(A)YN f(B)T (B-A)*(Y0+YN)/2/* Kvetkezbeoszts */N 2/* Kzelts */repeat
/* Elzterletsszeg */E T/* Rszintervallumok hossza */
H (B-A)/N/* Trapzok terletsszege */T (Y0+YN)/2forI 1,N-1
T T+f(A+I*H)T T*H/* Kvetkezbeoszts */N 2*N
untilABS(T-E)
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
53/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 53
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 53
Az elzfeladat segtsgvel rjuk ki egy adott [a, b]intervallumba essszes relatv prm szmprokat!
Adott npozitv egsz szmra rjuk ki a Fibonacci sorozatelsn elemt! Akpzs mdszere: az elskt elem rtke 1, ezutn minden kvetkezaz elzkettsszege (Pl. n=6: 1, 1, 2, 3, 5, 8).
Oldjuk meg az ax+by=cs dx+ey=fegyenletekbl ll, ktismeretlenes,lineris egyenletrendszert, ahol a, b, c, d, e, frtkek vals szmok!
AdottNdb szm, mint input adat, aholNis input adat. Krjk be azadatokat s mondjuk meg, hogy hny elembl ll a leghosszabb mono-ton nvelemsorozat!
Pl.N=5 2, 1, 3, 2, 1 2
AdottNdb szm, mint input adat, aholNis input adat. Krjk be azadatokat s hatrozzuk meg az albbiakat!
Az adatok hny szzalka pozitv. Az adatok a beolvass sorrendjben szmtani sorozatot alkot-
nak-e vagy sem. Az tlagukat gy, hogy a maximlis s minimlis rtk egy-egy
elfordulst kihagyjuk az tlagszmtsbl.
Adott valamennyi szmadat, mint input adat. Az adatok szmt nem
ismerjk, az adatsor vgt a 0 vgjel (nem adat) jelzi. Krjk be az ada-tokat s hatrozzuk meg az albbiakat!
Ngyzetes tlag (ngyzetsszegbl vont ngyzetgyk, osztva azadatok szmval).
Az adatok a beolvass sorrendjben mrtani sorozatot alkot-nak-e vagy sem.
AdottNdb pont a skon a koordintival, mint input adat, aholN isinput adat. Krjk be az adatokat s hatrozzuk meg az albbiakat!
Az adatok slypontja (a pontokXkoordintinak tlaga adja aslypontXkoordintjt, az Ykoordintk tlaga pedig a sly-pont Ykoordintjt).
Az origtl legtvolabb lv pont (feltesszk, hogy csak egyilyen pont van a pontok kztt).
AdottNdb pont a skon a koordintival, mint egyNcscs konvexsokszg cscspontjai valamely krljrsi irny szerint, aholNis inputadat. Krjk be az adatokat s hatrozzuk meg a sokszg kerlett!
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
54/358
Algoritmusok s adatstruktrk Elemi feladatok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 54
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 54
Ksztsk el az y=sinx fggvny rtktblzatt adott [a, b] interval-lumban, adott lpskzzel a szmtgp monitorn gy, hogy minden
telert kpernyutn vrjunk billentyletsre! Adott xpozitv szmhoz hatrozzuk meg azt a legkisebb negsz sz-
mot, amelyre igaz, hogy 1+1/2+1/3++1/n>=x. (A sor monotonnvs nem korltos, teht elvileg van megolds.)
Ksztsnk algoritmust egy f(x) fggvny, adott [a, b] intervallumonvett kzelt integrljnak meghatrozsra a tglalap-mdszerrel, azintervallum egyenletes beosztsnak fokozatos finomtsval, egszenaddig, amg az als s felskzeltsszeg eltrse kisebb nem lesz,mint egy adott >0 szm. Felttelezhetjk, hogy a fggvny az inter-
vallumon monoton nv vagy cskken, gy rszintervallumonkntegyrtelmen (az intervallum vgpontjaiban vett fggvnyrtkekkel,mint magassgokkal) kpezhetnk kt, egy kisebb s egy nagyobb ter-lettglalapot. A kisebb tglalapok terletsszege az als, a nagyobba-k a felskzeltsszeget adjk.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
55/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 55
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 55
9.
sszetett adattpusok
Az eddig megismert adattpusokkal ellenttben, ahol egy vltozban csakegy adatot trolhatunk egy idben, az sszetett adattpusok segtsgveltbb adat egyttes kezelsre is lehetsgnk nylik. A kvetkez fejeze-tekben ezekkel az adattpusokkal ismerkednk meg.
9.1.Tmbk
A tmb egy ltalnosan s gyakran hasznlt eszkz a szoftverfejlesztk,programozk krben, mivel a tmbkkel knyelmesen kezelhetnk tbb,
azonos tpus adatot. Az adatok elrsre, a tmbk egy elemnek kiv-lasztsra sorszmokat, ms nven indexeket hasznlunk.Ha ez elemeket egy sorszmmal azonostjuk, akkor egydimenzis
tmbrl, ha kt sorszmmal, akkor ktdimenzis tmbrl s gy tovbb,ha ndb sorszmmal azonostjuk, akkor ndimenzis tmbrl beszlnk.Egy tmb egy elemnek kivlasztshoz teht pontosan annyi index szk-sges, ahny dimenzis az adott tmb.
Ahogy az egyszeradattpusok esetn is megklnbztettk az adatot(pl. 3) az t trol vltoztl (pl. I) s annak tpustl (pl. egsz), itt is
kitrnk ezek klnbzsgre. A tmb elnevezs ugyanis, a rvidsgemiatt, mind a hrom esetben hasznlatos, gy a tmb lehet: Tmbadat: amely egydimenzis tmb esetn egy adatsornak, vagy ma-
tematikai fogalommal egy vektornak, ktdimenzis tmb esetn egyadattblzatnak vagy mtrixnak felel meg.
Tmb adattpus: amely definilja a tmb dimenziit s a tmb elemeinektpust.
Tmbvltoz: amelyben az adatok troldnak. Egy elem kivlasztsval,azaz a tmbvltoz indexelsvel egy, a tmb elemtpusval megegye-ztpus vltozt hivatkozunk.
A tmbk indexelsre 1-tl kezddsorszmokat hasznlunk, azaz min-den dimenzi legkisebb indexe 1. Az egyes dimenzik legnagyobb indext(a tmb mrett ill. mreteit), ha ez a feladat szempontjbl lnyeges, dek-larlskor adjuk meg. Ha az egyszersg kedvrt ezt elhagyjuk, akkor amegolds programm rsakor olyan tmbt kell hasznlnunk, amelybenelfrnek az adataink.
A programnyelvek ltalban nem korltozzk a dimenzik szmt, az-az hasznlhatunk hrom, ngy, stb. dimenzis tmbket is, a gyakor-
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
56/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 56
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 56
latban (gondoljunk pldul a papron trtn informcicserre) azegydimenzis (adatsor) s ktdimenzis (adattblzat) tmbk a leggyako-
ribbak, mi is ezeket trgyaljuk.
9.1. bra.Tmbk s elemeik.
DeklarlsA tmbvltozkat (csakgy, mint az egyszervltozkat) hasznlat elttdeklarlni kell, azaz definilnunk kell a tmb dimenzit (az indexek felshatrait) s a tmb elemeinek tpust.
A fordtprogram ezek alapjn lefoglalja a szksges mret (elemek
szma*egy elem mrete) memriaterletet a vltoz szmra.Az adatokat ltalban ellrl kezdve, folyamatosan troljuk a tmbben,az elsadatot az elselemben, a msodikat a msodikban s gy tovbb.
Termszetesen azt, hogy hny adatot trolunk a tmbben, adminiszt-rlnunk kell.
Megjegyzs A Pascal nyelv nemcsak az egsz szmokkal trtnindexelst engedi
meg, hanem tetszleges, n. sorszmozott tpus adattal is indexelhe-
tnk (pl. karakterrel). A karakterek indexknt val felhasznlst a Cnyelv is megengedi, ekkor a karakter ASCII kdja adja a megfelelin-dexet. Ezzel a lehetsggel bizonyos feladatok knnyebben, egysze-rbben programozhatk, de megoldsainkban az egyszersg kedvrtezeket nem hasznljuk (nem engedjk meg).
A C nyelv a tmbket 0-tl kezdden indexeli, amit a megoldsokprogramm rsakor figyelembe kell vennnk.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
57/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 57
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 57
Vannak olyan feladatok (lsd 9.1.2.), ahol egy bizonyos adat csak atmb egy bizonyos elemben trolhat, ekkor az ellrl feltlttt, fo-
lyamatos adattrols s darabszm adminisztrls nem alkalmazhat. A tmbk elemei sszetett adattpusak is lehetnek (pl. halmazok,
rekordok, sztringek). Ha egy egydimenzis tmb elemeinek tpusaszintn egy tmb, akkor ezt nem tmbkbl ll tmbknt, hanemegy ktdimenzis tmbknt fogjuk hasznlni.
Egy tmb deklarlhat az adatszerkezeti tblzatban, de ha tbbszr isszksg van ugyanolyan tmbkre, clszereltte, kln tpusknt dekla-rlni. A kvetkezpldban mindkt deklarlst bemutatjuk.
KonstansSORMAX 10OSZLMAX 20
TpusMATRIX Ktdimenzis egsz tmb[SORMAX, OSZLMAX]
Funkci Azonost Tpus Jelleg
Egy adatsor A Egydimenzis
vals tmb
I
Az adatsor adatainak szma N Egsz I
Egy tslott szelvnye L Egydimenzisegsz tmb[5]
M, O
Egy mtrix B MATRIX I, M, O
A mtrix sorainak szma S Egsz I
A mtrix oszlopainak szma O Egsz I
Az A vals tmb mrett nem definiltuk (ha a feladat szempontjbl amret nem fontos, akkor elhagyhat), az L tmbben t darab lottszmot,mg a B tmbben max. 10*20 db egsz szmot trolhatunk.
A ktdimenzis tmbk els indext a sorindexnek, a msodikat azoszlopindexnek szoks hasznlni.
HivatkozsA tmbk elemeire a tmbvltoz azonostja utn, szgletes zrjelbetett, egymstl vesszvel elvlasztott indexekkel hivatkozunk. Az indexektetszleges egsz kifejezsek lehetnek.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
58/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 58
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 58
Pl. A[1] az A tmb elseleme,A[I+1] az A tmb I+1. eleme,
B[S, 2] a B tmb S. sornak 2. eleme.Egy indexkifejezs eredmnynek kicsordulsa a hozz tartoz dimen-zi tartomnybl termszetesen hibnak szmt, hibs programot ered-mnyez s programlellst is kivlthat.
KonstansTmbk esetn is megengedjk a konstansok hasznlatt, amellyel tbb,azonos tpus konstanst deklarlhatunk.Pl. SZINEK=(Treff, Kr, Kr, Pikk)
MTX=((1,2,3),(4,5,6))A fenti pldkban egy ngyelem, sztringekbl ll, egydimenzis s egy23-as, egsz szmokbl ll, ktdimenzis tmbkonstanst deklarltunk.A tmbelemekre val hivatkozs ugyangy trtnik, mint tmbvltozk-nl, azaz pl. a SZINEK[1] hivatkozssal a Treff sztring, az MTX[2,3]hivatkozssal a 6 rhetel.
MveletekA tmbkre nem rtelmeznk mveleteket, mg az egyes tmbelemekkelminden olyan mvelet megengedett, ami a tmb elemtpusra definilt.
Megjegyzs A C nyelvben egy tbbdimenzis tmb egy elemre val hivatkozs-
kor minden indexet kln szgletes zrjelbe kell tenni. Az ltalunkhasznlt, egyszerbb jells (az indexek vesszvel elvlasztva egy szg-letes zrjelben) a C nyelvben ms jelentssel br.
A megoldsok programm rsra hasznlt, DOS platform fejleszt-rendszerek (a memriacmzsbl fakadan) korltozzk a vltozk, gya tmbvltozk maximlis mrett is. Ez a korlt 64 Kbjt, gy ezt fi-
gyelembe kell vennnk a tmbk hasznlatnl.
A pldinkban szerepl tmbk maximlis mrete fordtsi idbenmeghatrozdik, azaz a program futsakor ezek mr nem vltoztatha-tk. Az olyan tmbket, amelyek mrete futs kzben llthat, dinami-kus tmbkneknevezzk (lsd 13.1.). Az ilyen tmbk mgtt valj-ban a dinamikus adatstruktrk, ill. a dinamikus trkezels rejtzik.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
59/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 59
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 59
9.1.1.tlagnl nagyobb elemek
Feladat: AdottNdb szm, mint input adat. Krjk be ket s rjuk ki az
tlagnl nagyobb adatokat! Az adatok szma is input adat, rtke legfeljebb100.
Megolds: A feladat megoldshoz ktszer kell az adatsoron vgigmen-ni, egyszer, amikor az tlaghoz sszegezzk ket, majd amikor az tlagnlnagyobb elemeket kirjuk. Az adatokat ezrt egy tmbben troljuk, gy azadatok bekrse s feldolgozsa elklnlhet egymstl. Az adatok bek-rsekor elszr az adatok szmt krjk be, majd egy nvekmnyes ciklus-sal magukat az adatokat. Ezeket egy tmbben troljuk, ellrl kezdve fo-lyamatosan, az i. adatot a tmb i. elemben. A tmb deklarlt mrett azadatok maximlis szma adja.
KonstansNMAX 100
Funkci Azonost Tpus Jelleg
Az adatok szma N Egsz I
Az adatok A Egydimenzis valstmb[NMAX]
I
Az adatok sszege OSSZ Vals M
Az adatok tlaga ATL Vals M
Ciklusvltoz I Egsz M
/* tlagnl nagyobb elemek *//* Adatbekrs */Be: NforI 1,N
Be: A[I]
/* tlagszmols */OSSZ 0forI 1,N
OSSZ OSSZ+A[I]ATL OSSZ/N/* Eredmnykirs */forI 1,N
ifA[I]>ATLKi: A[I]
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
60/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 60
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 60
9.1.2.Kockadobsok gyakorisga
Feladat: Input adatknt adott egy 6 oldal, szablyos dobkockval dobott
szmsorozat. A dobsok szmt nem ismerjk, ez tetszlegesen nagy lehet, asorozat vgt a 0 szm (mint vgjel) jelzi. Krjk be az adatokat s ksztsnkgyakorisgi tblzatot az egyes dobsok elfordulsi darabszmrl!
Megolds: Mivel az adatok szma tetszlegesen nagy lehet, magukat adobott szmokat nem tudjuk tmbben trolni (hiszen mekkorra deklarl-nnk), de erre nincs is szksg. Az eredmnyt fogjuk tmbben trolni,mgpedig egy olyan 6 elemtmbben, ahol az i. helyen az i, mint dobottszm darabszmt gyjtjk. A darabszmokat kezdetben nullra lltjuk,majd egy dobs bekrsekor a megfeleltmbelem rtkt, azaz a hozztartoz darabszmot megnveljk eggyel. A dobssorozat ill. adatmegadsvgn (a 0 vgjel berkezse utn) kirjuk az eredmnyeket. A bekrst egyhtultesztel ciklussal vgezzk, hiszen legalbb egy adatot be kell kr-nnk. A vgjelet nem dolgozzuk fel kockadobsknt, az adatbekrst adobs sorszmnak kirsval segtjk.
KonstansN 6
Funkci Azonost Tpus JellegAz egyes dobsok darabszma DB Egydimenzis egsz tmb[N] M, O
Az aktulis dobs A Egsz I
Segdvltoz I Egsz M
/* Kockadobsok gyakorisga */Ki: Kockadobsok (1-,N,) gyakorisga (Kilps:0)/* Kezdrtkek */forI 1,N
DB[I] 0
I 0repeat/* Bekrs */I I+1Ki: I, . dobs:Be: AifA0
DB[A] DB[A]+1untilA=0Ki: GyakorisgokforI 1,N
Ki: I,DB[I]
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
61/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 61
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 61
9.1.3.rtk trlse adatsorbl
Feladat: Trljnk ki egy N elem adatsorbl egy adott rtket, ahny-
szor csak elfordul!Megolds: Az adatsor trolsra tmbt hasznlunk. A vizsglatot atmb elselemnl kezdjk, s azN-ediknl fejezzk be. Ha az aktulisanvizsglt elem rtke megegyezik a trlendrtkkel, akkor azt egyszerentugorjuk, vesszk a kvetkez elemet, klnben elre msoljuk azrtket a tmbben. gy a tmb elejre kerl majd a kvnt (az adott rt-ket mr nem tartalmaz) adatsor, az adatok eredeti sorrendjben. Az el-remsolt rtkeket szmoljuk (ezzel a vgn az eredmnytmb elemeinekszmt kapjuk), gy a soronkvetkez, elremsoland elem j helyt isismerni fogjuk, hiszen az ppen eggyel nagyobb.
Funkci Azonost Tpus Jelleg
Az adatsor A Egydimenzis, tetsz-leges elemtpus tmb
I, M, O
Az adatok szma N Egsz I, O
A trlendrtk X Az A tmb elemeivelmegegyeztpus
I
Az aktulisan vizsglt tmb-elem indexe I Egsz M
Az elremsolt elemek szma J Egsz M
/* rtk trlse adatsorbl */TOROL(A,N,X)
/* Kezdrtk */J 0/* Elremsols */forI 1,N
ifA[I]XJ J+1A[J] A[I]
/* Darabszm */N J
Megjegyzs: A tetszleges elemtpus jelen esetben azt jelenti, hogy azalgoritmus mkdik az sszes olyan adatsorra, amelynek elemeire rtelme-zettek a hasonlts mveletek. A konkrt elemtpust a feldolgozand adat-sor elemeinek tpusa hatrozza meg.
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
62/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 62
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 62
9.1.4.Eratosztenesz szitja
A most ismertetsre kerl, prmszmok ellltsra szolgl algoritmust
Eratosztenesz idszmtsunk eltt kb. 200 vvel definilta:rjuk fel az 1-nl nagyobb termszetes szmokat egy tetszlegesennagy Kkorltig. A legkisebb szm 2, jelljk meg s trljk a 2-vel oszt-hatkat a 2 kivtelvel. A megmarad, jelletlen szmok kzl a legkisebb3, ezzel vgezzk el ugyanezt az eljrst: jelljk meg s trljk a 3-maloszthatkat a 3 kivtelvel. A megmarad, jelletlen szmok kzl a legki-sebbel mindig elvgezve az eljrst, elbb-utbb elfogynak a szmok,vagy trljk ket, vagy megjelljk. A megjellt, a szitn mintegy fenn-marad szmok ppen a K-nl nem nagyobb prmszmok.
Feladat: Ksztsnk megoldst a fenti algoritmus megvalstsra tmbsegtsgvel!
Megolds: Egy olyan logikai tmbt fogunk hasznlni a megolds sorn,amelyben a tmb i. eleme azt fejezi ki, hogy az imint szm mg fent van-ea szitn, vagy mr trltk. A szmok megjellse nem szksges, mertminden szmot csak egyszer vesznk figyelembe (lsd a szitls klscik-lust). Az egyszersg kedvrt a tmb K elemlesz, teht az elselemet(az 1-nek megfelelrtket) nem hasznljuk.
Megjegyzs: A K korlt rtke termszetesen most nem lehet tetszlege-sen nagy, rtkt a tmb helyfoglalsra vonatkoz (64Kb-os) korlt limi-tlja.
Konstans:K 1000 /* Eddig hatrozzuk meg a prmszmokat */
Funkci Azonost Tpus JellegA felrt szmokat reprezentl tmb A Egydimenzislogikai tmb[K]
M, O
Az aktulisan vizsglt szm P Egsz M
A tbbszrsk trlshez I Egsz M
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
63/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 63
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 63
/* Eratosztenesz szitja tmbbel *//* Szmok felrsa */forI 2,K
A[I] igaz/* Szitls */for P 2,K
/* A P szm prmszm? */ifA[P]
/* Igen, trljk a tbbszrseit */for I 2*P,K,P
A[I] hamis/* Kirs */forI 2,K
ifA[I]
Ki: I
9.1.5.Mtrixsszegek
Feladat: Adott egyNM-es szmmtrix. Hatrozzuk meg a mtrix sorai-nak, oszlopainak, valamint az sszes elemnek az sszegt!
Megolds: A mtrix elemein egyszer, sorfolytonosan (teht elszr azelssornak elemein nvekvoszlopindex szerint, azutn a msodik so-ron, s gy tovbb) vgighaladva gyjteni tudjuk mind a sorok, mind azoszlopok, mind a teljes mtrix sszegt. Mivel Ndb sor van, ezrt Ndb
sorsszeg keletkezik, gy azokat egy egydimenzis tmbben troljuk. Azoszlopsszegekkel hasonl a helyzet, csak ottMdb oszlopsszeg keletke-zik. A teljes sszeg gyjtsre elegendegy egyszervltoz. Itt nem ma-gukat az elemeket fogjuk sszegezni, hanem a sorsszegeket, (lehetne azoszlopsszegeket is) hiszen gy cskkenthetjk az sszeadsok szmt.
Megjegyzs: A mtrix maximlis mreteire konstansokat definilunk, meg-knnytve ezzel az eredmnytmbk deklarlst.
KonstansNMAX 10 /* Sorok maximlis szma */MMAX 10 /* Oszlopok maximlis szma */
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
64/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 64
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 64
Funkci Azonost Tpus Jelleg
A feldolgozand mtrix A Ktdimenzis vals
tmb[NMAX, MMAX]
I
A mtrix sorainak szma N Egsz I
A mtrix oszlopainak szma M Egsz I
A sorsszegek SOR Egydimenzis valstmb[NMAX]
M, O
Az oszlopsszegek OSZL Egydimenzis valstmb[MMAX]
M, O
A teljes mtrix sszeg OSSZ Vals M, O
Segdvltozk I, J Egsz M/* Mtrixsszegek */OSSZEGEK(A,N,M,SOR,OSZL,OSSZ)
/* Kezdrtkek */forJ 1,M
OSZL[J] 0OSSZ 0/* sszegzs */forI 1,N
SOR[I] 0
forJ 1,MSOR[I] SOR[I]+A[I,J]OSZL[J] OSZL[J]+A[I,J]
OSSZ OSSZ+SOR[I]
9.1.6.Oszlopok trlse mtrixbl
Feladat: Adott egy NM-es mtrix. Trljk ki a mtrix azon oszlopait,amelyekben minden elem azonos!
Megolds: Sorban megvizsgljuk a mtrix oszlopait. Ha egy oszlop min-
den eleme egyforma, akkor kitrljk a mtrixbl. A trls egyik lehets-ges mdja az, hogy az utols oszloppal fellrjuk a trlend oszlopot,majd cskkentjk az oszlopok szmt eggyel. Ez a trls azonban tren-dezi a mtrix oszlopait. Ahhoz, hogy a megmarad oszlopok sorrendjene vltozzon meg (amelyik elbb volt az eredeti mtrixban, az eredmnymtrixban is elrbb legyen), a trlst a trlendoszlop mgtti oszlopokelremsolsval vgezzk. Elszr a trlendoszlop mgtti oszlopotmsoljuk egy oszloppal elrbb, majd az azutnit, s gy tovbb, legvglaz utolst. Ezutn cskkentjk az oszlopok szmt eggyel. Mindkt trls-
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
65/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 65
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 65
fajta esetn, ha ppen az utols oszlop a trlend, akkor termszetesenelegend az oszlopszm cskkentse (hiszen ekkor nem kell elemeket
mozgatnunk a mtrixban). Annak eldntse, hogy egy oszlop csupa egy-forma elemeket tartalmaz-e vagy sem, szintn elvgezhet tbbflekp-pen. Hasonlthatjuk pldul a szomszdos elemeket, de hasonlthatjuk azelemeket az oszlop egy adott (pl. legels) elemhez (ahogy azt a megol-dsban tettk). Ha tallunk eltrelemprt, akkor az oszlopban nem lehetminden elem egyforma.
Funkci Azonost Tpus Jelleg
A feldolgozand mtrix A Ktdimenzis, tetsz-
leges elemtpus tmb
I, O
A mtrix sorainak szma N Egsz I
A mtrix oszlopainak szma M Egsz I, O
Az aktulisan vizsglt oszlopindexe
J Egsz M
A vizsglt oszlop elemei egy-formk-e
EGYF Logikai M
Az aktulisan elremsolandoszlop indexe
K Egsz M
Segdvltoz I Egsz M
/* Egyforma elemoszlopok trlse */TOROL(A,N,M)
J 1whileJ
-
7/26/2019 Algoritmusok_es_adatstrukturak.pdf
66/358
Algoritmusok s adatstruktrk sszetett adattpusok
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 66
A dokumentum hasznlata|Tartalomjegyzk|Fggelk Vissza 66
Megjegyzs A tetszleges elemtpus jelen esetben azt jelenti, hogy az algoritmus
mkdik az sszes olyan mtrixra, amelynek elemeire rtelmezettek ahasonlts mveletek. A konkrt elemtpust a feldolgozand mtrixelemeinek tpusa hatrozza meg.
Vegyk szre, hogy az oszlopokon halad klsciklus nem nvekm-nyes, gy mindig az aktulis oszlopszmhoz hasonltunk, hiszen egyoszlop trlsvel az oszlopok szma is megvltozik.
Az adott oszlop (J) elemeinek egyezst vizsgl ciklusban az EGYFvltoznak egy hasonlts eredmnyt adtuk rtkl.
Az utols oszlop (M.) trlsekor nem trtnik elemmozgats (a Kciklusvltozj nvekmnyes ciklus kezdrtke ekkor nagyobb, minta vgrtke).
Ha egy oszlopot kitrlnk, akkor nem lpnk tovbb egy oszloppal,hiszen az elremsolssal helyre lp oszlopot is meg kell vizsgl-nunk.
9.1.7.Feladatok
Adott egy pozitv egsz szm, mint egy forintban kifizetendpnzsz-
szeg. Fizessk ki a legkevesebb cmlet felhasznlsval!Pl. 204005 20000: 10db, 2000: 2db, 5: 1 db
AdottNdb pozitv egsz szm, mint forintban kifizetendpnzssze-gek. Hatrozzuk meg, hogy a teljes kifizetskhz, az egyes cmletek-bl hny darab kell, ha a legke