Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Leszámoló rendezés Készítette: Várkonyi Tibor Zoltán VATNABI.ELTE

Hasonló előadás


Az előadások a következő témára: "Leszámoló rendezés Készítette: Várkonyi Tibor Zoltán VATNABI.ELTE"— Előadás másolata:

1 Leszámoló rendezés Készítette: Várkonyi Tibor Zoltán VATNABI.ELTE
mocman[kukac]inf[pont]elte[pont]hu

2 Szétosztva leszámoló rendezés
Előnyei: Gyors Lineáris végrehajtási idejű Nem használ elágazásokat Hátrányai: Nem helyben rendező algoritmus Ezért nagy tárterületet igényel (2× vektor hossza+ vektor értékkészlete számú egész) Csak megszámlálható típusokkal működik (pl. int, char)* *: Egy jó hash függvénnyel adható az értékekhez int-re való leképezés

3 Struktogram J=1 N: A rendezendő elemek száma while J<=N
SZ[K[J]]:=SZ[K[J]]+1 J:=J+1 U,V: Az elemek értékhatárai (min,max) K: vektor(1..N) – a rendezendő elemek S: vektor(1..N) – az eredmény vektora I:=U+1 SZ: vektor(U..V) – segédvektor az egyes elemek számának meghatározására while I<=V SZ[I]:=SZ[I]+SZ(I-1) I:=I+1 I,J: Ciklusváltozók J:=N while J>=1 I:=SZ[K[J]] S[I]:=K[J] SZ[K[J]]:=SZ[K[J]]-1 J:=J-1

4 Működés 1. Legyen egy tömbünk a rendezni kívánt elemekkel N=5 U=1 V=8
2 3 1 SZ: 1 1 3 2 1 2 1 3 4 1 4 4 4 4 1 5 4 2. Számláló ciklus 3. Index-átszámoló ciklus 4. Eredmény olvasás 1 ? 2 2 3 8 5. Algoritmus vége

5 Alkalmazás I. Példa: egy 1024×1024 méretű digitális kép pontjai 0 és 255 közötti értékeket vehetnek fel. Rendezzük az értékeket egy 220 méretű tömbben! A feladat C++ nyelven megírt megoldása a következő oldalon található

6 Alkalmazás II. int main(int argc, char *argv[]) { int n=1024*1024; int v=256; int k[n]; int s[n]; int sz[v]; int i, j; for (i=0;i<v;++i) sz[i]=0; for (i=0;i<n;++i) k[i]=int(rand())%v; for (j=0;j<n;++j) ++sz[k[j]]; for (i=1;i<v;++i) sz[i]+=sz[i-1]; for (j=n-1;j>=0;--j) { i=sz[k[j]]-1; s[i]=k[j]; sz[k[j]]=sz[k[j]]-1; } return 0;

7 Vége


Letölteni ppt "Leszámoló rendezés Készítette: Várkonyi Tibor Zoltán VATNABI.ELTE"

Hasonló előadás


Google Hirdetések