4.2. Rendezések

41
4.2. Rendezések 4.2. Rendezések A rendezési feladatok általános A rendezési feladatok általános problémája: adott egy problémája: adott egy n n elemű elemű sorozat, készítsük el ezeknek az sorozat, készítsük el ezeknek az elemeknek egy olyan permutációját, elemeknek egy olyan permutációját, amelyre igaz, hogy a sorozat amelyre igaz, hogy a sorozat i. i. eleme eleme kisebb (egyenlő) az kisebb (egyenlő) az i+1 i+1 -ediktől. -ediktől. Ez a növekvő rendezés. Az ilyen Ez a növekvő rendezés. Az ilyen algoritmusok értelemszerűen algoritmusok értelemszerűen átalakíthatók csökkenő sorrendűvé. átalakíthatók csökkenő sorrendűvé.

description

4.2. Rendezések. A rendezési feladatok általános problémája: adott egy n elemű sorozat, készítsük el ezeknek az elemeknek egy olyan permutációját, amelyre igaz, hogy a sorozat i. eleme kisebb (egyenlő) az i+1 -ediktől. - PowerPoint PPT Presentation

Transcript of 4.2. Rendezések

Page 1: 4.2. Rendezések

4.2. Rendezések 4.2. Rendezések

A rendezési feladatok általános A rendezési feladatok általános problémája: adott egy problémája: adott egy n n elemű sorozat, elemű sorozat, készítsük el ezeknek az elemeknek egy készítsük el ezeknek az elemeknek egy olyan permutációját, amelyre igaz, hogy a olyan permutációját, amelyre igaz, hogy a sorozat sorozat i.i. eleme kisebb (egyenlő) az eleme kisebb (egyenlő) az i+1i+1--ediktől. ediktől.

Ez a növekvő rendezés. Az ilyen Ez a növekvő rendezés. Az ilyen algoritmusok értelemszerűen átalakíthatók algoritmusok értelemszerűen átalakíthatók csökkenő sorrendűvé.csökkenő sorrendűvé.

Page 2: 4.2. Rendezések

A különböző rendezések leginkább a A különböző rendezések leginkább a következő két művelet alkalmazásában következő két művelet alkalmazásában térnek el egymástól:térnek el egymástól: összehasonlítás – két sorozatelem összehasonlítás – két sorozatelem

viszonyának meghatározása,viszonyának meghatározása, mozgatás – az elemek sorrendjének mozgatás – az elemek sorrendjének

változtatá-sa a rendezettségnek változtatá-sa a rendezettségnek megfelelően.megfelelően.

A hatékonyság vizsgálatakor is ez a két A hatékonyság vizsgálatakor is ez a két művelet, valamint az igényelt tárterület művelet, valamint az igényelt tárterület érdekes számunkra.érdekes számunkra.

Page 3: 4.2. Rendezések

Minimumkiválasztásos-Minimumkiválasztásos-rendezés rendezés

Először megkeressük az egész tömb legkisebb Először megkeressük az egész tömb legkisebb elemét, és ezt kicseréljük az első elemmel. elemét, és ezt kicseréljük az első elemmel.

Most már csak a maradék: 2..N részt kell Most már csak a maradék: 2..N részt kell rendeznünk. Megkeressük itt is a legkisebb rendeznünk. Megkeressük itt is a legkisebb elemet, majd ezt kicseréljük a másodikkal. elemet, majd ezt kicseréljük a másodikkal.

Folytassuk ezt a procedúrát. Utolsó lépésként Folytassuk ezt a procedúrát. Utolsó lépésként az utolsó előtti helyre kell kiválasztanunk a az utolsó előtti helyre kell kiválasztanunk a legkisebb elemet, hiszen ezzel az utolsó is a legkisebb elemet, hiszen ezzel az utolsó is a helyére kerül. helyére kerül.

Page 4: 4.2. Rendezések

algoritmus Minimumkiválasztásos_rendezés konstans N=maximális_elemszám változó A:tömb[1..N] Elemtípus változó I, J, MinIndex: egész változó Csere: Elemtípus

ciklus I:=1..N-1 ismétel MinIndex:=I ciklus J:=I+1..N ismétel ha A[J]<A[MinIndex] akkor

MinIndex:=J hvége cvége ha MinIndex<>I akkor Csere:=A[I]; A[I]:=A[MinIndex]; A[MinIndex]:=Csere; hvége cvégealgoritmus vége

Page 5: 4.2. Rendezések

Minimumkiválasztásos-Minimumkiválasztásos-rendezés rendezés –– hatékonyság hatékonyság

Helyfoglalás: n+1 (n elemű tömb és Helyfoglalás: n+1 (n elemű tömb és a cserékhez szükséges segédváltozó) a cserékhez szükséges segédváltozó)

Összehasonlítások száma: n*(n-1)/2Összehasonlítások száma: n*(n-1)/2 nagyságrendben n nagyságrendben n22: O(n: O(n22))

Cserék száma: 0..n-1Cserék száma: 0..n-1értékadások száma: 0..3*(n-1) értékadások száma: 0..3*(n-1)

Page 6: 4.2. Rendezések

Nagy ordó Nagy ordó –– O(f(n))O(f(n))

Az Az O(f(n))O(f(n)) jelölést ( jelölést (nagy ordónagy ordó) rendszerint ) rendszerint pozitív egész pozitív egész nn-eken értelmezett -eken értelmezett ff függvény függvény esetén használjuk. esetén használjuk.

Az Az O(f(n))O(f(n)) jelölés az jelölés az nn-től függő mennyiségek -től függő mennyiségek becslésére szolgál. becslésére szolgál.

Egy Egy XX mennyiség helyére akkor írhatunk mennyiség helyére akkor írhatunk O(f(n))O(f(n))-t, ha létezik olyan konstans, mondjuk -t, ha létezik olyan konstans, mondjuk MM, hogy minden elég nagy , hogy minden elég nagy nn-re, -re, |X| |X| M · | M · |f(n)|f(n)|, azaz aszimptotikusan felső becslést , azaz aszimptotikusan felső becslést adunk egy konstansszorzótól eltekintve a adunk egy konstansszorzótól eltekintve a lépésszámra. lépésszámra.

Page 7: 4.2. Rendezések

A A ha Min<>I akkor elágazást kihagyhatjuk elágazást kihagyhatjuk az algoritmusból. Ezt akkor célszerű az algoritmusból. Ezt akkor célszerű megtenni, ha az elemek , mint a megtenni, ha az elemek , mint a negyede van eleve a helyén.negyede van eleve a helyén.

A minimumkiválasztásos rendezés már egy A minimumkiválasztásos rendezés már egy javításának tekinthető az egyszerű cserés javításának tekinthető az egyszerű cserés rende-zésnek, mely az egyik legkevésbé rende-zésnek, mely az egyik legkevésbé hatékony rendezés, túl sok felesleges cserét hatékony rendezés, túl sok felesleges cserét tartalmaz:tartalmaz:

ciklus I:=1..N-1 ismétel ciklus J:=I+1..N ismétel ha A[J]<A[I] akkor

Csere:=A[I]; A[I]:=A[J]; A[J]:=Csere hvége cvégecvége

kevesekevesebbbb

Page 8: 4.2. Rendezések

BuborékrendezésBuborékrendezés

Az előzőhöz képest a különbség az Az előzőhöz képest a különbség az össze-hasonlításokban van. össze-hasonlításokban van.

Ennél mindig két szomszédos elemet Ennél mindig két szomszédos elemet hasonlítunk össze, és ha nem hasonlítunk össze, és ha nem megfelelő a sorrendjük, megcseréljük megfelelő a sorrendjük, megcseréljük őket. őket.

Page 9: 4.2. Rendezések

Buborékrendezés Buborékrendezés algoritmusaalgoritmusa

algoritmus Buborékrendezés változó I, J: egész változó Csere: Elemtípus ciklus I:=N..2 lépésköz -1 ismétel ciklus J:=1..I-1 ismétel ha A[J]>A[J+1] akkor Csere:=A[J]; A[J]:=A[J+1]; A[J+1]:=Csere hvége cvége cvégealgoritmus vége

Page 10: 4.2. Rendezések

Buborékrendezés Buborékrendezés –– hatékonysághatékonyság

Helyfoglalás: n+1 (n elemű tömb és Helyfoglalás: n+1 (n elemű tömb és a cserékhez szükséges segédváltozó) a cserékhez szükséges segédváltozó)

Összehasonlítások száma: n*(n-1)/2 Összehasonlítások száma: n*(n-1)/2 nagyságrendben nnagyságrendben n22: O(n: O(n22))

Cserék száma: 0..n*(n-1)/2; Cserék száma: 0..n*(n-1)/2; értékadások száma: 0..3*n*(n-1)/2értékadások száma: 0..3*n*(n-1)/2

Page 11: 4.2. Rendezések

Cserék átlagos számának Cserék átlagos számának meghatározásameghatározása

A cserék száma megegyezik az A cserék száma megegyezik az AA tömb elemei tömb elemei között fennálló inverziók számával. között fennálló inverziók számával.

Valóban, minden csere pontosan egy inverziót Valóban, minden csere pontosan egy inverziót szüntet meg a két szomszédos elem között, újat szüntet meg a két szomszédos elem között, újat viszont nem hoz létre. A rendezett tömbben pedig viszont nem hoz létre. A rendezett tömbben pedig nincs inverzió.nincs inverzió.

Feltesszük, hogy a rendezendő számok minden Feltesszük, hogy a rendezendő számok minden permutációja egyformán valószínű (vehetjük úgy, permutációja egyformán valószínű (vehetjük úgy, hogy az 1, 2, ..., hogy az 1, 2, ..., nn számokat kell rendeznünk). számokat kell rendeznünk).

A cserék számának átlagát nyilvánvalóan úgy A cserék számának átlagát nyilvánvalóan úgy kapjuk, hogy az 1, 2, ..., kapjuk, hogy az 1, 2, ..., nn elemek minden elemek minden permutációjának inverziószámát összeadjuk és permutációjának inverziószámát összeadjuk és osztjuk a permutációk számával (n!).osztjuk a permutációk számával (n!).

Page 12: 4.2. Rendezések

Célszerű párosítani a permutációkat úgy, Célszerű párosítani a permutációkat úgy, hogy mindegyikkel párba állítjuk az inverzét, hogy mindegyikkel párba állítjuk az inverzét, pl. az 1423 és a 3241 alkot egy ilyen párt.pl. az 1423 és a 3241 alkot egy ilyen párt.

Egy ilyen párban az inverziók száma együtt Egy ilyen párban az inverziók száma együtt

éppen a lehetségeséppen a lehetséges -t -t teszi ki:teszi ki: pl.pl. inv(1423) + inv(3241) = 2+4 = 6..

Tehát a keresett hányados:Tehát a keresett hányados:

Tehát a buborékrendezés nagyságrendben Tehát a buborékrendezés nagyságrendben nn22-es algoritmus. -es algoritmus.

Szerencsétlen esetben tehát ez a módszer Szerencsétlen esetben tehát ez a módszer rosszabb a minimumkiválasztásosnál.rosszabb a minimumkiválasztásosnál.

(n!/2) /n!

n2

= /2= n(n-1)/4= O(n2)n2

n2

Page 13: 4.2. Rendezések

Javított buborékrendezés I.Javított buborékrendezés I.

Ötlet: ha egy teljes belső ciklus Ötlet: ha egy teljes belső ciklus lefutása alatt egyetlen csere sem lefutása alatt egyetlen csere sem volt, akkor az ez utáni menetekben volt, akkor az ez utáni menetekben sem lehet, tehát a sorozat már sem lehet, tehát a sorozat már rendezetté vált. rendezetté vált.

Ezzel kiküszöböltük a már Ezzel kiküszöböltük a már feleslegessé vált feleslegessé vált összehasonlításokat. összehasonlításokat.

Page 14: 4.2. Rendezések

Javított buborékrendezés I.Javított buborékrendezés I.algoritmus JavítottBuborékrendezés1 változó I, J: egész változó Csere: Elemtípus változó Vége: logikai

I:=N; Vége:=hamis amíg (I>=2) és (nem Vége) ismétel Vége:=igaz; ciklus J:=1..I-1 ismétel ha A[J]>A[J+1] akkor Csere:=A[J]; A[J]:=A[J+1]; A[J+1]:=Csere Vége:=hamis hvége cvége I:=I-1 avégealgoritmus vége

Page 15: 4.2. Rendezések

Javított buborékrendezés Javított buborékrendezés –– hatékonysághatékonyság

Helyfoglalás: n+1 (n elemű tömb és Helyfoglalás: n+1 (n elemű tömb és a cserékhez szükséges segédváltozó) a cserékhez szükséges segédváltozó)

Összehasonlítások száma: n-1..n*(n-Összehasonlítások száma: n-1..n*(n-1)/2 1)/2

Értékadások száma: 0..3*n*(n-1)/2 Értékadások száma: 0..3*n*(n-1)/2

Buborékrendezés hatékonyság

Page 16: 4.2. Rendezések

Javított buborékrendezés II.Javított buborékrendezés II.

Ötlet: ha a belső ciklusban volt csere, de a Ötlet: ha a belső ciklusban volt csere, de a legutolsó valahol a sorozat belsejében legutolsó valahol a sorozat belsejében volt, akkor azon túl már rendezett a volt, akkor azon túl már rendezett a sorozat. sorozat.

Jegyezzük meg az utolsó csere helyét, és Jegyezzük meg az utolsó csere helyét, és legközelebb csak addig rendezzünk. legközelebb csak addig rendezzünk.

Ez a megoldás tartalmazza az előző Ez a megoldás tartalmazza az előző javítást is, ha nem volt csere, akkor javítást is, ha nem volt csere, akkor befejeződik. befejeződik.

Page 17: 4.2. Rendezések

Javított buborékrendezés II.Javított buborékrendezés II.algoritmus JavítottBuborékrendezés2 változó I, J, UtolsóCsere: egész változó Csere: Elemtípus I:=N; amíg I>=2 ismétel UtolsóCsere=0; ciklus J:=1..I-1 ismétel ha A[J]>A[J+1] akkor Csere:=A[J]; A[J]:=A[J+1]; A[J+1]:=Csere UtolsóCsere:=J hvége cvége I:=UtolsóCsere avégealgoritmus vége

A konkrét számokat tekintve a hatékonysági mutatók A konkrét számokat tekintve a hatékonysági mutatók ugyanazok, mint az előzőnél, azonban az előző javításhoz ugyanazok, mint az előzőnél, azonban az előző javításhoz képest az átlagos végrehajtási idő tovább csökkenhet.képest az átlagos végrehajtási idő tovább csökkenhet.

Page 18: 4.2. Rendezések

Beszúró rendezésBeszúró rendezés

Más néven beillesztő vagy kártyás rendezés.Más néven beillesztő vagy kártyás rendezés. A működést leginkább a kártyalapok egyenként A működést leginkább a kártyalapok egyenként

való kézbe vételéhez és a helyükre igazításához való kézbe vételéhez és a helyükre igazításához hasonlíthatjuk. hasonlíthatjuk.

Vesszük a soron következő elemet, és Vesszük a soron következő elemet, és megkeressük a helyét a tőle balra lévő, már megkeressük a helyét a tőle balra lévő, már rendezett részben. rendezett részben.

A kereséssel párhuzamosan a nagyobb elemeket A kereséssel párhuzamosan a nagyobb elemeket rendre eggyel jobbra mozgatjuk. rendre eggyel jobbra mozgatjuk.

Az aktuális elemet egy segédváltozóban tároljuk, Az aktuális elemet egy segédváltozóban tároljuk, mert a mozgatások során értéke felülíródhat egy mert a mozgatások során értéke felülíródhat egy nagyobb elemmel. nagyobb elemmel.

Page 19: 4.2. Rendezések

Hatékonyság: Hatékonyság: Helyfoglalás: n+1 (n elemű tömb és a Helyfoglalás: n+1 (n elemű tömb és a

cserékhez szük-séges segédváltozó) cserékhez szük-séges segédváltozó) Összehasonlítások száma: n-1..n*(n-1)/2 Összehasonlítások száma: n-1..n*(n-1)/2 Értékadások száma: 2*(n-1).. 2*(n-1)+n*(n-1)/2 Értékadások száma: 2*(n-1).. 2*(n-1)+n*(n-1)/2

algoritmus Beszúrórendezés változó I, J: egész változó X: Elemtípus ciklus I:=2..N ismétel J:=I-1; X:=A[I] amíg (J>=1) és (X<A[J]) ismétel A[J+1]:=A[J] J:=J-1 avége A[J+1]:=X cvégealgoritmus vége

Page 20: 4.2. Rendezések

Beszúró rendezés - előnyökBeszúró rendezés - előnyök

Hatékony kis adatsorok eseténHatékony kis adatsorok esetén Hatékony, ha az adatsorok már Hatékony, ha az adatsorok már

részben rendezettekrészben rendezettek Gyakorlatban hatékonyabb a többi Gyakorlatban hatékonyabb a többi

O(nO(n22)-es rendezésnél )-es rendezésnél Online algoritmus, képes rendezni Online algoritmus, képes rendezni

egy listát az új elemek felvételekoregy listát az új elemek felvételekor

Page 21: 4.2. Rendezések

Shell rendezésShell rendezés

Nem önálló módszer, hanem több, már Nem önálló módszer, hanem több, már megismert módszerhez illeszthető. megismert módszerhez illeszthető.

Donald Shell, 1959Donald Shell, 1959 Elve: sokat javíthat a rendezésen, ha először Elve: sokat javíthat a rendezésen, ha először

az egymástól nagy távolságra lévő elemeket az egymástól nagy távolságra lévő elemeket hasonlítjuk, cseréljük, mert így az egyes hasonlítjuk, cseréljük, mert így az egyes elemek gyorsabban közel kerülhetnek a elemek gyorsabban közel kerülhetnek a végleges helyükhöz. végleges helyükhöz.

Így az eredeti módszer hatékonyabbá válhat. Így az eredeti módszer hatékonyabbá válhat. Különösen igaz ez a beszúró rendezésnél.Különösen igaz ez a beszúró rendezésnél.

Page 22: 4.2. Rendezések

ShellsortShellsort

Page 23: 4.2. Rendezések

Az elemek közötti távolságot jelöljük D-vel. Az elemek közötti távolságot jelöljük D-vel. Első értéke: N/3+1, majd D:=D/3+1.Első értéke: N/3+1, majd D:=D/3+1. Pl. 10 elemű sorozatnál az alábbi Pl. 10 elemű sorozatnál az alábbi

részsorozatokat rendezzük:részsorozatokat rendezzük: D=4D=4 1,5,9 2,6,10 3,7 4,81,5,9 2,6,10 3,7 4,8 D=2D=2 1,3,5,7,9 2,4,6,8,101,3,5,7,9 2,4,6,8,10 D=1D=1 1,2,3,4,5,6,7,8,9,101,2,3,4,5,6,7,8,9,10

Úgy tűnhet, mintha D=1 esetén lezajlana az Úgy tűnhet, mintha D=1 esetén lezajlana az egész beszúró rendezés, ekkor azonban egész beszúró rendezés, ekkor azonban már a korábbi menetek miatt minimális már a korábbi menetek miatt minimális számú össze-hasonlítás és mozgatás számú össze-hasonlítás és mozgatás történik. történik.

Page 24: 4.2. Rendezések

algoritmus ShellBeszúrórendezés változó I, J, D, E: egész változó X: Elemtípus D:=N ismétel D:=D/3+1 ciklus E:=1..D ismétel I:=E+D amíg I<=N ismétel J:=I-D; X:=A[I] amíg (J>=1) és (X<A[J]) ismétel A[J+D]:=A[J] J:=J-D avége A[J+D]:=X I:=I+D avége cvége ivége D=1 eseténalgoritmus vége

Page 25: 4.2. Rendezések

Shell rendezés Shell rendezés hatékonyságahatékonysága

Kevesebb, mint O(nKevesebb, mint O(n22) ) összehasonlítást és cserét igényelösszehasonlítást és cserét igényel

Nehéz megállapítani a Nehéz megállapítani a műveletigényét:műveletigényét: Megvalósítástól függően O(nMegvalósítástól függően O(n1.251.25) és ) és

O(nO(n1.51.5) között van) között van

Page 26: 4.2. Rendezések

Indexvektoros rendezés Indexvektoros rendezés

A rendezendő tömb elemeit nem mozgatjuk, hanem a A rendezendő tömb elemeit nem mozgatjuk, hanem a tömbhöz egy indexvektort rendelünk, melyben a tömb tömbhöz egy indexvektort rendelünk, melyben a tömb elemeire mutató indexek a tömb rendezettségének elemeire mutató indexek a tömb rendezettségének megfelelően követik egymást. megfelelően követik egymást.

Az eljárás során az indextömb elemeit az indexelt Az eljárás során az indextömb elemeit az indexelt adatok rendezettségének függvényében sorba rakjuk. adatok rendezettségének függvényében sorba rakjuk.

A hasonlítást tehát mindig az indexelt adatokra A hasonlítást tehát mindig az indexelt adatokra végezzük el, de csere esetén csak az indexeket végezzük el, de csere esetén csak az indexeket cseréljük. cseréljük.

Így az eredeti tömbünk változatlan maradhat. Így az eredeti tömbünk változatlan maradhat. Közvetett módon így egyszerre több szempont szerint Közvetett módon így egyszerre több szempont szerint

is módunkban áll adatainkat rendezni. is módunkban áll adatainkat rendezni.

Page 27: 4.2. Rendezések

algoritmus Indexvektoros_Minimumkiválasztásos_rendezés konstans N=maximális_elemszám változó A:tömb[1..N] Elemtípus változó Index:tömb[1..N] egész változó I, J, Min, Csere: egész ciklus I:=1..N ismétel Index[I]:=I; cvége ciklus I:=1..N-1 ismétel Min:=I ciklus J:=I+1..N ismétel ha A[Index[J]]<A[Index[Min]] akkor Min:=J hvége cvége ha Min<>I akkor Csere:=Index[I]; Index[I]:=Index[Min]; Index[Min]:=Csere; hvége cvégealgoritmus vége

Page 28: 4.2. Rendezések

Gyorsrendezés (Quicksort)Gyorsrendezés (Quicksort)

Elve rekurzív:Elve rekurzív: osszuk két részre a rendezendosszuk két részre a rendezendőő sorozatot úgy, hogy az egyik sorozatot úgy, hogy az egyik

rész minden eleme kisebb legyen a másik rész összes rész minden eleme kisebb legyen a másik rész összes eleménél;eleménél;

a két részre külön-külön ismételjük meg az ela két részre külön-külön ismételjük meg az előőbbi lépést, míg bbi lépést, míg mindkét rész 0 vagy 1 elemmindkét rész 0 vagy 1 eleműű lesz. lesz.

A feldolgozási mA feldolgozási műűvelet egy szétválogatás, melynek velet egy szétválogatás, melynek során egy megadott értékhez viszonyítva a tsorán egy megadott értékhez viszonyítva a tőőle le kisebb elemeket elé, a nagyobbakat mögé helyezzük.kisebb elemeket elé, a nagyobbakat mögé helyezzük.

Viszonyítási értéknek a gyakorlatban a sorozat Viszonyítási értéknek a gyakorlatban a sorozat középsközépsőő vagy els vagy elsőő elemét választják ki. elemét választják ki.

Hatékonyság: O(Hatékonyság: O(nn log log nn))

Page 30: 4.2. Rendezések

eljárás GyorsRendezés(Alsó, Felső: egész) változó I, J: egész változó: X, Csere: ElemTípus I:=Alsó; J:=Felső X:=A[(Felső+Alsó)/2] ismétel amíg A[I]<X ismétel I:=I+1 avége amíg A[J]>X ismétel J:=J-1 avége ha I<J akkor Csere:=A[I]; A[I]:=A[J]; A[J]:=Csere hvége ha I<=J akkor I:=I+1; J:=J-1 hvége ivége I>J esetén ha Alsó<J akkor GyorsRendezés(Alsó, J) hvége ha I<Felső akkor GyorsRendezés(I, Felső) hvégeeljárás vége

Page 31: 4.2. Rendezések

4.3. Keresések4.3. Keresések

A probléma általános megfogalmazása: adott A probléma általános megfogalmazása: adott egy N elemű sorozat, keressük meg azt az egy N elemű sorozat, keressük meg azt az elemet (határozzuk meg a helyét a elemet (határozzuk meg a helyét a sorozatban), mely megfelel egy megadott sorozatban), mely megfelel egy megadott tulajdonságnak. tulajdonságnak.

Ha több ilyen van, akkor a keresőalgoritmusok Ha több ilyen van, akkor a keresőalgoritmusok általában az első ilyen elemet találják meg. általában az első ilyen elemet találják meg.

A konkrét megvalósításoknál mi egy adott A konkrét megvalósításoknál mi egy adott értéket keresünk. értéket keresünk.

Page 32: 4.2. Rendezések

Lineáris keresés Lineáris keresés

Más néven: szekvenciális keresés. Más néven: szekvenciális keresés. Elölről kezdve sorra vizsgáljuk a Elölről kezdve sorra vizsgáljuk a

sorozat elemeit. sorozat elemeit. A keresés sikertelenségét jelzi, hogy A keresés sikertelenségét jelzi, hogy

a sorozat végére érve nem találtuk a sorozat végére érve nem találtuk meg a keresett adatot.meg a keresett adatot.

Page 33: 4.2. Rendezések

a, Rendezetlen sorozatbana, Rendezetlen sorozatbanalgoritmus Szekvenciális_keresés változó I, Hely:egész változó Adat: ElemTípus változó Talált: logikai I:=1 amíg (I<=N) és (A[I]<>Adat) ismétel I:=I+1 avége Talált := I<=N ha Talált akkor Hely:=I hvégealgoritmus vége

N elemű sorozat esetén minimum 1, maximum N, átlagosan (N+1)/2 ciklusvégrehajtás után találja meg a keresett elemet; vagy N összehason-lítás után derül ki, hogy nincs meg a keresett elem.

Page 34: 4.2. Rendezések

b, Rendezett sorozatbanb, Rendezett sorozatbanalgoritmus Rendezett_Szekvenciális_keresés változó I, Hely:egész változó Adat: ElemTípus változó Talált: logikai I:=1 amíg (I<=N) és (A[I]<Adat) ismétel I:=I+1 avége Talált := (I<=N) és (A[I]=Adat) ha Talált akkor Hely:=I hvégealgoritmus vége

Az előzőhöz képest növeli a hatékonyságot, hogy akkor is leáll a keresés, ha nagyobb elemre lépünk, mint a keresett érték. Viszont hátrány, hogy előfeltétel a rendezettség.

Page 35: 4.2. Rendezések

c, Keresési gyakoriság c, Keresési gyakoriság szerintszerint

Rendezhető a sorozat keresési gyakoriság szerint Rendezhető a sorozat keresési gyakoriság szerint is (is (konyhapolc elvkonyhapolc elv). ).

Ekkor azEkkor az a a,, algoritmus átlagosan kevesebb, mint algoritmus átlagosan kevesebb, mint (N+1)/2 ciklusvégrehajtás után találja meg a (N+1)/2 ciklusvégrehajtás után találja meg a keresett elemet.keresett elemet.

Gyakoriság szerint rendezhetünk:Gyakoriság szerint rendezhetünk: Létrehozunk egy párhuzamos számlálótömböt, és Létrehozunk egy párhuzamos számlálótömböt, és

időnként ez alapján csökkenő sorrendbe rendezzük az időnként ez alapján csökkenő sorrendbe rendezzük az adattömböt.adattömböt.

Önszerveződő struktúra: valahányszor sikeresen Önszerveződő struktúra: valahányszor sikeresen megtaláltunk egy elemet, az eredetileg előtte lévőket megtaláltunk egy elemet, az eredetileg előtte lévőket eggyel hátrébb léptetjük, majd azt a sorozat legelejére eggyel hátrébb léptetjük, majd azt a sorozat legelejére helyezzük.helyezzük.

Page 36: 4.2. Rendezések

d, Ütközős (strázsás) d, Ütközős (strázsás) kereséskeresés

A kereső ciklus összetett feltételét A kereső ciklus összetett feltételét egyszerűsítjük le. egyszerűsítjük le.

A sorozat végére felvesszük a keresett A sorozat végére felvesszük a keresett adatot, így felesleges vizsgálni, hogy adatot, így felesleges vizsgálni, hogy túlhaladtunk-e a sorozaton (I<=N), hiszen túlhaladtunk-e a sorozaton (I<=N), hiszen mindenképpen megtaláljuk a keresett mindenképpen megtaláljuk a keresett elemet. elemet.

Főképp nagy elemszámú sorozatoknál Főképp nagy elemszámú sorozatoknál hatéko-nyabb az egyszerű lineáris hatéko-nyabb az egyszerű lineáris keresésnél, mivel a ciklusfeltétel kiértékelése keresésnél, mivel a ciklusfeltétel kiértékelése lényegesen rövidebb lesz.lényegesen rövidebb lesz.

Page 37: 4.2. Rendezések

algoritmus Strázsás_Szekvenciális_keresés változó I, Hely:egész változó Adat: ElemTípus változó Talált: logikai A[N+1]:=Adat I:=1 amíg A[I]<>Adat ismétel I:=I+1 avége Talált := I<=N ha Talált akkor Hely:=I hvégealgoritmus vége

Page 38: 4.2. Rendezések

Bináris keresés Bináris keresés

Más néven: felezéses keresés. Más néven: felezéses keresés. Csak Csak rendezettrendezett sorozaton valósítható meg. sorozaton valósítható meg. Algoritmus:Algoritmus:

Meghatározzuk a középső elemet, majd megvizsgáljuk Meghatározzuk a középső elemet, majd megvizsgáljuk ez-e a keresett. ez-e a keresett.

Ha nem, akkor ha a keresett kisebb a középsőnél, akkor Ha nem, akkor ha a keresett kisebb a középsőnél, akkor a sorozat alsó, egyébként a felső részébe folytatjuk a a sorozat alsó, egyébként a felső részébe folytatjuk a keresést.keresést.

A keresés két esetben fejeződhet be:A keresés két esetben fejeződhet be: megtaláltuk a keresett adatot;megtaláltuk a keresett adatot; a részsorozat alsó indexe (E) nagyobb a felső (U), nincs a részsorozat alsó indexe (E) nagyobb a felső (U), nincs

benne a sorozatban a keresett adat.benne a sorozatban a keresett adat.

Page 39: 4.2. Rendezések

algoritmus Bináris_keresés változó Alsó, Felső, Közép, Hely:egész változó Adat: ElemTípus változó Talált: logikai Alsó:=1; Felső:=N; Közép:=(Alsó+Felső)/2 amíg (Alsó<=Felső) és (A[Közép]<>Adat) ismétel ha Adat<A[Közép] akkor Felső:=Közép-1 különben Alsó:=Közép+1 hvége

Közép:=(Alsó+Felső)/2 avége Talált := Alsó<=Felső ha Talált akkor Hely:=Közép hvége

Page 40: 4.2. Rendezések

Szokásos logaritmikus keresésnek is Szokásos logaritmikus keresésnek is nevezni, mivel nevezni, mivel 22kk elemű sorozatot elemű sorozatot kk lépésben vizsgálhatunk végig. lépésben vizsgálhatunk végig.

Tehát egy Tehát egy nn elemű sorozatnál átlagosan elemű sorozatnál átlagosan loglog22nn hasonlítás után találja meg az elemet, hasonlítás után találja meg az elemet, vagy derül ki, hogy nincs ilyen.vagy derül ki, hogy nincs ilyen.

Ez egymillió elem esetén kb. 20 lépést Ez egymillió elem esetén kb. 20 lépést jelent, tehát igen látványos a különbség a jelent, tehát igen látványos a különbség a lineáris módszerhez képest.lineáris módszerhez képest.

Probléma lehet a rendezettség fenntartása Probléma lehet a rendezettség fenntartása mellett az, hogy nem minden mellett az, hogy nem minden adatszerkezetnél címezhető meg a középső adatszerkezetnél címezhető meg a középső elem (pl. láncolt lista). elem (pl. láncolt lista).

Page 41: 4.2. Rendezések

Bár nem olyan hatékony, de kínálja magát a rekurzív megoldás:

eljárás BinKeres(Alsó, Felső: egész) változó Közép, Hely:egész ha Alsó<=Felső akkor Közép:=(Alsó+Felső)/2 elágazás amikor Adat<A[Közép]: BinKeres(Alsó,Közép-1) amikor Adat>A[Közép]: BinKeres(Közép+1,Felső) különben Talált:=Igaz Hely:=Közép evége különben Talalt:=Hamis hvégeeljárás vége