• Nem Talált Eredményt

Adatstruktúrák és Algoritmusok

N/A
N/A
Protected

Academic year: 2022

Ossza meg "Adatstruktúrák és Algoritmusok"

Copied!
126
0
0

Teljes szövegt

(1)

Adatstruktúrák és

Algoritmusok

(2)

7. gyakorlat

Hasítótáblák, feloszt algoritmus

(3)

Hasítótábla

(4)

A hasítótábla azt a szituációt kezeli, amikor nagy a kulcstartomány, de csak kevés kulcsot kell kezelnünk.

Ekkor szükségünk van egy hasítófüggvényre. Ahasítófüggvény kulcshoz memóriacímet rendel.

Mivel nagy a kulcstartomány (azaz sok lehetséges kulcs van), de csak kevés a tárterület, így szükségszerűen bekövetkezik az a probléma, hogy a hasítófüggvény több kulcshoz ugyanazt a memóriacímet rendeli. Ezt a jelenséget nevezzükütközésnek.

(5)

A hasítótábla azt a szituációt kezeli, amikor nagy a kulcstartomány, de csak kevés kulcsot kell kezelnünk.

Ekkor szükségünk van egy hasítófüggvényre. Ahasítófüggvény kulcshoz memóriacímet rendel.

Mivel nagy a kulcstartomány (azaz sok lehetséges kulcs van), de csak kevés a tárterület, így szükségszerűen bekövetkezik az a probléma, hogy a hasítófüggvény több kulcshoz ugyanazt a memóriacímet rendeli. Ezt a jelenséget nevezzükütközésnek.

(6)

A hasítótábla azt a szituációt kezeli, amikor nagy a kulcstartomány, de csak kevés kulcsot kell kezelnünk.

Ekkor szükségünk van egy hasítófüggvényre. Ahasítófüggvény kulcshoz memóriacímet rendel.

Mivel nagy a kulcstartomány (azaz sok lehetséges kulcs van), de csak kevés a tárterület, így szükségszerűen bekövetkezik az a

(7)

Az ütközésfeloldás típusai

Közvetlen címzés: ütközés feloldása: láncolt lista alkalmazásával történik. Tehát a táblázat rései

memóriacímeket tartalmaznak. Ezek láncolt listák fejei. A dolgozó adataihoz a megfelelő láncolt listán keresztül lehet eljutni. Kulcsot törölni a láncolt listáknál tanult módon lehet. Nyíltcímzéses hasításTömbös implementációt használunk. Háromféle módszert tanulunk, ezek a következők:

1 lineáris kipróbálás

2 négyzetes kipróbálás

3 dupla hasítás

Műveletek: beszúrás, keresés, törlés.

Állapotok: Sz (szabad), F (foglalt), T (törölt).

(8)

Az ütközésfeloldás típusai

Közvetlen címzés: ütközés feloldása: láncolt lista alkalmazásával történik. Tehát a táblázat rései

memóriacímeket tartalmaznak. Ezek láncolt listák fejei. A dolgozó adataihoz a megfelelő láncolt listán keresztül lehet eljutni. Kulcsot törölni a láncolt listáknál tanult módon lehet.

Nyíltcímzéses hasításTömbös implementációt használunk. Háromféle módszert tanulunk, ezek a következők:

1 lineáris kipróbálás

2 négyzetes kipróbálás

3 dupla hasítás

Műveletek: beszúrás, keresés, törlés.

Állapotok: Sz (szabad), F (foglalt), T (törölt).

(9)

Az ütközésfeloldás típusai

Közvetlen címzés: ütközés feloldása: láncolt lista alkalmazásával történik. Tehát a táblázat rései

memóriacímeket tartalmaznak. Ezek láncolt listák fejei. A dolgozó adataihoz a megfelelő láncolt listán keresztül lehet eljutni. Kulcsot törölni a láncolt listáknál tanult módon lehet.

Nyíltcímzéses hasításTömbös implementációt használunk.

Háromféle módszert tanulunk, ezek a következők:

1 lineáris kipróbálás

2 négyzetes kipróbálás

3 dupla hasítás

Műveletek: beszúrás, keresés, törlés.

Állapotok: Sz (szabad), F (foglalt), T (törölt).

(10)

Az ütközésfeloldás típusai

Közvetlen címzés: ütközés feloldása: láncolt lista alkalmazásával történik. Tehát a táblázat rései

memóriacímeket tartalmaznak. Ezek láncolt listák fejei. A dolgozó adataihoz a megfelelő láncolt listán keresztül lehet eljutni. Kulcsot törölni a láncolt listáknál tanult módon lehet.

Nyíltcímzéses hasításTömbös implementációt használunk.

Háromféle módszert tanulunk, ezek a következők:

2 négyzetes kipróbálás

3 dupla hasítás

Műveletek: beszúrás, keresés, törlés.

Állapotok: Sz (szabad), F (foglalt), T (törölt).

(11)

Az ütközésfeloldás típusai

Közvetlen címzés: ütközés feloldása: láncolt lista alkalmazásával történik. Tehát a táblázat rései

memóriacímeket tartalmaznak. Ezek láncolt listák fejei. A dolgozó adataihoz a megfelelő láncolt listán keresztül lehet eljutni. Kulcsot törölni a láncolt listáknál tanult módon lehet.

Nyíltcímzéses hasításTömbös implementációt használunk.

Háromféle módszert tanulunk, ezek a következők:

1 lineáris kipróbálás

2 négyzetes kipróbálás

3 dupla hasítás

Műveletek: beszúrás, keresés, törlés.

Állapotok: Sz (szabad), F (foglalt), T (törölt).

(12)

Az ütközésfeloldás típusai

Közvetlen címzés: ütközés feloldása: láncolt lista alkalmazásával történik. Tehát a táblázat rései

memóriacímeket tartalmaznak. Ezek láncolt listák fejei. A dolgozó adataihoz a megfelelő láncolt listán keresztül lehet eljutni. Kulcsot törölni a láncolt listáknál tanult módon lehet.

Nyíltcímzéses hasításTömbös implementációt használunk.

Háromféle módszert tanulunk, ezek a következők:

Műveletek: beszúrás, keresés, törlés.

Állapotok: Sz (szabad), F (foglalt), T (törölt).

(13)

Az ütközésfeloldás típusai

Közvetlen címzés: ütközés feloldása: láncolt lista alkalmazásával történik. Tehát a táblázat rései

memóriacímeket tartalmaznak. Ezek láncolt listák fejei. A dolgozó adataihoz a megfelelő láncolt listán keresztül lehet eljutni. Kulcsot törölni a láncolt listáknál tanult módon lehet.

Nyíltcímzéses hasításTömbös implementációt használunk.

Háromféle módszert tanulunk, ezek a következők:

1 lineáris kipróbálás

2 négyzetes kipróbálás

3 dupla hasítás

Műveletek: beszúrás, keresés, törlés.

Állapotok: Sz (szabad), F (foglalt), T (törölt).

(14)

Az ütközésfeloldás típusai

Közvetlen címzés: ütközés feloldása: láncolt lista alkalmazásával történik. Tehát a táblázat rései

memóriacímeket tartalmaznak. Ezek láncolt listák fejei. A dolgozó adataihoz a megfelelő láncolt listán keresztül lehet eljutni. Kulcsot törölni a láncolt listáknál tanult módon lehet.

Nyíltcímzéses hasításTömbös implementációt használunk.

Háromféle módszert tanulunk, ezek a következők:

1 lineáris kipróbálás

2 négyzetes kipróbálás

3 dupla hasítás

(15)

Beszúrás

Bármelyik módszert alkalmazzuk a fenti három közül (lineáris kipróbálás, négyzetes kipróbálás, dupla hasítás) van két függvényünk:

ah0(k) amely ak kulcshoz memóriacímet rendel,

illetve a h(k,i), amelyneki =0 esetén az értéke azonos a h0(k)értékével, míg i =1, 2,. . . ,m−1 esetén ah(k,i) függvény segítségével végig lehet vele ugrálni a k kulcs által meghatározott sorrendben a táblázat összes résén.

(16)

Beszúrás

Bármelyik módszert alkalmazzuk a fenti három közül (lineáris kipróbálás, négyzetes kipróbálás, dupla hasítás) van két függvényünk:

ah0(k) amely ak kulcshoz memóriacímet rendel,

illetve a h(k,i), amelyneki =0 esetén az értéke azonos a h0(k)értékével, míg i =1, 2,. . . ,m−1 esetén ah(k,i) függvény segítségével végig lehet vele ugrálni a k kulcs által meghatározott sorrendben a táblázat összes résén.

(17)

Beszúrás

Bármelyik módszert alkalmazzuk a fenti három közül (lineáris kipróbálás, négyzetes kipróbálás, dupla hasítás) van két függvényünk:

ah0(k) amely ak kulcshoz memóriacímet rendel,

illetve a h(k,i), amelyneki =0 esetén az értéke azonos a h0(k)értékével, míg i =1, 2,. . . ,m−1 esetén ah(k,i) függvény segítségével végig lehet vele ugrálni a k kulcs által meghatározott sorrendben a táblázat összes résén.

(18)

Beszúrás

Bármelyik módszert alkalmazzuk a fenti három közül (lineáris kipróbálás, négyzetes kipróbálás, dupla hasítás) van két függvényünk:

ah0(k) amely ak kulcshoz memóriacímet rendel,

illetve a h(k,i), amelyneki =0 esetén az értéke azonos a

(19)

Kezdetben minden rés állapota Sz. Ekkor ah0(k) és ah(k,0) ad egy címet, ahová a k kulcsot beszúrjuk és a rés állapotát Sz-ről F-re állítjuk. Általában a beszúrás úgy történik, hogy ah(k,i) függvény által előírt sorrendben addig ugrálunk résről résre, amíg Sz, vagy T állapotú résre találunk, ide beszúrjuk a kulcsot, majd a rés állapotát F-re állítjuk.

(20)

Keresés

Ak kulcsú rekordot keressük. Ah0(k) és ah(k,i)függvények által meghatározott sorrendben F, vagy T állapotú réseken ugrálunk. Az F állapotú rések esetén ellenőrizni kell, hogy megtaláltuk-e azk kulcsú rekordot. T állapot esetén tovább kell folytatni a keresést. A keresés kétféle eredménnyel zárulhat:

Valamely F állapotú rés esetén megtaláljuk ak kulcsú rekordot. Sz állapotú rést kapunk, ami azt jelenti, hogy a táblázatban nem szerepel az adott kulcsú rekord. A keresés művelete rávilágít arra, hogy miért van szükségünk az T állapotra. Ha a törlés alkalmával a rés állapotát F-ről Sz-re állítanánk, akkor ez az Sz állapotú rés olyan kulcs esetén is leállítaná a keresést "nincs a táblázatban" eredménnyel, amely szerepel a táblázatban.

(21)

Keresés

Ak kulcsú rekordot keressük. Ah0(k) és ah(k,i)függvények által meghatározott sorrendben F, vagy T állapotú réseken ugrálunk. Az F állapotú rések esetén ellenőrizni kell, hogy megtaláltuk-e azk kulcsú rekordot. T állapot esetén tovább kell folytatni a keresést. A keresés kétféle eredménnyel zárulhat:

Valamely F állapotú rés esetén megtaláljuk ak kulcsú rekordot. Sz állapotú rést kapunk, ami azt jelenti, hogy a táblázatban nem szerepel az adott kulcsú rekord. A keresés művelete rávilágít arra, hogy miért van szükségünk az T állapotra. Ha a törlés alkalmával a rés állapotát F-ről Sz-re állítanánk, akkor ez az Sz állapotú rés olyan kulcs esetén is leállítaná a keresést "nincs a táblázatban" eredménnyel, amely szerepel a táblázatban.

(22)

Keresés

Ak kulcsú rekordot keressük. Ah0(k) és ah(k,i)függvények által meghatározott sorrendben F, vagy T állapotú réseken ugrálunk. Az F állapotú rések esetén ellenőrizni kell, hogy megtaláltuk-e azk kulcsú rekordot. T állapot esetén tovább kell folytatni a keresést. A keresés kétféle eredménnyel zárulhat:

Valamely F állapotú rés esetén megtaláljuk ak kulcsú rekordot.

Sz állapotú rést kapunk, ami azt jelenti, hogy a táblázatban nem szerepel az adott kulcsú rekord. A keresés művelete rávilágít arra, hogy miért van szükségünk az T állapotra. Ha a törlés alkalmával a rés állapotát F-ről Sz-re állítanánk, akkor ez az Sz állapotú rés olyan kulcs esetén is leállítaná a keresést "nincs a táblázatban" eredménnyel, amely szerepel a táblázatban.

(23)

Keresés

Ak kulcsú rekordot keressük. Ah0(k) és ah(k,i)függvények által meghatározott sorrendben F, vagy T állapotú réseken ugrálunk. Az F állapotú rések esetén ellenőrizni kell, hogy megtaláltuk-e azk kulcsú rekordot. T állapot esetén tovább kell folytatni a keresést. A keresés kétféle eredménnyel zárulhat:

Valamely F állapotú rés esetén megtaláljuk ak kulcsú rekordot.

Sz állapotú rést kapunk, ami azt jelenti, hogy a táblázatban nem szerepel az adott kulcsú rekord. A keresés művelete rávilágít arra, hogy miért van szükségünk az T állapotra.

Ha a törlés alkalmával a rés állapotát F-ről Sz-re állítanánk, akkor ez az Sz állapotú rés olyan kulcs esetén is leállítaná a keresést "nincs a táblázatban" eredménnyel, amely szerepel a táblázatban.

(24)

Keresés

Ak kulcsú rekordot keressük. Ah0(k) és ah(k,i)függvények által meghatározott sorrendben F, vagy T állapotú réseken ugrálunk. Az F állapotú rések esetén ellenőrizni kell, hogy megtaláltuk-e azk kulcsú rekordot. T állapot esetén tovább kell folytatni a keresést. A keresés kétféle eredménnyel zárulhat:

Valamely F állapotú rés esetén megtaláljuk ak kulcsú rekordot.

Sz állapotú rést kapunk, ami azt jelenti, hogy a táblázatban nem szerepel az adott kulcsú rekord. A keresés művelete rávilágít arra, hogy miért van szükségünk az T állapotra.

Ha a törlés alkalmával a rés állapotát F-ről Sz-re állítanánk,

(25)

Törlés

Megkeressük az adott kulcsú rekordot és az állapotát F-ről T-re állítjuk. Ez egy logikai törlés, az adatok fizikailag még jelen vannak, de az adott kulcsú rekord már nem elérhető. Fizikai törlésre akkor kerül sor, amikor rekordot szúrunk be erre a résre, ekkor a rés fizikailag felülíródik az új rekorddal, és a rés állapota T-ről F-re állítódik.

(26)

Törlés

Megkeressük az adott kulcsú rekordot és az állapotát F-ről T-re állítjuk. Ez egy logikai törlés, az adatok fizikailag még jelen vannak, de az adott kulcsú rekord már nem elérhető. Fizikai törlésre akkor kerül sor, amikor rekordot szúrunk be erre a résre, ekkor a rés

(27)

1. Lineáris kipróbálás

h0(k) = k modm,

h(k,i) = (h0(k) +i) mod m (i =0,1, . . . ,m−1). A következő példákbanm=7 (a táblázat sorainak a száma).

(28)

1. Lineáris kipróbálás

h0(k) = k modm,

h(k,i) = (h0(k) +i) mod m (i =0,1, . . . ,m−1).

A következő példákbanm=7 (a táblázat sorainak a száma).

(29)

1. Lineáris kipróbálás

h0(k) = k modm,

h(k,i) = (h0(k) +i) mod m (i =0,1, . . . ,m−1).

A következő példákbanm=7 (a táblázat sorainak a száma).

(30)

Feladat

k=17,127,20,45,17T,81,127T,3,10 (T=törlés). Végezzük el a kijelölt műveleteket lineáris kipróbálás esetén.

Az üres táblázat:

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz Beszúrjuk ak =17-et.

h0(17) =17 mod7=3 h(17,0) = (3+0) mod7=3

(31)

Feladat

k=17,127,20,45,17T,81,127T,3,10 (T=törlés). Végezzük el a kijelölt műveleteket lineáris kipróbálás esetén.

Az üres táblázat:

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz Beszúrjuk ak =17-et.

h0(17) =17 mod7=3 h(17,0) = (3+0) mod7=3

(32)

Feladat

k=17,127,20,45,17T,81,127T,3,10 (T=törlés). Végezzük el a kijelölt műveleteket lineáris kipróbálás esetén.

Az üres táblázat:

0 Sz 1 Sz 2 Sz 3 Sz

Beszúrjuk ak =17-et. h0(17) =17 mod7=3 h(17,0) = (3+0) mod7=3

(33)

Feladat

k=17,127,20,45,17T,81,127T,3,10 (T=törlés). Végezzük el a kijelölt műveleteket lineáris kipróbálás esetén.

Az üres táblázat:

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz Beszúrjuk ak =17-et.

h0(17) =17 mod 7=3 h(17,0) = (3+0) mod7=3

(34)

0 Sz 1 Sz 2 Sz 3 SzF 17 4 Sz 5 Sz

Beszúrjuk ak =127-et. h0(127) =127 mod7=1 h(127,0) = (1+0) mod7=1

(35)

0 Sz 1 Sz 2 Sz 3 SzF 17 4 Sz 5 Sz 6 Sz Beszúrjuk ak =127-et.

h0(127) =127 mod7=1 h(127,0) = (1+0) mod7=1

(36)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz

Beszúrjuk ak =20-at. h0(20) =20 mod7=6 h(20,0) = (6+0) mod7=6

(37)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 Sz Beszúrjuk ak =20-at.

h0(20) =20 mod 7=6 h(20,0) = (6+0) mod7=6

(38)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 SzF 20

Beszúrjuk ak =45-öt. h0(45) =45 mod7=3 h(45,0) = (3+0) mod7=3 h(45,1) = (3+1) mod7=4

(39)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 SzF 20 Beszúrjuk ak =45-öt.

h0(45) =45 mod 7=3 h(45,0) = (3+0) mod7=3 h(45,1) = (3+1) mod7=4

(40)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 SzF 45 5 Sz

Töröljük ak =17-et.

17Th0(17) =17 mod7=3

(41)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 SzF 45 5 Sz 6 SzF 20 Töröljük ak =17-et.

17Th0(17) =17 mod7=3

(42)

0 Sz

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 45

5 Sz

6 SzF 20

Beszúrjuk ak =81-et. h0(81) =81 mod7=4 h(81,0) = (4+0) mod7=4 h(81,1) = (4+1) mod7=5

(43)

0 Sz

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 45

5 Sz

6 SzF 20

Beszúrjuk ak =81-et.

h0(81) =81 mod 7=4 h(81,0) = (4+0) mod7=4 h(81,1) = (4+1) mod7=5

(44)

0 Sz

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 45

5 SzF 81

Töröljük ak =127-et.

127Th0(127) =127 mod 7=1

(45)

0 Sz

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 45

5 SzF 81

6 SzF 20

Töröljük ak =127-et.

127Th0(127) =127 mod 7=1

(46)

0 Sz

1 SzFT 127 2 Sz

3 SzFT 17

4 SzF 45

5 SzF 81

Beszúrjuk ak =3-at. h0(3) =3 mod 7=3

h(3,0) = (3+0) mod7=3

(47)

0 Sz

1 SzFT 127 2 Sz

3 SzFT 17

4 SzF 45

5 SzF 81

6 SzF 20

Beszúrjuk ak =3-at.

h0(3) =3 mod 7=3

h(3,0) = (3+0) mod7=3

(48)

0 Sz

1 SzFT 127

2 Sz

3 SzFTF 173

4 SzF 45

5 SzF 81

6 SzF 20

Beszúrjuk ak =10-et. h0(10) =10 mod7=3

h(10,0) = (3+0) mod7=3 h(10,1) = (3+1) mod7=4 h(10,2) = (3+2) mod7=5 h(10,3) = (3+3) mod7=6 h(10,4) = (3+4) mod7=0

(49)

0 Sz

1 SzFT 127

2 Sz

3 SzFTF 173

4 SzF 45

5 SzF 81

6 SzF 20

Beszúrjuk ak =10-et.

h0(10) =10 mod 7=3

h(10,0) = (3+0) mod7=3 h(10,1) = (3+1) mod7=4 h(10,2) = (3+2) mod7=5 h(10,3) = (3+3) mod7=6 h(10,4) = (3+4) mod7=0

(50)

0 Sz F 10 1 Sz F T 127 2 Sz

3 Sz F T F 17 3

4 Sz F 45

(51)

2. Négyzetes kipróbálás

h0(k) = k mod m, h(k,i) =

h0(k) +i(i+1) 2

modm (i =0,1, . . . ,m−1).

Állapotok: Sz (szabad), F (foglalt), T (törölt). m=7 (a táblázat sorainak a száma).

(52)

2. Négyzetes kipróbálás

h0(k) = k mod m, h(k,i) =

h0(k) +i(i+1) 2

modm (i =0,1, . . . ,m−1).

Állapotok: Sz (szabad), F (foglalt), T (törölt). m=7 (a táblázat sorainak a száma).

(53)

2. Négyzetes kipróbálás

h0(k) = k mod m, h(k,i) =

h0(k) +i(i+1) 2

modm (i =0,1, . . . ,m−1).

Állapotok: Sz (szabad), F (foglalt), T (törölt).

m=7 (a táblázat sorainak a száma).

(54)

2. Négyzetes kipróbálás

h0(k) = k mod m, h(k,i) =

h0(k) +i(i+1) 2

modm (i =0,1, . . . ,m−1).

(55)

Feladat

k=17,127,20,45,17T,81,127T,3,10. Végezzük el a kijelölt műveleteket négyzetes kipróbálás esetén.

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz

(56)

Feladat

k=17,127,20,45,17T,81,127T,3,10. Végezzük el a kijelölt műveleteket négyzetes kipróbálás esetén.

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz

(57)

Feladat

k=17,127,20,45,17T,81,127T,3,10. Végezzük el a kijelölt műveleteket négyzetes kipróbálás esetén.

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz

(58)

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz

Beszúrjuk ak =17-et. h0(17) =17 mod7=3 h(17,0) = 3+0·12

mod7=3

(59)

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz Beszúrjuk ak =17-et.

h0(17) =17 mod 7=3 h(17,0) = 3+0·12

mod7=3

(60)

0 Sz 1 Sz 2 Sz 3 SzF 17 4 Sz 5 Sz 6 Sz

Beszúrjuk ak =127-et. h0(127) =127 mod7=1 h(127,0) = 1+0·12

mod7=1

(61)

0 Sz 1 Sz 2 Sz 3 SzF 17 4 Sz 5 Sz 6 Sz Beszúrjuk ak =127-et.

h0(127) =127 mod7=1 h(127,0) = 1+0·12

mod7=1

(62)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 Sz

Beszúrjuk ak =20-at. h0(20) =20 mod7=6 h(20,0) = 6+0·12

mod7=6

(63)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 Sz Beszúrjuk ak =20-at.

h0(20) =20 mod 7=6 h(20,0) = 6+0·12

mod7=6

(64)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 SzF 20

Beszúrjuk ak =45-öt. h0(45) =45 mod7=3 h(45,0) = 3+0·12

mod7=3 h(45,1) = 3+1·22

mod7=4

(65)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 SzF 20 Beszúrjuk ak =45-öt.

h0(45) =45 mod 7=3 h(45,0) = 3+0·12

mod7=3 h(45,1) = 3+1·22

mod7=4

(66)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 SzF 45 5 Sz 6 SzF 20

Töröljük ak =17-et.

17Th0(17) =17 mod7=3 h(17,0) = 3+0·12

mod7=3

(67)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 SzF 45 5 Sz 6 SzF 20 Töröljük ak =17-et.

17Th0(17) =17 mod7=3 h(17,0) = 3+0·12

mod7=3

(68)

0 Sz

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 45

5 Sz

6 SzF 20

Beszúrjuk ak =81-et. h0(81) =81 mod7=4 h(81,0) = 4+0·12

mod7=4 h(81,1) = 4+1·22

mod7=5

(69)

0 Sz

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 45

5 Sz

6 SzF 20

Beszúrjuk ak =81-et.

h0(81) =81 mod 7=4 h(81,0) = 4+0·12

mod7=4 h(81,1) = 4+1·22

mod7=5

(70)

0 Sz

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 45

5 SzF 81

6 SzF 20

Töröljük ak =127-et.

127Th0(127) =127 mod 7=1 h(127,0) = 1+0·12

mod7=1

(71)

0 Sz

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 45

5 SzF 81

6 SzF 20

Töröljük ak =127-et.

127Th0(127) =127 mod 7=1 h(127,0) = 1+0·12

mod7=1

(72)

0 Sz

1 SzFT 127 2 Sz

3 SzFT 17

4 SzF 45

5 SzF 81

6 SzF 20

Beszúrjuk ak =3-at. h0(3) =3 mod 7=3

h(3,0) = 3+0·12

mod7=3

(73)

0 Sz

1 SzFT 127 2 Sz

3 SzFT 17

4 SzF 45

5 SzF 81

6 SzF 20

Beszúrjuk ak =3-at.

h0(3) =3 mod 7=3 h(3,0) = 3+0·12

mod7=3

(74)

0 Sz

1 SzFT 127

2 Sz

3 SzFTF 173

4 SzF 45

5 SzF 81

6 SzF 20

Beszúrjuk ak =10-et. h0(10) =10 mod7=3

h(10,0) = 3+0·12

mod7=3 h(10,1) = 3+1·22

mod7=4 h(10,2) = 3+2·32

mod7=6 h(10,3) = 3+3·42

mod7=2

(75)

0 Sz

1 SzFT 127

2 Sz

3 SzFTF 173

4 SzF 45

5 SzF 81

6 SzF 20

Beszúrjuk ak =10-et.

h0(10) =10 mod 7=3 h(10,0) = 3+0·12

mod7=3 h(10,1) = 3+1·22

mod7=4 h(10,2) = 3+2·32

mod7=6 h(10,3) = 3+3·42

mod7=2

(76)

0 Sz

1 Sz F T 127

2 Sz F 10

3 Sz F T F 17 3

4 Sz F 45

(77)

3. Dupla hasítás

h0(k) = k mod m,

h1(k) = 1+ (k mod (m−1))

h(k,i) = (h0(k) +ih1(k)) mod m (i =0,1, . . . ,m−1). m=7 (a táblázat sorainak a száma).

(78)

3. Dupla hasítás

h0(k) = k mod m,

h1(k) = 1+ (k mod (m−1))

h(k,i) = (h (k) +ih (k)) mod m (i =0,1, . . . ,m−1).

m=7 (a táblázat sorainak a száma).

(79)

3. Dupla hasítás

h0(k) = k mod m,

h1(k) = 1+ (k mod (m−1))

h(k,i) = (h0(k) +ih1(k)) mod m (i =0,1, . . . ,m−1).

m=7 (a táblázat sorainak a száma).

(80)

Feladat

k=17,127,20,45,17T,81,127T,3,10. Végezzük el a kijelölt műveleteket dupla hasítás segítségével.

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz

(81)

Feladat

k=17,127,20,45,17T,81,127T,3,10. Végezzük el a kijelölt műveleteket dupla hasítás segítségével.

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz

(82)

Feladat

k=17,127,20,45,17T,81,127T,3,10. Végezzük el a kijelölt műveleteket dupla hasítás segítségével.

0 Sz 1 Sz 2 Sz 3 Sz

(83)

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz Beszúrjuk ak =17-et.

h0(17) =17 mod 7=3 h1(17) =1+ (17 mod 6) =6

)

h(17,0) = (3+0·6) mod 7=3

(84)

0 Sz 1 Sz 2 Sz 3 Sz 4 Sz 5 Sz 6 Sz Beszúrjuk ak =17-et.

h0(17) =17 mod 7=3 )

(85)

0 Sz 1 Sz 2 Sz 3 SzF 17 4 Sz 5 Sz 6 Sz

Beszúrjuk ak =127-et.

h0(127) =127 mod 7=1 h1(127) =1+ (127 mod6) =2

)

h(127,0) = (1+0·2) mod7=1

(86)

0 Sz 1 Sz 2 Sz 3 SzF 17 4 Sz 5 Sz 6 Sz Beszúrjuk ak =127-et.

h0(127) =127 mod 7=1 )

(87)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 Sz

Beszúrjuk ak =20-at.

h0(20) =20 mod 7=6 h1(20) =1+ (20 mod 6) =3

)

h(20,0) = (6+0·3) mod 7=6

(88)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 Sz Beszúrjuk ak =20-at.

h0(20) =20 mod 7=6 )

(89)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 SzF 20

Beszúrjuk ak =45-öt.

h0(45) =45 mod 7=3 h1(45) =1+ (45 mod 6) =4

)

h(45,0) = (3+0·4) mod 7=3 h(45,1) = (3+1·4) mod 7=0

(90)

0 Sz

1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 SzF 20 Beszúrjuk ak =45-öt.

h0(45) =45 mod 7=3 h1(45) =1+ (45 mod 6) =4

)

(91)

0 SzF 45 1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 SzF 20

Töröljük ak =17-et.

17T h0(17) =17 mod 7=3 h1(17) =1+ (17 mod6) =6

)

h(17,0) = (3+0·6) mod 7=3

(92)

0 SzF 45 1 SzF 127 2 Sz

3 SzF 17 4 Sz 5 Sz 6 SzF 20 Töröljük ak =17-et.

17T h0(17) =17 mod 7=3 )

(93)

0 SzF 45

1 SzF 127

2 Sz

3 SzFT 17 4 Sz

5 Sz

6 SzF 20

Beszúrjuk ak =81-et.

h0(81) =81 mod 7=4 h1(81) =1+ (81 mod 6) =4

)

h(81,0) = (4+0·4) mod 7=4

(94)

0 SzF 45

1 SzF 127

2 Sz

3 SzFT 17 4 Sz

5 Sz

6 SzF 20

Beszúrjuk ak =81-et.

h0(81) =81 mod 7=4 )

(95)

0 SzF 45

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 81

5 Sz

6 SzF 20

Töröljük ak =127-et.

127T h0(127) =127 mod 7=1 h1(127) =1+ (127 mod 6) =2

)

h(127,0) = (1+0·2) mod7=1

(96)

0 SzF 45

1 SzF 127

2 Sz

3 SzFT 17

4 SzF 81

5 Sz

6 SzF 20

Töröljük ak =127-et.

127T h0(127) =127 mod 7=1 )

(97)

0 SzF 45 1 SzFT 127 2 Sz

3 SzFT 17

4 SzF 81

5 Sz

6 SzF 20

Beszúrjuk ak =3-at.

h0(3) =3 mod7=3 h1(3) =1+ (3 mod 6) =4

)

h(3,0) = (3+0·4) mod 7=3

(98)

0 SzF 45 1 SzFT 127 2 Sz

3 SzFT 17

4 SzF 81

5 Sz

6 SzF 20

Beszúrjuk ak =3-at.

h0(3) =3 mod7=3 )

(99)

0 SzF 45

1 SzFT 127

2 Sz

3 SzFTF 173

4 SzF 81

5 Sz

6 SzF 20

Beszúrjuk ak =10-et.

h0(10) =10 mod 7=3 h1(10) =1+ (10 mod 6) =5

)

h(10,0) = (3+0·5) mod 7=3 h(10,1) = (3+1·5) mod 7=1

(100)

0 SzF 45

1 SzFT 127

2 Sz

3 SzFTF 173

4 SzF 81

5 Sz

6 SzF 20

Beszúrjuk ak =10-et.

h0(10) =10 mod 7=3 h1(10) =1+ (10 mod 6) =5

)

(101)

0 Sz F 45 1 Sz F T F 127 10 2 Sz

3 Sz F T F 17 3

4 Sz F 81

5 Sz

6 Sz F 20

(102)

A FELOSZT algoritmus

(103)

Az algoritmus feladata

EgyA tömbA[p. . .r]résztömbjét egy adott x∈Rszám körül

felosztja azA[p. . .q],A[q. . .r]két résztömbre olyan módon, hogy

az A[p. . .q]résztömbbe azAtömbnek azok az elemei

kerülnek, amelyek kisebbek vagy egyenlőekx-nél,

az A[q+1. . .r] résztömbbe azok az elemek kerülnek, amelyek

nagyobbak vagy egyenlőek x-nél.

(104)

Az algoritmus feladata

EgyA tömbA[p. . .r]résztömbjét egy adott x∈Rszám körül

felosztja azA[p. . .q],A[q. . .r]két résztömbre olyan módon, hogy

az A[p. . .q]résztömbbe azAtömbnek azok az elemei

kerülnek, amelyek kisebbek vagy egyenlőekx-nél,

az A[q+1. . .r] résztömbbe azok az elemek kerülnek, amelyek

nagyobbak vagy egyenlőek x-nél.

(105)

Az algoritmus feladata

EgyA tömbA[p. . .r]résztömbjét egy adott x∈Rszám körül

felosztja azA[p. . .q],A[q. . .r]két résztömbre olyan módon, hogy

az A[p. . .q]résztömbbe azAtömbnek azok az elemei

kerülnek, amelyek kisebbek vagy egyenlőekx-nél,

az A[q+1. . .r] résztömbbe azok az elemek kerülnek, amelyek

nagyobbak vagy egyenlőek x-nél.

(106)

Az algoritmus feladata

EgyA tömbA[p. . .r]résztömbjét egy adott x∈Rszám körül

felosztja azA[p. . .q],A[q. . .r]két résztömbre olyan módon, hogy

az A[p. . .q]résztömbbe azAtömbnek azok az elemei

kerülnek, amelyek kisebbek vagy egyenlőekx-nél,

(107)

A pszeudokód

Felosztalgoritmus: FELOSZT(A,p,r,x,q)

INPUT:Aa tömb, amelynek az A[p. . .r]résztömbjét felosztjuk, x∈Raz előre megadott érték, amely a felosztást szabályozza. OUTPUT:A a megváltozott tömb,q a felosztás határa, A[p. . .q], A[q+1. . .r] a kapott résztömbök.

FELOSZT(A,p,r,x,q) 1. i ←−p−1,j ←−r+1 2. WHILE IGAZ DO

3. REPEATj ←−j −1 4. UNTILA[j]6x 5. REPEATi ←−i+1 6. UNTILx 6A[i] 7. IFi <j

8. THEN CSERE(A[i],A[j]) 9. ELSEq ←−j, RETURN(A,q)

(108)

A pszeudokód

Felosztalgoritmus: FELOSZT(A,p,r,x,q)

INPUT:Aa tömb, amelynek az A[p. . .r]résztömbjét felosztjuk, x∈Raz előre megadott érték, amely a felosztást szabályozza.

OUTPUT:A a megváltozott tömb,q a felosztás határa, A[p. . .q], A[q+1. . .r]a kapott résztömbök.

FELOSZT(A,p,r,x,q) 1. i ←−p−1,j ←−r+1 2. WHILE IGAZ DO

3. REPEATj ←−j −1 4. UNTILA[j]6x 5. REPEATi ←−i+1 6. UNTILx 6A[i]

(109)

A feloszt algoritmus működése

Gondolatban két nyilat mozgatunk. A nyilak indexeket jelölnek, a nyilak a vizsgált indexű elemre mutatnak. A bal oldali nyilacska az i (index), a jobb oldali a j. A nyilakat kiinduló helyzetben tartományon kívülre, a tartomány szélére állítjuk. Mindkét nyilat befelé mozgatjuk.

A j indexet jelölő nyilacskát mindaddig mozgatjuk balra, (azaz csökkentjük), amíg az elem amire mutat nagyobbx-nél. Amint olyan elemre mutat, ami egyenlő x-el, vagy kisebb nála, megállunk.

Az i indexet jelölő nyilacskát mindaddig mozgatjuk jobbra, (azaz növeljük), amíg az elem amire mutat kisebb x-nél. Amint olyan elemre mutat, ami egyenlőx-szel, vagy nagyobb nála, megállunk.

(110)

A feloszt algoritmus működése

Gondolatban két nyilat mozgatunk. A nyilak indexeket jelölnek, a nyilak a vizsgált indexű elemre mutatnak. A bal oldali nyilacska az i (index), a jobb oldali a j. A nyilakat kiinduló helyzetben tartományon kívülre, a tartomány szélére állítjuk. Mindkét nyilat befelé mozgatjuk.

A j indexet jelölő nyilacskát mindaddig mozgatjuk balra, (azaz csökkentjük), amíg az elem amire mutat nagyobbx-nél. Amint olyan elemre mutat, ami egyenlő x-el, vagy kisebb nála, megállunk.

Az i indexet jelölő nyilacskát mindaddig mozgatjuk jobbra, (azaz növeljük), amíg az elem amire mutat kisebb x-nél. Amint olyan elemre mutat, ami egyenlőx-szel, vagy nagyobb nála, megállunk.

(111)

A feloszt algoritmus működése

Gondolatban két nyilat mozgatunk. A nyilak indexeket jelölnek, a nyilak a vizsgált indexű elemre mutatnak. A bal oldali nyilacska az i (index), a jobb oldali a j. A nyilakat kiinduló helyzetben tartományon kívülre, a tartomány szélére állítjuk. Mindkét nyilat befelé mozgatjuk.

A j indexet jelölő nyilacskát mindaddig mozgatjuk balra, (azaz csökkentjük), amíg az elem amire mutat nagyobbx-nél. Amint olyan elemre mutat, ami egyenlő x-el, vagy kisebb nála, megállunk.

Az i indexet jelölő nyilacskát mindaddig mozgatjuk jobbra, (azaz növeljük), amíg az elem amire mutat kisebb x-nél. Amint olyan elemre mutat, ami egyenlőx-szel, vagy nagyobb nála, megállunk.

(112)

A feloszt algoritmus működése

Gondolatban két nyilat mozgatunk. A nyilak indexeket jelölnek, a nyilak a vizsgált indexű elemre mutatnak. A bal oldali nyilacska az i (index), a jobb oldali a j. A nyilakat kiinduló helyzetben tartományon kívülre, a tartomány szélére állítjuk. Mindkét nyilat befelé mozgatjuk.

A j indexet jelölő nyilacskát mindaddig mozgatjuk balra, (azaz csökkentjük), amíg az elem amire mutat nagyobbx-nél. Amint olyan elemre mutat, ami egyenlő x-el, vagy kisebb nála, megállunk.

Az i indexet jelölő nyilacskát mindaddig mozgatjuk jobbra,

(113)

Ekkor megvizsgáljuk a két indexet. Ha i kisebb j-nél, akkor megcseréljük azokat az elemeket, amelyekre az i illetve a j mutat és tovább mozgatjuk befelé a nyilacskákat. Ha azonban az i és a j átfedik egymást (i=j), vagy j megelőzi az i-t (j<i), akkor leáll az algoritmus, a q megkapja a j értékét és

visszatérünk q-val és a megváltozott tömbbel. Aq jelöli a felosztás határát.

Érdemes megtanulni a feloszt algoritmust, hiszen ez működteti a gyors rendezést, ami fontos, illetve a kiválasztás lineáris időben algoritmust, ami érdekes.

(114)

Ekkor megvizsgáljuk a két indexet. Ha i kisebb j-nél, akkor megcseréljük azokat az elemeket, amelyekre az i illetve a j mutat és tovább mozgatjuk befelé a nyilacskákat. Ha azonban az i és a j átfedik egymást (i=j), vagy j megelőzi az i-t (j<i), akkor leáll az algoritmus, a q megkapja a j értékét és

visszatérünk q-val és a megváltozott tömbbel. Aq jelöli a felosztás határát.

(115)

Példa

LegyenA= [17,127,20,45,81,3,10,49,50,28,12,81,9]. Osszuk felA-t azx=20 körül.

17 127 20 45 81 3 10 49 50 28 12 81 9

9 20 45 81 3 10 49 50 28 12 81 127

12 45 81 3 10 49 50 28 20

10 81 3 45

3 81

j i q←−j=5, RETURN(A,5),

A= [17,9,12,10,3|81,45,49,50,28,20,81,127]

(116)

Példa

LegyenA= [17,127,20,45,81,3,10,49,50,28,12,81,9]. Osszuk felA-t azx=20 körül.

17 127 20 45 81 3 10 49 50 28 12 81 9

9 20 45 81 3 10 49 50 28 12 81 127

12 45 81 3 10 49 50 28 20

10 81 3 45

3 81

j i q←−j=5, RETURN(A,5),

A= [17,9,12,10,3|81,45,49,50,28,20,81,127]

(117)

Példa

LegyenA= [17,127,20,45,81,3,10,49,50,28,12,81,9]. Osszuk felA-t azx=20 körül.

17 127 20 45 81 3 10 49 50 28 12 81 9

9 20 45 81 3 10 49 50 28 12 81 127

12 45 81 3 10 49 50 28 20

10 81 3 45

3 81

j i

q←−j=5, RETURN(A,5),

A= [17,9,12,10,3|81,45,49,50,28,20,81,127]

(118)

Példa

LegyenA= [17,127,20,45,81,3,10,49,50,28,12,81,9]. Osszuk felA-t azx=20 körül.

17 127 20 45 81 3 10 49 50 28 12 81 9

9 20 45 81 3 10 49 50 28 12 81 127

12 45 81 3 10 49 50 28 20

10 81 3 45

3 81

(119)

Kiválasztási probléma

Legyen adott egyA halmaz (n db páronként különböző szám).

Adott továbbá 16i 6n pozitív egész. Keressük az Ahalmaznak azt azx elemét, amelynél pontosan i−1 db kisebb eleme van a halmaznak.

(120)

Kiválasztás lineáris időben

(121)

Alsó medián

Mediánpáratlan elemszámúA halmaz esetén a rendezettA halmaz középső eleme, míg páros elemszám esetén a két középső közül a kisebb vagy egyenlő (alsó medián).

Azaz, haA={x1, . . .xn} egy halmaz, akkor először rendezzük a halmaz elemeit,

x16x26· · ·6xn ekkor

med=xd2ne.

(122)

Alsó medián

Mediánpáratlan elemszámúA halmaz esetén a rendezettA halmaz középső eleme, míg páros elemszám esetén a két középső közül a kisebb vagy egyenlő (alsó medián).

Azaz, haA={x1, . . .xn} egy halmaz, akkor először rendezzük a halmaz elemeit,

x16x26· · ·6xn ekkor

med=xd2ne.

(123)

Alsó medián

Mediánpáratlan elemszámúA halmaz esetén a rendezettA halmaz középső eleme, míg páros elemszám esetén a két középső közül a kisebb vagy egyenlő (alsó medián).

Azaz, haA={x1, . . .xn} egy halmaz, akkor először rendezzük a halmaz elemeit,

x16x26· · ·6xn ekkor

med=xd2ne.

(124)

Alsó medián

Mediánpáratlan elemszámúA halmaz esetén a rendezettA halmaz középső eleme, míg páros elemszám esetén a két középső közül a kisebb vagy egyenlő (alsó medián).

Azaz, haA={x1, . . .xn} egy halmaz, akkor először rendezzük a halmaz elemeit,

x6x6· · ·6x

ekkor

med=xd2ne.

(125)

Alsó medián

Mediánpáratlan elemszámúA halmaz esetén a rendezettA halmaz középső eleme, míg páros elemszám esetén a két középső közül a kisebb vagy egyenlő (alsó medián).

Azaz, haA={x1, . . .xn} egy halmaz, akkor először rendezzük a halmaz elemeit,

x16x26· · ·6xn ekkor

med=xd2ne.

(126)

Köszönöm a figyelmet!

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

tanévben az általános iskolai tanulók száma 741,5 ezer fő, az érintett korosztály fogyásából adódóan 3800 fővel kevesebb, mint egy évvel korábban.. Az

Osciilators with quasi linear amplitude stabilization [3,4] have two main sources of distortion: the quasi linear components are not perfectly linear in practice; and the

If we treat INTOSAI with its relevant stakeholders as a real network with vertices (e.g. a member of working groups, internal, external experts, professionals, colleagues at

• Ugyanez a könyv egészen nyíltan és okosan beszél «Páris ka- tonai védelméről® is, melyről ezeket mondja : oPáris a célpontja min- den ellenséges seregnek,

Legyen szabad reménylenünk (Waldapfel bizonyára velem tart), hogy ez a felfogás meg fog változni, De nagyon szükségesnek tar- tanám ehhez, hogy az Altalános Utasítások, melyhez

Az intestinalis fl órát körülhatároló, unicelluláris epit- helsejtréteg károsodása esetén azonban a véráramba baktériumok kerülhetnek, amelyek később súlyos szep-

Wells: Improving eyewitness identification from lineups: Simultaneous versus sequential lineup presentation.. Jo ur nal Applied

Nagy József, Józsa Krisztián, Vidákovich Tibor és Fazekasné Fenyvesi Margit (2004): Az elemi alapkész- ségek fejlődése 4–8 éves életkorban. Mozaik