Prgramzási tételek Egy srzathz egy érték hzzárendelése Összegzés tétele Adtt egy N elemű számsrzat: A(N). Számljuk ki az elemek összegét! S:=0 S:=S+A(I) Eldöntés tétele N elemű srzat és egy a srzatn értelmezett T tulajdnság. Van-e a srzatnak legalább egy T tulajdnságú eleme? Ciklus amíg I<=N és A(I) nem T tulajdnságú VAN:=I<=N Eljárás vége ("VAN" egy lgikai váltzó, amely akkr és csak akkr igaz, ha I<=N) Hasnló feladat: igaz-e, hgy a srzat minden eleme T tulajdnságú? Ciklus amíg I<=N és A(I) T tulajdnságú IGAZ:=I>N Eljárás vége Kiválasztás tétele Adtt egy N elemű srzat, egy - a srzat elemein értelmezett - T tulajdnság, és tudjuk, hgy a srzatban van legalább egy T tulajdnságú elem. A feladat ezen elem srszámának meghatárzása. 1
Ciklus amíg A(I) nem T tulajdnságú SORSZ:=I Eljárás vége Megszámlálás tétele Adtt egy N elemű srzat és egy - a srzat elemein értelmezett - T tulajdnság. Feladat a T tulajdnsággal rendelkező elemek megszámlása. S:=0 Ha A(I) T tulajdnságú akkr S:=S+1 keresések Lineáris keresés tétele Általáns feladat: N elemű srzat; srzat elemein értelmezett T tulajdnság. Van-e T tulajdnságú elem és ha van, akkr mi a srszáma. (Eldöntés és kiválasztás együtt.) Ciklus amíg I<=N és A(I) nem T tulajdnságú VAN:=I<=N Ha VAN akkr SORSZ:=I Lgaritmikus keresés tétele Általáns feladat: N elemű rendezett srzat; egy keresett elem (X). Szerepel-e a keresett elem a srzatban és ha igen, akkr mi a srszáma. Kihasználjuk, hgy a srzat rendezett, így el tudjuk dönteni, hgy a keresett elem az éppen vizsgált elemhez képest hl helyezkedik el. Al, F: intervallum alsó és felső végpntjai. 2
Al:=1 F:=N Ciklus K:=INT((Al+F)/2) Ha A(K)<X akkr Al:=K+1 Ha A(K)>X akkr F:=K-1 amíg Al<=F és A(K) X VAN:=Al<=F Ha VAN akkr SORSZ:=K (amíg Al>F vagy A(K)=X) Megjegyzések: azért hívják lgaritmikus keresésnek, mert a ciklus lépésszáma kb. lg N skkal hatéknyabb rendezett srzatra, mint a lineáris keresés Maximum kiválasztás tétele Srzat legnagybb elemének indexe. INDEX:=1 Ciklus I=2-tıl N-ig Ha A(INDEX) < A(I) akkr INDEX:=I Minimumkiválasztás tétele Srzat legkisebb elemének indexe. ÉRTÉK:=A(1) Ciklus I=2-tıl N-ig Ha A(I) < ÉRTÉK akkr ÉRTÉK:=A(I) 3
Egy srzathz egy srzat hzzárendelése Kiválgatás tétele Egy N elemű srzat összes T tulajdnságú elemét kell meghatárzni. A kiválgattt elemek srszámait egy B() vektrban gyűjtjük. J:=0 Ha A(I) T tulajdnságú, akkr J:=J+1 B(J):=I Rendezések (rendezési szempntk) Rendezési eljárás kiválasztásánál szempntk: tárigény végrehajtási idő összehasnlításk, mzgatásk, cserék száma adtt gépi környezet. Hatéknysági mutatók: Tárigény: rendezendő adatk száma legyen. Összehasnlításk száma: azn relációk, ahl egyik ldaln rendezendő adat áll. Mzgatásk száma: azn értékadó utasításk, melyekben legalább az egyik ldaln rendezendő adat áll. Végrehajtási idő: mért idő egy knkrét prgrammal. Rendezés közvetlen kiválasztással Rendezés közvetlen kiválasztással Módszer lényege: Rendezendő számk az A vektr elemei. Első menetben az A(1)-et összehasnlítjuk az összes elemmel és ha kisebbet találunk nála, akkr felcseréljük. Így az első menet végére a legkisebb elem lesz az első helyen. Ezután ezt ismételjük az A(2)-es elemmel, stb. N-1 menet után rendezett lesz a srzat. 4
Ciklus I=1-tıl N-1-ig Ciklus J=I+1-tıl N-ig Ha A(J) < A(I) akkr C:=A(J) A(J):=A(I) A(I):=C Hatéknysági mutatók: Tárigény: N+1 Összehasnlításk száma: N*(N-1)/2 Mzgatásk száma: 0-tól 3*N*(N-1)/2-ig lehetséges Végrehajtási idő: 2980 s (N=500) Rendezés minimum-kiválasztással Módszer lényege: Felesleges cserék kiküszöbölése érdekében két segédváltzót vezetünk be (legkisebb elem értékének és indexének).. Ciklus I=1-tıl N-1-ig INDEX:=I ÉRTÉK:=A(I) Ciklus J=I+1-tıl N-ig Ha A(J)<ÉRTÉK akkr ÉRTÉK:=A(J) INDEX:=J A(INDEX):=A(I) A(I):=ÉRTÉK Hatéknysági mutatók: Tárigény: N+1 Összehasnlításk száma: N*(N-1)/2 Mzgatásk száma: 3*(N-1)-től 3*(N-1)+(N*N/4)-ig lehetséges Végrehajtási idő: 1650 s (N=500) Bubréks rendezés: Módszer lényege: Hasnlítsuk össze a vektr első és másdik elemét, s ha az első nagybb, cseréljük meg őket. Ezt követően hasnlítsuk össze a vektr másdik és harmadik elemét, s ha a másdik 5
nagybb, cseréljük meg őket, és így tvább. Látható, hgy ekkr a vektr legnagybb eleme biztsan a helyére kerül, még akkr is, ha ő vlt az első. Sajns ez a többi elemre nem feltétlenül teljesül, tehát ahhz, hgy a másdik legnagybb elem a helyére kerüljön, ismét el kell indulnunk a vektr elejéről. Az első elemet össze kell hasnlítani a másdikkal, a másdikat a harmadikkal, stb., aznban mst már elég elmenni az utlsó előtti elemig, hiszen az utlsó a helyén van. A következő körben már a harmadik legnagybb elemet tesszük a helyére, és így tvább. A külső ciklust tehát annyiszr kell lefuttatnunk, ahány eleme van a vektrunknak. Ciklus J=1-tıl N-I-ig Ha A(J)>A(J+1) akkr Cs:=A(J) A(J):=A(J+1) A(J+1):=Cs Hatéknysági mutatók: Tárigény: N+1 Összehasnlításk száma: N*(N-1)/2 Mzgatásk száma: 0-tól 3*N*(N-1)/2-ig lehetséges Végrehajtási idő: 3620 s (N=500) Egyszerű beillesztéses rendezés Módszer lényege: Mintha kártyáinkat egyesével felvéve srba raknánk. (N-1 menet) Ciklus J=2-tıl N-ig I:=J-1 A:=A(J) Ciklus amíg I > 0 és A < A(I) A(I+1):=A(I) I:=I-1 A(I+1):=A Hatéknysági mutatók: Tárigény: N+1 Összehasnlításk száma: N-1-től N*(N+1)/2-1-ig váltzhat 6
Mzgatásk száma: 2*N-1-től 2*(N-1)+N*(N-1)/2-ig lehetséges Végrehajtási idő: 1950 s (N=500) Metszetképzés Általáns feladat: Rendelkezésünkre áll egy N és egy M elemű halmaz az A() és a B() vektrban ábrázlva. Készítsük el a két halmaz metszetét a C() vektrba! CN:=0 J:=1 Ciklus amíg J<=M és A(I)<>B(J) J:=J+1 Ha J<=M akkr CN:=CN+1 C(CN):=A(I) Únióképzés Általáns feladat: Rendelkezésünkre áll egy N és egy M elemű halmaz az A() és a B() vektrban ábrázlva. Készítsük el a két halmaz egyesítését a C() vektrba! C(I):=A(I) CN:=N Ciklus J=1-tıl M-ig Ciklus amíg I<=N és A(I)<>B(J) Ha I>N akkr CN:=CN+1 C(CN):=B(J) 7
Összefuttatás Általáns feladat: Két rendezett srzat uniója úgy, hgy a rendezettség megmaradjn. J:=1 K:=0 Ciklus amíg I<=N és J<=M K:=K+1 Elágazás A(I) < B(J) esetén C(K):=A(I) A(I) = B(J) esetén C(K):=A(I) J:=J+1 A(I) > B(J) esetén C(K):=B(J) J:=J+1 Elágazás vége Ciklus amíg I<=N K:=K+1 C(K):=A(I) Ciklus amíg J<=M K:=K+1 C(K):=B(J) J:=J+1 8