14. Mediánok és rendezett minták

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

Számjegyes vagy radix rendezés

1. ábra. Számláló rendezé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.

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

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.

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

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

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

Algoritmusok vektorokkal keresések 1

Ö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.

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

Programozás alapjai. 5. előadás

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

Dr. Schuster György február / 32

Megoldott feladatok. Informatika

Algoritmizálás és adatmodellezés tanítása 1. előadás

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:

Neumann János Tehetséggondozó Program Gráfalgoritmusok II.

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

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

Programozási módszertan. Mohó algoritmusok

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

Adatbázis rendszerek Gy: Algoritmusok C-ben

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

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

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

Rendezések. A föltöltés nemcsak az r-re vonatkozik, hanem az s-re is. Ez használható föl a további rendezések

Geometriai algoritmusok

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Térinformatikai algoritmusok Elemi algoritmusok

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Egyszerű programozási tételek

Térinformatikai algoritmusok Elemi algoritmusok

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

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

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

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

1. Jelölje meg az összes igaz állítást a következők közül!

PROGRAMOZÁSI TÉTELEK

Gyakorlatok. P (n) = P (n 1) + 2P (n 2) + P (n 3) ha n 4, (utolsó lépésként l, hl, u, hu-t léphetünk).

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

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

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.

Algoritmuselmélet 2. előadás

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

Algoritmizálás + kódolás C++ nyelven és Pascalban

Programozási módszertan. Függvények rekurzív megadása "Oszd meg és uralkodj" elv, helyettesítő módszer, rekurziós fa módszer, mester módszer

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

Felvételi tematika INFORMATIKA

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.

Kupac adatszerkezet. 1. ábra.

ELEMI PROGRAMOZÁSI TÉTELEK

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

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

84)Adott a következőképpen értelmezett f alprogram. Milyen értéket térit vissza f(1)? És f(100)? function f(x:integer):integer; begin

INFORMATIKA tétel 2019

Adatszerkezetek 2. Dr. Iványi Péter

Gyakorló feladatok ZH-ra

A 2011/2012 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

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

Hatékonyság 1. előadás

<... < s n. Írjuk le a megoldási módszert, és adjunk meg egy megjegyzésekkel ellátott Pascal-programot. A bemeneti adatokat helyesnek tekintjük.

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

Erdélyi Magyar TudományEgyetem (EMTE

Programozási alapismeretek 3. előadás

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Tuesday, March 6, 12. Hasító táblázatok

Algoritmusok bonyolultsága

Érdekes informatika feladatok

A feladat. A főprogram

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

SZÁMÍTÓGÉPI GRAFIKA VÁGÁS

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

Egyesíthető prioritási sor

I. Egydimenziós tömb elemeinek rendezése

13. Rendezési algoritmusok

Programozási segédlet

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

Gráfelméleti feladatok. c f

Érdekes informatika feladatok

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Közismereti informatika 2.zh T-M szakirány

Mesterséges intelligencia 1 előadások

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

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

Függvények növekedési korlátainak jellemzése

1. előadás. számításokban. Adatszerkezetek és algoritmusok előadás február 12. Kósa Márk, Pánovics János, Szathmáry László és Halász Gábor

INFORMATIKA javítókulcs 2016

2018, Diszkrét matematika

értékel függvény: rátermettségi függvény (tness function)

Algoritmuselmélet 1. előadás

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

4.2. Tétel: Legyen gyenge rendezés az X halmazon. Legyen továbbá B X, amelyre

Informatikai tehetséggondozás:

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Átírás:

14. Mediánok és rendezett minták Kiválasztási probléma Bemenet: Azonos típusú (különböző) elemek H = {a 1,...,a n } halmaza, amelyeken értelmezett 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 nevezzük. Pontosabban, az i = (n + 1)/ -edik elem az alsó, az i = (n + 1)/ -edik elem a felső medián. Minimum és maximum egyidejű meghatározása. Procedure MiniMax(Const A:Tomb; N:Longint Var i,j:longint ); {Kimenet: A[i]=Min(A[1..N]), A[j]=Max(A[1..N])} Var M,k:Longint; Begin M:=(N div )*; If A[1] < A[] Then Begin i:=1; j:= Else Begin i:=; j:=1 For k:=1 To M-1 Do If A[k]<A[k+1] Then Begin {párok összehasonlítása} If A[k]<A[i] Then j:=k; If A[k+1]>A[j] Then i:=k+1; End Else Begin If A[k+1]<A[i] Then i:=k+1; If A[k]>A[j] Then i:=k; If N<>M Then Begin If A[N]<A[i] Then i:=n; Else If A[N]>A[j] Then j:=n End{MiniMax}; A MINIMAX algoritmus legfeljebb 3 n/ összehasonlítást végez. Kiválasztás ismételt felosztással (iterált particionálás) Elvi algoritmus: Valaszt(H:Halmaz, i:word):elemtip; {1 k H } Var H b,h j :Halmaz; x:elemtip; Begin{Valaszt} If H = 1 Then Begin Valaszt:=x (* H = {x} *); End Else Begin; Feloszt(H,H b,h j,x); {H = H b H j {x},max(h b ) x < min(h j )} q := H b ; 1

If i q Then Valaszt:=Valaszt(H b,i); Else If i > q Then Valaszt:=Valaszt(H j,i q 1); Else Valaszt:=x End{ H > 1}; End{Valaszt}; Function Kivalaszt(Var T : Tomb; i:longint):longint; Var bal,jobb,f:longint; Function Feloszt( bal, jobb : Longint):Longint; Var x,e : Elemtip; i,j : Longint; Begin {Feloszt} x:= T[jobb]; i:=bal-1; For j:=bal To jobb-1 Do If T[j]<=x Then Begin i:=i+1 E:=T[i]; T[i]:=T[j]; T[j]:=E; i:=i+1; E:=T[i]; T[i]:=T[jobb]; T[jobb]:=E; Feloszt:=i; End{Feloszt}; Begin{Kivalaszt} bal:=1; jobb:=n; While bal < jobb Do Begin f = Feloszt(bal,jobb); If i=f Then Begin bal:=f; Break; End Else If i<f-bal Then jobb:=f-1 Else Begin i:= i-(f-bal+1); bal:=f+1 End End{while}; Kivalaszt:=bal End{Kivalaszt}; A futási idő elemzése. T lr (n) = O(n ), lásd a gyorsrendezés legrossabb esetét.

T l j (n) = O(n). Átlagos eset Feltesszük, hogy minden bemenet egyformán valószínű. Felosztás az Fe felosztó elemmel, akkor az f felosztó index lehet: Feltéve, hogy T a (n) monoton növekvő függvény, f = 1,,,n 1,n T a (n) 1 n( n T a (max( f 1,n f )) + O(n) f =1 Mivel a felosztás ideje O(n). Ha n páros, akkor a max kifejezés mindkét argumentuma 1-től n 1-ig kétszer szerepel az összegzésben, ha n páratlan, akkor pedig n/ egyszer, a többi kétszer. Tehát { f 1 ha f > n/, max( f 1,n f ) = n f ha f n/. T a (n) n n 1 T a ( f ) + O(n) f = n/ Tegyük fel, hogy van olyan c konstans, hogy T a (n) cn és hogy c teljesíti a rekurziv képlet kezdeti feltételét, azaz T (n) = O(1) valamely konstansnál kisebb n-ekre. Tegyük fel továbbá, hogy a felosztás futási idejét kifejező O(n) tagra teljesül, hogy an. T a (n) n = c n n 1 f = n/ ( n 1 f =1 c f + an n/ 1 f f =1 f ) + an = c ( ) (n 1)n ( n/ 1) n/ + an n c ( ) (n 1)n (n/ )(n/ 1) + an n = c ( n ) n n /4 3n/ + + an n = c ( 3n n 4 + n ) + an ( 3n = c 4 + 1 ) + an n 3cn 4 + c + an ( cn = cn 4 c ) an. 3

Más csak azt kell megmutatnunk, hogy elég nagy n-ekre a fenti kifejezés legfejlebb cn, ami ekvivalens azzal, hogy cn/4 c/ an 0. Mindkét oldalhoz c/-t adva és kiemelve n-et, azt kapjuk, hogy n(c/4 a) c/. Ha a c konstanst úgy választjuk, hogy c/4 a > 0, vagyis c > 4a, oszthatunk c/4 a-val, és kapjuk n c/ c/4 a = c c 4a. Tehát feltéve, hogy T a (n) = O(1) ha n < c/(c 4a), T a (n) = O(n). Kiválasztás legroszabb esetben lineáris időben Alapötlet: a felosztó elem "jó" választása. LinValaszt(H:Halmaz, i:longint):elemtip; {1 i H } Var H b,h j :Halmaz; Begin{LinKiValaszt} If H = 1 Then Begin LinKiValaszt:=x (* H = {x} *); End Else Begin; L := N div5; H = H 1 + + H L + H L+1 ; {ötös csoportok} { H i = 5,i = 1..L, H L+1 < 5 }; Med5 := {Valaszt(H 1,3),,Valaszt(H L,3)}; Fe := LinValaszt(Med5, L/); Feloszt(H,Fe,H b,x,h j ); {felosztás az Fe felosztó elemmel} {max(h b ) x < min(h j )} q := H b ; If i = q + 1 Then LinKiValaszt:=x; Else If i q Then LinKiValaszt:=LinKiValaszt(H b,i); Else Begin{q + 1 < i} LinKiValaszt:=LinKiValaszt(H j,i q 1); End{LinKiValaszt}; A futási idő elemzése Képzeljük el, hogy rendeztük az ötös csoportokat, majd ezeket a középső elemük szerint. Ezt szemléteti az 1. ábra. Az ábrán szürkére festett elemek mindegyike kisebb vagy egyenlő, mint az Fe felosztó elem, a feketék pedig nagyobbak, mint Fe. ( 1 n q = H b 3 ) 5 3n 10 6 Tegyük fel, hogy a legfeljebb 140 elemű bemenetekre a futási idő Θ(1). Ekkor, mivel a felosztás ideje O(n), azt kapjuk, hogy { Θ(1) ha n 140, T lr (n) T lr ( n/5 ) + T lr (7n/10 + 6) + O(n) ha n > 140. 4

Fe 1. ábra. Az ötös csoportok szerepe a felosztásban. Tegyük fel továbbá, hogy a felosztás futási idejét kifejező O(n) tagra teljesül, hogy a n valamely a konstansra. Tehát amely legfeljebb cn, ha T lr (n) c n/5 + c(7n/10 + 6) + an cn/5 + c + 7cn/10 + 6c + an = 9cn/10 + 7c + an = cn + ( cn/10 + 7c + an), cn/10 + 7c + an 0. (1) Az (1) egyenlőtlenség teljesül, ha c 10a(n/(n 70)) és n > 70. Mivel feltettük, hogy n 140, kapjuk, hogy n/(n 70), és így c 0a választása esetén teljesül a kívánt egyenlőtlenség, tehát T lr (n) = O(n). Megvalósítás { Globalis programelemek a LinKiv eljarashoz : Const MaxN =??? ;(* maxi. elemszám *) Type Kulcstip =??? ;(* a rendezési mező kulcstípusa *) Adattip =??? ;(* az adatmező típusa *) Elemtip = Record kulcs : Kulcstip; adat : Adattip Tomb = Array[1..N] Of Elemtip; } Function LinKivalaszt(Var T:Tomb;N, i:longint) : Longint; Const R0 = ; R = *R0+1; Procedure BeszuroRend(Elso,Elszam,d: Longint); {A rendezendő elemek T[Elso], T[Elso+d], T[Elso+d*(Elszam-1)]} Var i,utolso : Longint; E : Elemtip;j:Longint; 5

Begin i:= Elso+d; Utolso:= Elso+(Elszam-1)*d; While i <= Utolso Do Begin E := T[i]; j := i-d; While (j >= Elso) And (T[j].kulcs > E.kulcs) Do Begin T[j+d] := T[j]; Dec(j,d) End{while}; T[j+d] := E; Inc(i,d); End End (* BeszuroRend *); Function Valaszt(Bal,Jobb, i : Longint) : Longint; Var k,f,m,l:longint; E:Elemtip; Begin (* Valaszt *) Repeat M:=Jobb-Bal+1; L:= M Div R; If M <= R Then Begin Beszurorend(Bal,M,1); Valaszt:=Bal+i-1; Break; End Else Begin For k:=1 To L Do Beszurorend(Bal+k-1,R,L); f:= Valaszt(Bal+R0*L, Bal+(R0+1)*L-1, L Div ); f:= Feloszt(Bal,Jobb,f); {felosztás a T[f] elemmel} If i=f Then Begin Valaszt:=f; Break; End Else If i<f-bal Then jobb:=f Else Begin i:= i-(f-bal+1); bal:=f+1 End Until False; End (* Valaszt *); Begin LinKivalaszt := Valaszt(1,N,i) Kiválasztás kupaccal. A LINKIVALASZT algoritmus ugyan legrosszabb esetben is lineáris futási idejű, azonban az O(n) kifejezésben a konstans elég nagy. Kis i-re gyorsabb algoritmust adhatunk kupac alkalmazásával. Function KupacValaszt(Var T:Tomb;N, i:longint) : Longint; Var E:Elemtip; k:longint; Begin{KupacValaszt} k:=i Div Downto 1 Do {kupacépítés} Sullyeszt(k, i); For k:=i+1 To N Do 6

{Invariáns: T[1] a tömb T[1..k] elemei közül az i-edik legkisebb} If T[k]<T[1] Then Begin E:=T[1]; T[1]:=T[k]; T[k]:=E; Sullyeszt(1,i); KupacValaszt:=1; End{KupacValaszt}; A KUPACVALASZT algoritmus futási ideje: T lr (n) = O(i) + (n i)o(lgi). 7