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

Hasonló dokumentumok
Önszervező bináris keresőfák

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

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

Algoritmusok és Adatszerkezetek II. előadás

9. előadás. A táblázat. A táblázatról általában, soros, önátrendező, rendezett és kulcstranszformációs táblázat

Algoritmusok és Adatszerkezetek II.

Táblázatok fontosabb műveletei 1

Algoritmusok és adatszerkezetek II.

Adatszerkezet - műveletek

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

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Algoritmusok és adatszerkezetek II.

Algoritmusok és adatszerkezetek II.

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

A kurzus teljesítésének feltételei. Az I404 kódú kurzus teljesítéséhez meg kell oldani egy otthoni feladatot, határidő április 30.

Példa 30 14, 22 55,

Algoritmusok és adatszerkezetek II.

Elemi adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 07

Algoritmusok és adatszerkezetek II.

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

Algoritmusok bonyolultsága

C# feladatok gyűjteménye

Hasító táblázatok. Hasító függvények, kulcsütközés kezelése. Programozás II. előadás. Szénási Sándor

Egyesíthető prioritási sor

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

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

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

Adatszerkezetek 2. Dr. Iványi Péter

Adatszerkezetek Hasító táblák. Dr. Iványi Péter

Adatszerkezetek 7a. Dr. IványiPéter

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Rendezettminta-fa [2] [2]

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

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

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

Algoritmusok és adatszerkezetek 2.

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

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

Programozás alapjai II. (7. ea) C++

Programozás II. előadás

Programozási technológia

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

Generikus osztályok, gyűjtemények és algoritmusok

INFORMATIKA javítókulcs 2016

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Gráfelméleti feladatok. c f

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.

Felhasználó által definiált adattípus

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

Algoritmusok és adatszerkezetek I. 1. előadás

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

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

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

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

Adatszerkezetek 1. Dr. Iványi Péter

1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok. HálózatokII, 2007

Adatszerkezetek 1. előadás

14. Mediánok és rendezett minták

2018, Diszkrét matematika

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

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

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

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

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárá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:

Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése

2018, Funkcionális programozás

Algoritmusok bonyolultsága

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.

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

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:

Java II. I A Java programozási nyelv alapelemei

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

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

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

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

4. Előfeltételek (ha vannak) 4.1 Tantervi Nincs 4.2 Kompetenciabeli Elemi algoritmusok ismerete

Bonyolultságelmélet. Thursday 1 st December, 2016, 22:21

Számítógép hálózatok, osztott rendszerek 2009

Kupac adatszerkezet. 1. ábra.

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

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

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

Bevezetés a programozásba 2

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:

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

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Fák Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa

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

6. előadás. Kiegyensúlyozottság, AVL-fa, piros-fekete fa. Adatszerkezetek és algoritmusok előadás március 6.

Adatszerkezetek és algoritmusok

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.

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

2. Visszalépéses stratégia

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

Diszkrét matematika 2. estis képzés

A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.

.Net adatstruktúrák. Készítette: Major Péter

Átírás:

Hasító táblázatok

Halmaz adattípus U (kulcsuniverzum) K (aktuális kulcsok)

Függvény adattípus U (univerzum) ÉT (értelmezési tartomány) ÉK (érték készlet) Milyen az univerzum?

Közvetlen címzésű táblázatok Erősen korlátozott felhasználhatóság! U U={1,2,..,10} (univerzum) 3 K (aktuális kulcsok) 4 9 7 1 2 3 4 5 6 7 8 9 10 Elem betesz: O(1) Elem keres: O(1) Elem kivesz: O(1)

Megvalósítás U={0,1,2,..,99} int i,t[99] ; for (i=0;i<100;i++) T[i]=0 ; int betesz(int a) {! if (T[a]==0) {!! T[a]=1 ;!! return 1 ; else return 0 ; } boolean keres(int a) {! if (T[a]==1) return true ;! else return false ; } int torol(int a) {! if (T[a]==1) {!! T[a]=0 ;!! return 1 ; else return 0 ; }

Korlátozott felhasználhatóság megszűnik? U={0,1,2,..} U={..,-1,0,1,..} nem használhatunk végtelen tömböt! U... -7-6 -5-4 -3-2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23......... T 0 1 2 3 4 5 6 7 8 9

Hasító táblázat f(x) hasító függvény U (univerzum) T[0..m-1] f(k) k (aktuális kulcsok) k4 k2 k1 k3 f(k4) f(k2) f(k3) k4 k2 k3 pl.: f(x)=x mod m f(k1) k1

Hasító táblázat példa pl.: f(x)=x mod 10 U (univerzum) T[0..9] f(k) k (aktuális kulcsok) 3 44 127 19 1 2 3 4 5 6 7 8 9 10 3 44 127 19

Ütközésfeloldás nyílt címzéssel U T[0..m-1] (univerzum) f(k) k k (aktuális kulcsok) k4 k2 k1 k3 f(k4) f(k2) f(k3) k4 k2 k3 pl.: f(x,i)=(x+i) mod m i=0,1,2,...,m-1 f(k1) k1

Adott kulcsú elem megkeresése T[0..9] f(k) k 0 1 2 3 4 5 6 7 8 - - - 93 T 53 T 87 37 24 keres(k) {! i=0 ;! do {!! j=h(k,i++) ;!! if (T[j]==k) return j ; while (T[j]!=nil && i!=m) ;! return nil ; } 9 - Törlést kiegészítő művelet?

Ütközésfeloldás láncolással pl.: f(x)=x mod 10 U (univerzum) T[0..9] f(k) k (aktuális kulcsok) 3 47 127 1 2 3 4 5 6 7 8 9 10 3 47 127

Adatszerkezet public class HashT {! int elemszam=0 ;! class hastomb {!! elemtar elso ;! class elemtar {!! int kulcs ;!! elemtar kovetkezo ;! elemtar nil ;! hastomb[] HT=new hastomb[m] ;! HashT() {!! nil=new elemtar() ;!! int i ;!! for (i=1;i<n;i++) HT[i].elso=nil ;!... } HT[0..m] f(k) 1 2 3 4 5 m nil

Adott kulcsú elem megkeresése public class HashT {!...! int hasit(int k) {!! return k % m ;! elemtar keres(int k) {!! elemtar q=ht[hasit(k)].elso ;!! while (q!=nil && q.kulcs!=k) q=q.kovetkezo ;!! return q ;!... }

Mennyi ideig tart egy adott kulcsú elem megkeresése? Legyen T egy m rést tartalmazó hasító táblázat amelyikben n elem van T[0..m-1] f(k) 1 α kitöltési tényező az egy láncba fűzött elemek átlagos száma Legrosszabb eset elemzés: 2 3=f(k1) 4=f(k2) 5 6 7=f(k3) k1 k2 k3 mind az n elem egy láncba képződik le keresés végrehajtási ideje: O(n) m-2=f(kn) m-1 kn

Adott kulcsú elem beszúrása! int beszur(int k) {!! elemtar elozo ;!! elemtar q=ht[hasit(k)].elso ;!! while (q!=nil && q.kulcs!=k) {!!! elozo=q ;!!! q=q.kovetkezo ;!!! if (q!=nil) return -1;!! else {!!! elemtar p=new elemtar() ;!!! elozo.kovetkezo=p ;!!! p.kulcs=k ;!!! p.kovetkezo=nil ;!

Adott kulcsú elem törlése! int torol(int k) {!! elemtar elozo ;!! elemtar q=ht[hasit(k)].elso ;!! while (q!=nil && q.kulcs!=k) {!!! elozo=q ;!!! q=q.kovetkezo ;!!! if (q==nil) return -1;!! else {!!! elozo.kovetkezo=q.kovetkezo ;!!! return 0 ;!

Feltételezhetjük, hogy minden elem egyforma valószínűséggel képződik le bármely résre, függetlenül attól, hogy a többiek hová kerültek Ezt egyszerű egyenletes hasítási feltételnek nevezzük T[j] lista hosszát jelöljük nj-vel. (j=0,1,..., m-1) ekkor n = n0 + n1 +... + nm-1 és nj várható értéke:

Hasítófüggvény megválasztása pl. rgb(240,0,127) rgb(r,g,b) (65536r + 256g + b) mod m rgb(r,g,b) (66563r + 257g + b) mod m pl. float pl. float interval

Tétel: Láncolásos ütközésfeloldásnál, ha a hasítás egyszerű egyenletes, akkor a sikertelen keresés átlagos ideje: O(1+α). Biz.: A sikertelen keresés átlagos ideje megegyezik annak átlagos idejével hogy a T[f(k)] listát végigkeressük. Ennek a listának az átlagos hossza α. f(k) kiszámítási ideje 1. Így a sikertelen keresés átlagos ideje: O(1+α)

Tétel: Láncolásos ütközésfeloldásnál, ha a hasítás egyszerű egyenletes, akkor a sikeres keresés átlagos ideje: O(1+α). Megjegyzés: A sikeres keresés abban különbözik a sikertelentől, hogy nem feltétlenül kell a T[f(k)] listát végigkeressük, így az átlagos idő nem lehet több mint a sikertelen keresés átlagos ideje.

Következtetések Ha α konstans, a keresés, beszúrás és törlés ideje O(1)! Hogy lehet biztosítani, hogy az α konstans legyen? Ha m arányos n-el azaz tudjuk előre az adatszerkezetbe kerülő adatok maximális számát (vagy legalább annak nagyságrendjét) Korlátozott felhasználhatóság nem szűnt meg!

Láncolt listák hatékonyságának növelése 1 2 3 4 5 - eleje nil

Ugrólisták (skiplist)

Halmazok egyesítése motiváció Kruskal algoritmus felelevenítés kezdetben a gráf minden pontja külön halmazban van ; vegyük a gráfból az éleket növekvő sorrendben {! ha az él 2 végpontja külön halmazban van {!! az él legyen része a minimális feszítőfának ;!! a 2 végpontot tartalmazó halmazt egyesítsük ; }

Kruskal algoritmus felelevenítés foreach (el from G) {! rep1=rep(el.p) ;! rep2=rep(el.q) ;! if (rep1!=rep2) {!! hozzaad(el) ;!! unio(rep1,rep2) ; }

Halmazerdő adattípus nil

Kruskal algoritmus halmazerdővel foreach (el from G) {! rep1=rep(el.p) ;! rep2=rep(el.q) ;! if (rep1!=rep2) {!! hozzaad(el) ;!! unio(rep1,rep2) ; } gpont rep(gpont p) {! gpont q;! while (p.kovetkezo!=nil) {!! q=p ;!! p=p.kovetkezo ;! return q ; }

Kruskal algoritmus halmazerdővel gpont rep(gpont p) {! gpont q;! while (p.kovetkezo!=nil) {!! q=p ;!! p=p.kovetkezo ;! return q ; } nil foreach (el from G) {! rep1=rep(el.p) ;! rep2=rep(el.q) ;! if (rep1!=rep2) {!! hozzaad(el) ;!! unio(rep1,rep2) ; } rep1 unio(rep1,rep2) {! rep2.kovetkezo=rep1 ; } rep2

Halmazerdő tömörítése gpont rep(gpont p) {! gpont q;! while (p.kovetkezo!=nil) {!! q=p ;!! p=p.kovetkezo ;!! q.kovetkezo=p.kovetkezo ;! return p ; } p q

Halmazerdő hatékonyabb tömörítése gpont rep(gpont p) {! gpont q;! while (p.kovetkezo!=nil) {!! if (p.kovetkezo.kovetkezo!=nil) sorba(p) ;!! p=p.kovetkezo ;! while (!sor_ures()) {!! q=sorbol() ;!! q.kovetkezo=p ;! return p ; } 5 3 4 1 q 6 2 p 4 7 5 3

Halmazerdő átlagos magassága foreach (el from G) {! rep1=rep(el.p) ;! rep2=rep(el.q) ;! if (rep1!=rep2) {!! hozzaad(el) ;!! unio(rep1,rep2) ; } unio 1-el hosszabítja az utakat rep néha 1-el/1-re rövidíti az utakat rep legalább 2-szer többször fut le mint unio HF: halmazerdő átlagos magassága Futási idő elemzése: [2] 444-455

Referenciák [1] T. H. Cormen, C. E. Leiserson, R.L. Rivest: Algoritmusok, Műszaki Könyvkiadó, 2003. [2] T. H. Cormen, C. E. Leiserson, R.L. Rivest, C. Stein: Új algoritmusok, Scolar Kiadó, 2003. [3] T. Ottman, P. Widmayer: Algoritmen und Datenstrukturen, Wissenschaftsverlag, 1990