Számláló rendezés. Példa



Hasonló dokumentumok
1. ábra. Számláló rendezés

Számjegyes vagy radix rendezés

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

A MAXIMUM-KUPACOL eljárás helyreállítja az A[i] elemre a kupactulajdonságot. Az elemet süllyeszti cserékkel mindaddig, amíg a tulajdonság sérül.

Elmaradó óra. Az F = (V,T) gráf minimális feszitőfája G-nek, ha. F feszitőfája G-nek, és. C(T) minimális

Bináris keresőfák. Adat : M Elemtip és Elemtip-on értelmezett egy lineáris rendezési reláció,

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

14. Mediánok és rendezett minták

Algoritmusok és adatszerkezetek II.

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

Rendezések. Összehasonlító rendezések

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

A Verem absztrakt adattípus

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Algoritmusok és adatszerkezetek gyakorlat 07

Kupac adatszerkezet. 1. ábra.

Egyesíthető prioritási sor

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

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

10. előadás Speciális többágú fák

7 7, ,22 13,22 13, ,28

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Megoldás meghatározása Ez a szakasz kitölti a c és S táblázatokat, a kiíratás S alapján egy rekurzív algoritmussal megtehető.

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

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Adatszerkezetek I. 8. előadás. (Horváth Gyula anyagai felhasználásával)

7. előadás. Gyorsrendezés, rendezés lineáris lépésszámmal. Adatszerkezetek és algoritmusok előadás március 6.

Hierarchikus adatszerkezetek

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Gyakorló feladatok ZH-ra

Adatszerkezetek 7a. Dr. IványiPéter

Adatszerkezetek és algoritmusok

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

Amortizációs költségelemzés

Programozás II. előadás

Egyesíthető prioritási sor

Az absztrakt adattípus egy (E,M) párral adható meg, ahol E az értékhalmaz, M a műveletek halmaza. Fő tulajdonságok. Verem

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

Rendezettminta-fa [2] [2]

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Adatszerkezet - műveletek

Programozási segédlet

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

Kupacrendezés. Az s sorban lévő elemeket rendezzük a k kupac segítségével! k.empty. not s.isempty. e:=s.out k.insert(e) not k.

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Algoritmuselmélet 2. előadás

Egyszerű programozási tételek

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

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

PROGRAMOZÁSI TÉTELEK

Algoritmusok és adatszerkezetek II.

Hátizsák feladat. Példa: A tárgyak (súly, fontosság) párokban (4,6) (3,5) (2,3) (2,3) a hátizsák kapacitása 8.

Programozási módszertan. Mohó algoritmusok

B-fa. Felépítés, alapvető műveletek. Programozás II. előadás. Szénási Sándor.

Példa 30 14, 22 55,

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

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

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Algoritmusok vektorokkal keresések 1

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

Algoritmusok bonyolultsága

Információs Technológia

Struktúra nélküli adatszerkezetek

Önszervező bináris keresőfák

Algoritmuselmélet 1. előadás

file:///d:/apa/okt/ad/jegyzet/ad1/b+fa.html

Adatszerkezetek 2. Dr. Iványi Péter

GRÁFOK ÉS ALGORITMUSOK ELMÉLETE VIZSGAKÉRDÉSEK Matematika BSc Elemző szakirány II. év 1. félév

2018, Diszkrét matematika

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

Adatszerkezetek 2. Dr. Iványi Péter

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Felvételi tematika INFORMATIKA

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Rekurzív algoritmusok

Elemi adatszerkezetek

INFORMATIKA javítókulcs 2016

Korlátozás és szétválasztás elve. ADAGOLO adattípus

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

10. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 28.

Adatbázis rendszerek Gy: Algoritmusok C-ben

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

ÖNSZERVEZŐ BINÁRIS KERESŐFÁK HATÉKONYSÁGA

Multihalmaz, intervallumhalmaz

Tartalomjegyzék. Köszönetnyilvánítás. 1. Az alapok 1

Átírás:

Alsó korlát rendezési algoritmusokra Minden olyan rendezési algoritmusnak a futását, amely elempárok egymással való összehasonlítása alapján működik leírja egy bináris döntési fa. Az algoritmus által a legrosszabb esetben szükséges összahasonlítások számát a neki megfelelő döntési fa magassága adja meg. Tétel Egy n darab elemet rendező döntési fa magassága Ω(nlogn). Bizonyítás A fa leveleinek száma a lehetséges sorrendek száma, azaz n!. Ha a fa magassága h, akkor 2 h 1 n! kell teljesüljön, következésképpen h 1 lg(n!) lg((n/e) n ) = nlgn nlge = Ω(nlgn). Következmény Minden olyan rendezési algoritmusra, amely csak az elempárok összehasonlítása alapján működik T lr (n) = Ω(nlgn). Számláló rendezés Amennyiben a rendezendő elemek által felvehető értékek halmazának számossága kicsi, akkor megadható lineáris időigényű algoritmus. A bemenet a rendezendő elemek egy n méretű A tömbben eltárolva, a kimenet ezen számok egy B tömbben rendezetten. Továbbá feltesszük, hogy a rendezendő elemek mindegyike az {1,...,k} halmazba esik. C[i] tartalmazza azt az információt, hogy a legfeljebb i nagyságú elemből hány darab van. Szamlalorend(A,B,k) for i=1 to k C[i]:=0 for j=1 to n C[A[j]]:=C[A[j]]+1 for i=2 to k C[i]:=C[i]+C[i-1] for j=n downto 1 {B[C[A[j]]]:=A[j] C[A[j]]:=C[A[j]]-1} Megjegyzés: Az algoritmus ötlete nem csak akkor használható, ha az elemek az {1,...,k} halmazba esnek. Általánosabb esetben meg kell keresni a minimális elemet min-t, és C[i] a legfeljebb i min + 1 nagyságú elemeket tartalmazza. Definíció Egy rendezést stabilnak nevezünk, ha az azonos értékű elemek ugyanabban a sorrendben jelennek meg a kimeneti tömbben, mint ahogy a bemeneti tömbben szerepeltek. A leszámláló rendezés stabil. Futási idő: Θ(n + k) Példa A=[3,1,3,1,2,1,1,2,3] C=[4,2,3] C=[4,6,9] B=[0,0,0,0,0,0,0,0,3] C=[4,6,8] B=[0,0,0,0,0,2,0,0,3] C=[4,5,8] B=[0,0,0,1,0,2,0,0,3] C=[3,5,8] 1

Példa Számjegyes vagy radix rendezés 329 720 720 329 457 436 329 436 657 457 436 457 839 657 839 657 436 329 457 720 720 839 657 839 Bemenet: H k dimenziós vektorok halmaza, ahol az i-edik komponens minden i-re egy olyan elemtípusból kerül ki, amelyen adott egy rendezési reláció. Kimenet: H elemei a lexikografikus rendezés alapján rendezve. Definíció Egy X = (x 1,...,x k ) vektor megelőzi az Y = (y i,...,y k ) vektort a lexikografikus rendezésben, ha i, amelyre teljesül, hogy j < i x j = y j és x i < y i. Elvi algoritmus for i:=d downto 1 H Stabil rendezése a kulcs i-edik jegye szerint Helyesség: A ciklusmag végrehajtása után a H halmaz rendezett lesz arra a kulcsra nézve, amely az eredeti kulcs [i..d] jegyeit (karaktereit) tartalmazza. Bizonyítás i-szinti indukcióval. Futási idő Ha a jegyek szerinti rendezés lineáris idejű (pl számláló), akkor a futási idő O(dn). Edényrendezés Tegyük fel, hogy a rendezendő H = {a 1,...,a n } halmaz elemei a [0,1) intervallumba eső valós számok. Vegyünk m db vödröt, V [0],...,V [m 1] és osszuk szét a rendezendő halmaz elemeit a vödrökbe úgy, hogy az a i elem az m a i sorszámú vödörbe kerüljön. Majd rendezzük az egy vödörbe került elemeket, és a vödrök sorszáma szerinti növekvő sorrendben fűzzük össze a rendezett részsorozatokat (vödröket). Edényrendezés For i=1 to n Beszúrjuk a i -t a B[ na i ] listába For i=0 to m-1 Rendezzük a B[i] listát beszúró rendezéssel Összefűzzük a B[0],B[1],...,B[m 1] listákat. Helyesség: Ha két elem ugyanabba a vödörbe kerül, akkor a beszúró rendezés miatt lesz megfelelő a sorrendjük, egyébként pedig a vödrök összefűzésének sorrendje miatt. Példa Legyen A = {0.12, 0.21, 0.68, 0.26, 0.72, 0.94, 0.78, 0.17, 0.23, 0.39}, és legyen m = 10. Ekkor a vödrök tartalma B[1] = {0.12,0.17}, B[2] = {0.21,0.26,0.23}, B[3] = {0.39}, B[6] = {0.68}, B[7] = {0.72, 0.78}, B[9] = {0.94}. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), 2

átlagos eset Θ(n). Kiválasztási probléma Bemenet: Azonos típusú (különböző) elemek H = {a 1,...,a n } halmaza, amelyeken értelmezve van egy lineáris rendezési reláció és egy i (1 i n) index. Kimenet: Olyan x H, hogy {y : y H y x} = i. A kimenetben szereplő x-et a H rendezett minta i-edik (legkisebb) elemének nevezzük. A középső elemet a rendezett minta mediánjának hívjuk. Pontosabban, az i = (n + 1)/2 -edik elem az alsó, az i = (n + 1)/2 -edik elem a felső medián. Minimum és maximum egyidejű választása A feladat adott n méretű tömb elemeiből kiválasztani a maximális és minimális elemet. MaxMin(A) if (n%2=0) then {k:=2 if (A[1]<A[2]) then {mini:=1 maxi:=2} else {mini:=2 maxi:=1}} else {k:=1 mini:=1 maxi:=1} while(k<n) {if A[k+1]<A[k+2] then {if A[k+1]<A[mini] then mini:=k+1 if A[k+2]>A[maxi] then maxi:=k+2} else {if A[k+2]<A[mini] then mini:=k+2 if A[k+1]>A[maxi] then maxi:=k+1} k:=k+2} Futási idő Az algoritmus legfeljebb 3n/2 összehasonlítást végez. Kiválasztás ismételt felosztással Az algoritmus használja a gyorsrendezésnél definiált Feloszt(A,p,r) eljárást, amely átrendezi az A tömb A[p] és A[r] közé eső szakaszát úgy, hogy a visszaadott q értékre A[p,...,q] minden eleme kisebb vagy egyenlő A[q+1,...,r] minden eleménél. Az alábbi algoritmus a Hoare felosztást használja, ahol nem garantált, hogy A[p,...,q 1] minden eleme kisebb vagy egyenlő, mint A[q]. Elvi algoritmus Kiválaszt(A,p,r,i) If p=r 3

Then return A[p] q:=feloszt(a,p,r) k:=q-p+1 if i k Return Kiválaszt(A,p,q,i) else Return Kiválaszt(A,q+1,r,i-k) Futási idő: Legjobb eset: O(n). Legrosszabb eset: O(n 2 ). Átlagos eset: O(n). Kiválasztás lineáris időben Linkiválaszt algoritmus 1. Osszuk a bemeneti tömb n elemét n/5 5 elemű csoportra, a maradék elemekből alkossunk egy további csoportot. 2. Minden csoportnak keressük meg a mediánját úgy, hogy az 5 elemű csoportokat (és az esetleges egyetlen kisebb elemszámú csoportot) rendezzük. 3. A Linkiválaszt algoritmus rekurzív hívásával határozzuk meg a kapott mediánokból álló halmaz mediánját. 4. A Feloszt eljárás alapján osszuk fel az így kiválasztott elem körül a bemeneti tömböt, legyen k az elemnél nem nagyobb tőle különböző elemek száma, n k 1 az elemnél nagyobb elemek száma. 5. A Linkiválaszt algoritmus rekurzív hívásával határozzuk meg a baloldali részben az i-edik elemet, ha i k, illetve a jobboldali részben az i k 1-edik elemet, ha i > k +1. Az i = k +1 esetben a felosztó elem a keresett elem. Elemzés Fe 1. ábra. Az ábrán a sötét elemek kisebbek a felosztó elemnél, a világosak nagyobbak, így a rekurzív hívás során legfeljebb 7n/10 + 6 elemre kell végrehajtani az algoritmust. Tehát elegendően nagy n esetén a legrosszabb eset korlátra fennáll a következő rekurzív összefüggés: Teljes indukcióval igazolható, hogy T lr (n) = O(n). T lr (n) T lr ( n/5 ) + T lr (7n/10 + 6) + O(n). 4

Megvalósítás: Az 5-ös csoportokat úgy választjuk ki, hogy a tömb első, második, harmadik, negyedik és ötödik ötödéből is veszünk egy-egy elemet, így az ötösöket tudjuk úgy rendezni, hogy a mediánok a tömb közepső részére kerüljenek. Ezáltal a Linkiválaszt algoritmus helyben megvalósítható csak a kiindulási tömb felhasználásával. Kiválasztás kupaccal Az algoritmus során a for ciklus j értékkel való végrehajtása után a kupac az első j elemből az i legkisebbet tartalmazza. Kupacvalaszt(A,i) Kupacmeret(A):=i for j= [i/2] to 1 MAXIMUM KUPACOL(A,j) // az elso i elembol egy kupac for j=i+1 to n {if A[1]>A[j] then {Csere(A[1],A[j]) MAXIMUM KUPACOL(A,1)}} return A[1] Futási idő: O(i) + (n i)o(logi) Példa A=[2,5,7,3,6,4,8], k=3 A=[2,5,7 3,6,4,8] A=[7,5,2 3,6,4,8] A=[3,5,2 7,6,4,8] A=[5,3,2 7,6,4,8] A=[4,3,2 7,6,5,8] Bináris keresőfák Az F = (M,R,Adat) absztrakt adatszerkezetet bináris keresőfának nevezzük, ha F bináris fa, R = {bal, jobb, apa}, bal, jobb, apa : M M, Adat : M Elemtip és Elemtip-on értelmezett egy lineáris rendezési reláció, ( x M)( p F bal(x) )( q F jobb(x) )(kulcs(p) kulcs(x) kulcs(q)) InorderBejaras(F,M) if F!=Nil then {InorderBejaras(bal(F),M) M(F) InorderBejaras(jobb(F),M)} Az InorderBejaras algoritmus a bináris keresőfa elemeit a kulcsok rendezés szerinti sorrendjében látogatja meg. Adott kulcsú elem keresése 5

13 6 23 > 3 9 28 8 <= 2. ábra. KERES(F,k) if F=Nil or k=kulcs(f) then return F If k< kulcs(f) then return KERES(bal(F),k) else return KERES(jobb(F),k) KERES2(F,k) while(f!=nil or k!=kulcs(f)) {if k<kulcs(f) then F:=bal(F) else F:=jobb(F)} return F Futási idő: A fa magasságával arányos. Minimális maximális elem keresése FabanMinimum(F) while(bal(f)!=nil) F:=bal(F) return F 6

FabanMaximum(F) while(jobb(f)!=nil) F:=jobb(F) return F Futási idő: A fa magasságával arányos. Rákövetkező, megelőző elem keresése FabanKovetkezo(p) if jobb(p)!=nil then return FabanMinimum(jobb(p)) q:=apa(p) while(q!=nil and p=jobb(q)) {p:=q q:=apa(q)} return q FabanMegelozo(p) if bal(p)!=nil then return FabanMaximum(bal(p)) q:=apa(p) while(q!=nil and p=bal(q)) {p:=q q:=apa(q)} return q Futási idő: A fa magasságával arányos. Beszúrás bináris keresőfába A fát a gyökérpontja által adtuk meg. Beszur(F,z) y:=nil x:=f while(x!=nil) {y:=x if kulcs(z)<kulcs(x) then x:=bal(x) else x:=jobb(x)} apa(z):=y if y=nil then F:=z //Üres volt a fa else {if kulcs(z)<kulcs(y) then bal(y):=z else jobb(y):=z} Futási idő: A fa magasságával arányos. Törlés bináris keresőfából 7

13 6 23 > 3 9 28 8 11 3. ábra. FabolTorol(F,z) If bal(z)=nil or jobb(z)=nil then y:=z else y:=fabankovetkezo(z) If bal(y)!=nil then x:=bal(y) else x:=jobb(y) If x!=nil then apa(x):=apa(y) If apa(y)=nil then F:=x else {if y=bal(apa(y)) then bal(apa(y)):=x else jobb(apa(y)):=x} If y!=z then kulcs(z):=kulcs(y) Keresőfák magassága Ha az 1,2,...,n sorrendben szúrunk pontokat egy üres fába a magasság n lesz. Az n csúcsból álló véletlen építésű bináris fák magassága O(logn). Kiegyensúlyozott keresőfák Mivel a keresőfa műveletek időigénye a fa magasságával arányos, ezért szeretnénk a fát úgy karbantartani, hogy 8

13 8 23 > 3 9 28 > 11 4. ábra. a magassága mindig O(logn) legyen, ahol n a fa pontjainak a száma. AVL fák piros fekete fák Sorozat adattípus Értékhalmaz: E Sor = [a 1,...,a n : a i E,i = 1,...,n,] Műveletek: S: Sor, x : E {Igaz} Letesit(S) {S = []} {S = S} Megszuntet(S) {Igaz} {S = S} Uresit(S) {S = []} {S = [a 1,...,a n ]} Elemszam(S) {Elemszam = n} {S = [a 1,...,a n ] 1 i n} Kiolvas(S, i,x) {x = a i S = Pre(S)} {S = [a 1,...,a i,...,a n ] 1 i n} Modosit(S, i,x) {S = [a 1,...,x,...,a n ]} {S = [a 1,...,a i,a i+1,...,a n ] 0 i n} Bovit(S, i,x) {S = [a 1,...,a i,x,a i+1,...,a n ]} {S = [a 1,...,a i 1,a i,a i+1,...,a n ] 1 i n} Torol(S, i) {S = [a 1,...,a i 1,a i+1,...,a n ]} {S = S} IterKezd(S, I) {} 9

{I = I} IterAd(I,x) {} {I = I} IterVege(I) {} Megvalósítás: kiegyensúlyozott bináris keresőfával. Tároljuk az S = {a 1,...,a n } sorozatot egy F bináris fában úgy, hogy F inorder bejárása az S sorozatot adja. Ekkor F egy bináris keresőfa lesz a sorozat indexeire nézve. A fa minden p pontjában tároljuk még extra információként a bal-részfájában levő pontok számánál 1-el nagyobb értéket s(p). Ekkor s(p) a p pontra végrehajtott inorder bejárás során p sorszáma. Ezen s(p) értékek alapján a fa gyökeréből indulva megtalálható minden i-re az i-edik elem. Bővítés esetén ha a keresőút balra halad egy p ponttól, akkor s(p) értékéhez egyet kell adni. Törlés esetén, ha a keresőút balra halad egy p ponttól, akkor s(p) értékéből egyet le kell vonni. 10