Algoritmusok és adatszerkezetek 2.

Hasonló dokumentumok
Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Adatszerkezetek 2. Dr. Iványi Péter

Műveletek mátrixokkal. Kalkulus. 2018/2019 ősz

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

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

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Adatszerkezetek I. 6. előadás

11. Előadás. 11. előadás Bevezetés a lineáris programozásba

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

1. feladatsor: Vektorterek, lineáris kombináció, mátrixok, determináns (megoldá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

Felvételi tematika INFORMATIKA

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

1/ gyakorlat. Lineáris Programozási feladatok megoldása szimplex módszerrel. Pécsi Tudományegyetem PTI

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

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

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

17. A 2-3 fák és B-fák. 2-3 fák

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

A szimplex algoritmus

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

Választó lekérdezés létrehozása

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

LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL

1/ gyakorlat. Lineáris Programozási feladatok megoldása szimplex módszerrel. Pécsi Tudományegyetem PTI

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek 2.

A PiFast program használata. Nagy Lajos

8. Előadás. Megyesi László: Lineáris algebra, , oldal. 8. előadás Mátrix rangja, Homogén lineáris egyenletrendszer

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

Táblázatkezelés 2. - Adatbevitel, szerkesztés, formázás ADATBEVITEL. a., Begépelés

PHP-MySQL. Adatbázisok gyakorlat

6. Függvények. 1. Az alábbi függvények közül melyik szigorúan monoton növekvő a 0;1 intervallumban?

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

Önszervező bináris keresőfák

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

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

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

Programozási technológia

Táblázatos adatok használata

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

Web-programozó Web-programozó

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

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

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

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

Formális nyelvek és automaták

EuroOffice Optimalizáló (Solver)

Egyszerű példaprogramok gyakorláshoz

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Tanulási cél Szorzatfüggvényekre vonatkozó integrálási technikák megismerése és különböző típusokra való alkalmazása. 5), akkor

Diszkrét matematika 2.

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk

10. előadás Speciális többágú fák

Numerikus integrálás

Vektorgeometria (2) First Prev Next Last Go Back Full Screen Close Quit

Cohen-Sutherland vágóalgoritmus

Algoritmuselmélet 6. előadás

Táblázatkezelés 5. - Függvények

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

Matematika B4 I. gyakorlat

Access gyakorlati feladatok lépésről lépésre

19. Hasításos technikák (hash-elés)

ALAPOK. 0 és 255 közé eső számértékek tárolására. Számértékek, például távolságok, pontszámok, darabszámok.

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

Diszkréten mintavételezett függvények

Csima Judit október 24.

Populációbecslés és monitoring. Eloszlások és alapstatisztikák

1. oldal, összesen: 5

Kontrollcsoport-generálási lehetőségek retrospektív egészségügyi vizsgálatokhoz

Klasszikus algebra előadás. Waldhauser Tamás április 28.

Optimumkeresés számítógépen

Algoritmusok és adatszerkezetek gyakorlat 07

32. A Knuth-Morris-Pratt algoritmus

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

Adatbázis-kezelés az Excel 2013-ban

1. Determinánsok. Oldjuk meg az alábbi kétismeretlenes, két egyenletet tartalmaz lineáris egyenletrendszert:

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

Közfoglalkoztatás támogatás megállapítását segítő segédtábla használati útmutatója

Microsoft Word előadás. Bevezetés az informatikába I.

ELEMI BÁZISTRANSZFORMÁCIÓ LÉPÉSEI 1.EGYSZERŰSÍTETT VÁLTOZAT. 1.a) Paramétert nem tartalmazó eset

Oszthatósági problémák

Oktatási segédanyag. Weboldalszerkesztési gyakorlatok

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

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

Érdemes egy n*n-es táblázatban (sorok-lányok, oszlopok-fiúk) ábrázolni a két színnel, mely éleket húztuk be (pirossal, kékkel)

Az ikonra történő kattintást követően a felületen két sor jelenik meg:

Programozási segédlet

Polinomok, Lagrange interpoláció

Szakács Lili Kata megoldása

Több oldalas dokumentum készítése. MS Word 2010 szövegszerkesztővel

Szerencsejátékok. Elméleti háttér

Hadamard-mátrixok Előadó: Hajnal Péter február 23.

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

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

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

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

Átírás:

Algoritmusok és adatszerkezetek 2. Varga Balázs gyakorlata alapján Készítette: Nagy Krisztián 1. gyakorlat Nyílt címzéses hash-elés A nyílt címzésű hash táblákban a láncolással ellentétben egy indexen kizárólag egy értéket tárolunk, azaz a táblában tárolt elemek száma nem haladhatja meg az indexek (egyedi hashek) számát. Beszúráskor a megadott módszerrel a kapott hashtől indulva megkeressük az első szabad indexet, ahova az elem bekerül. Kereséskor ugyanígy járjuk be az egyes indexeket, ekkor lépésben megállapíthatjuk, hogy a megadott kulcs szerepel-e a táblában. Törléskor az elem indexét nem üresnek, hanem töröltnek jelöljük, így azok a kereső algoritmusok, amelyek ellenőrzik ezt az indexet se adnak hibás eredményt, viszont egy olyan táblában, ahol gyakoriak a beszúrások és törlések a keresés teljesítménye gyorsabban romlik. Egy kulcs helyét az úgynevezett próbálás során keressük meg. Ennek több, ismert módszere létezik. (A nyílt címzésű hasító táblákban nincsenek táblázaton kívül tárolt elemek, listák. A táblaelemeket (a rekordokat) a indexekkel indexeljük. Az ütközések feloldására azt a módszert használjuk, hogy beszúráskor amennyiben egy rés foglalt, akkor valamilyen szisztéma szerint tovább lépünk a többi résre, míg üreset nem találunk és oda történik a beszúrás.) Módszerek az ütközések feloldására: Lineáris próbával Lineáris próbálás esetén két kipróbált hely között a távolság konstans méretű, általában Általánosítva, amennyiben adott egy hashelő függvény, a lineáris próbafüggvény:, ahol a kulcs, a próbálás távolsága és a tábla mérete. Nem egyenletes eloszlású hashelés esetén a lineáris próbálás során a beszúrt értékek a hash tábla egyes tartományain csoportosulnak, azaz gyakran egymás utáni indexeken fognak elhelyezkedni a beszúrt elemek. Nézzük az alábbi nyílt címzésű hash-eléses feladatot osztó módszerrel (a hash függvényben a kulcsnak a mod-ját vesszük): Adottak az alábbi kulcsok: 18,28,36,17,62,48,50 és az alábbi hash függvény:. Szemléltessük a fentebbi kulcsok elhelyezkedését a tömbben. Az ütközések feloldására alkalmazzunk lineáris próbát!

Megoldás: Először is meg kell határoznunk a tömb méretét. Nézzük meg a hash függvényünket:. Láthatjuk, hogy szerepel a kulcsok elhelyezésénél, így lényegében 11 maradékoszályba tudjuk betenni a kulcsunkat. Legyen tehát tömb mérete 11. (A tömb indexei pedig megfelelnek a maradékosztályoknak) Ezek után számoljuk ki a hash függvény alapján a kulcsok elhelyezkedését: Ahol az eredmény megegyezik (Lásd például 28,17,50 es kulcsok esetén) ott biztosan kulcsütközések következnek be. Ezen ütközések kiküszöbölésére használjuk ebben a részben a lineáris próbát. Sorban kezdjük el feltölteni a tömböt a kiszámolt hash függvény alapján 18 28 18 36 28 18 Elérkeztünk az első kulcs ütközésünkhöz: Ha megnézzük a 17-es kulcsra felírt hash-függvény a 6-os helyre tenné az elemet, viszont ezen a helyen már szerepel a 28-as. Most választás elé állunk. A lineáris próbát 1-es lépésközzel fogjuk végrehajtani, viszont el kell döntenünk az irányát, hogy balra próbálunk vagy jobbra. Fontos. amennyiben választunk egy irányt az összes további kulcsütközés esetén ugyan azt az irányt kell tartanunk, tehát ilyen esetben vagy mindig jobbra, vagy mindig balra lépegetünk a tömbünkben. Amennyiben a választott irányban közvetlenül az ütközés helye mellett is szerepel kulcs, úgy lényegében egy újabb ütközés következik be így még eggyel odébb próbáljuk elhelyezni az elemünket. Előfordulhat az az eset, hogy elérjük a 0. vagy a 10. indexű helyet és ott is találunk elemet. Ekkor

tekintsünk úgy a tömbre mint ha körbe lenne láncolva és folytassuk a próbánkat az alábbi módon. Balra fele lépkedve a 0. indexű helyről a 10. indexűre ugrunk jelen példánkban. (Jobbra lépkedve a 10. indexű helyről a 0.-ra ugrunk) Balra 1-et lépve: 36 17 28 18 36 62 17 28 18 48 36 62 17 28 18 50 48 36 62 17 28 18 Ezzel el is helyeztük az összes elemet. Készen vagyunk. Jobbra 1-et lépve: 36 28 18 17 36 28 18 17 62 36 48 28 18 17 62 36 48 28 18 17 62 50 Ezzel el is helyeztük az összes elemet. Készen vagyunk.

Négyzetes (Kvadratikus) próbával Kvadratikus próbálás során a két kipróbált hely között a távolságot egy másodfokú polinom adja. Amennyiben adott a hashelő függvény, az. próbálás helyét adja a következő kvadratikus próbafüggvény:, ahol a kulcs és a tábla mérete. és a függvényre jellemző konstansok, amelyeknek az ideális értéke a tábla méretétől függ és egy adott táblára nem változik az értékük. Az együtthatók értéke akkor ideális, ha az összes -re különböző indexet ad a függvény. Tetszőleges táblaméretre nehéz olyan kvadratikus próbát előállítani, amely garantálja, hogy minden beszúrás sikeres, amennyiben a telítettségi tényező meghaladja az -ot. Ha, az algoritmus egy lineáris próbálássá degradálódik. Nézzük az alábbi nyílt címzésű hash-eléses feladatot osztó módszerrel (a hash függvényben a kulcsnak a mod-ját vesszük): Adottak az alábbi kulcsok: 18,28,36,17,62,48,50 és az alábbi hash függvény:. Szemléltessük a fentebbi kulcsok elhelyezkedését a tömbben. Az ütközések feloldására alkalmazzunk négyzetes próbát! Megoldás: Először is meg kell határoznunk a tömb méretét. Nézzük meg a hash függvényünket:. Láthatjuk, hogy szerepel a kulcsok elhelyezésénél, így lényegében 11 maradékoszályba tudjuk betenni a kulcsunkat. Legyen tehát tömb mérete 11. (A tömb indexei pedig megfelelnek a maradékosztályoknak) Ezek után számoljuk ki a hash függvény alapján a kulcsok elhelyezkedését: Ahol az eredmény megegyezik (Lásd például 28,17,50 es kulcsok esetén) ott biztosan kulcsütközések következnek be. Ezen ütközések kiküszöbölésére használjuk ebben a részben a négyzetes próbát.

Sorban kezdjük el feltölteni a tömböt a kiszámolt hash függvény alapján 18 28 18 36 28 18 Elérkeztünk az első kulcs ütközésünkhöz: Ha megnézzük a 17-es kulcsra felírt hash-függvény a 6-os helyre tenné az elemet, viszont ezen a helyen már szerepel a 28-as. Most választás elé állunk. Négyzetes próba esetén a lépésközt az alábbiak alapján határozzuk meg: Az irányt ismét mi választjuk meg, amit az összes további ütközés esetén tartanunk kell. Amennyiben jobbra kezdjük el a próbát úgy az alábbi lépésközzel kell gondolkodnunk:. Amennyiben balra kezdjük el, úgy. Hogy működik: Az ütközés helyén a kiválasztott irány alapján indulunk el: szemléltetés ként legyen ez most a jobb irány. Először megnézzük, hogy jobbra(+) 1 lépésközzel van-e ütközés. Ha van, akkor az alap ütközés helyétől megnézzük balra (-) 1 lépésközzel van-e ütközés. Ha van, akkor szintén az alap ütközési helytől megnézzük jobbra(+) lépésközzel. Amennyiben nincs, úgy elhelyezzük az adott mezőben az elemet, amennyiben lenne ütközés, úgy az eredeti helytől balra (-) 4 lépésközzel vizsgáljuk meg az adott helyet. Előfordulhat az az eset, hogy elérjük a 0. vagy a 10. indexű helyet és ott is találunk elemet. Ekkor tekintsünk úgy a tömbre mint ha körbe lenne láncolva és folytassuk a próbánkat az alábbi módon. Balra fele lépkedve a 0. indexű helyről a 10. indexűre ugrunk jelen példánkban és onann folytatjuk a számolást. (Jobbra lépkedve a 10. indexű helyről a 0.-ra ugrunk) Jobb irányt választva: 36 17 28 18 36 17 28 18 62

36 48 17 28 18 62 36 48 17 28 18 62 50 Bal irányt választva: 36 17 28 18 36 17 28 18 62 36 48 17 28 18 62 50 36 48 17 28 18 62

Kettős hash módszerrel A kettős hashelés során a lépésköz a bemenő adat függvénye, ezzel csökkentve a csoportulások kialakulásának lehetőségét. Amennyiben adott a hashelő függvény, az. próbálás helyét adja a következő függvény:, ahol a kulcs, a tábla mérete és a a másodlagos hashelő függvény. Fontos, hogy úgy válasszuk meg a másodlagos függvényt, hogy az semmilyen kulcsra ne adjon 0 értéket, hiszen ekkor a lépésköz minden -re 0, azaz a táblának csupán egyetlen helyére próbáljuk meg beszúrni az elemet. Nézzük az alábbi nyílt címzésű hash-eléses feladatot osztó módszerrel (a hash függvényben a kulcsnak a mod-ját vesszük): Adottak az alábbi kulcsok: 18,28,36,17,62,48,50 és az alábbi hash függvény:. Szemléltessük a fentebbi kulcsok elhelyezkedését a tömbben. Az ütközések feloldására alkalmazzunk kettős hash-elés módszerét az alábbi másodlagos hashelő függvénnyel:! Megoldás: Először is meg kell határoznunk a tömb méretét. Nézzük meg a hash függvényünket:. Láthatjuk, hogy szerepel a kulcsok elhelyezésénél, így lényegében 11 maradékoszályba tudjuk betenni a kulcsunkat. Legyen tehát tömb mérete 11. (A tömb indexei pedig megfelelnek a maradékosztályoknak) Ezek után számoljuk ki a hash függvény alapján a kulcsok elhelyezkedését: Ahol az eredmény megegyezik (Lásd például 28,17,50 es kulcsok esetén) ott biztosan kulcsütközések következnek be. Ezen ütközések kiküszöbölésére használjuk ebben a részben a kettős hash-elés módszerét.

Sorban kezdjük el feltölteni a tömböt a kiszámolt hash függvény alapján 18 28 18 36 28 18 Elérkeztünk az első kulcs ütközésünkhöz: Ha megnézzük a 17-es kulcsra felírt hash-függvény a 6-os helyre tenné az elemet, viszont ezen a helyen már szerepel a 28-as. Most választás elé állunk. Kettős hash-elés módszerével ilyenkor az adott lépésközt a másodlagos hash függvény határozza meg. Mint a fentebb megismert módszereknél itt is ugyan azok az elemi szabályok érvényesek. Irányt mi választhatunk, de az összes többi ütközés esetén is tartanunk kell magunkat a választásunkhoz. Továbbá itt is képzeljük el úgy, hogy körbe van kötve a tömbünk. (0 10, 10 0 ra való ugrás). ha az adott kulcs az újboli elhelyezési próba során ismételten ütközne, akkor továbbra is a másodlagos hashelési függvény alapján kiszámolt lépésközzel lépegetünk. Az alap hashelési függvényből láthatjuk, melyik kulcsok esetén fordulnak elő kulcs ütközések. Ezek alapján az ütköző kulcsok másodlagos hashfüggvénye alapján számoljuk ki a lépésközüket: (Ütköző kulcsok: 17,62,50) Ezek alapján: Jobb irány: 36 28 18 17 62 36 28 18 17

62 36 48 28 18 17 62 36 48 28 18 50 17 Bal irány: 17 36 28 18 62 17 36 28 18 62 17 36 48 28 18 62 17 36 48 28 18 50 Az eddigi feladatokat mindig osztó módszerrel adtuk meg. Az elkövetkező feladatban a szorzó módszert is megismerhetjük. Adott az alábbi hashelési függvény:, ahol a tömb (táblázat) mérete, az adott kifejezés törtrész-e, - az adott kifejezés alsó egész része.. Helyezzük el a 15, 7, 12, 18, 23, 5 kulcsokat a tömbben. Kulcsütközések esetén alkalmazzuk a fentiekben megismert lineáris próba mószerét.

Megoldás: -ról tudjuk, hogy mérete. Hozzuk létre tömböt Helyettesítsük be a feladatban megadott paramétereket a hashelési függvénybe: Számoljuk ki a függvény alapján a kulcsok elhelyezkedését: Ha ügyesek vagyunk, akkor az elején észrevehetjük, hogy a páros kulcsok elhelyezkedésére mindig 0-át, míg a páratlanok elhelyezkedésére mindig 4-et kapunk. Most csak a lineáris próbát csak a bal irányra írjuk fel, de értelem szerűen jobb irányra is fel lehetne írni

15 7 15 12 7 15 12 7 15 18 12 23 7 15 18 12 5 23 7 15 18 Készen vagyunk Végezetül pedig egy elméleti feladvány: Van egy nyílt címzésű hash táblánk. Tudjuk, hogy minden második cellája üres és még semmilyen algoritmussal nem töröltünk ki belőle elemet. Maximum hány kulcsütközés lehet, ha egy adott ütközés esetén 1.) lineáris próbát 2.) négyzetes próbát alkalmazunk. Válasz: 1.) 2.) Közös rész: Képzeljük el a leírt esetet. Két lehetséges opciónk van attól függően, hogy páros vagy páratlan a hash tábla mérete. Páros tábla méret: (X van valamilyen elem ott) X X Páratlan tábla méret: (X van valamilyen elem ott) X X X

1.) esetben. Lineáris próbánál, ha ütközés van az 1-es lépésszám miatt bármelyik irányt is válasszuk mindig egymás mellett helyezkedne el az adott kulcs. Lásd jóval fentebbi feladatok. Viszont tudjuk azt, hogy körbefűzve használjuk a táblát próbák esetén, így előfordulhat, hogy a tömb 1. és az utolsó helyén levő elem kulcsütközés után került egymás mellé. Tehát a helyes válasz: 0 vagy 1 ütközés lehetséges (maximum 1). 2.) Négyzetes próba esetén. Elmondható ugyan az, mint a fentebbi esetben. Mivel a négyzetes próbák első lépései lényegében lineáris próbák és a táblában szintén csak az első és az utolsó elemnek kritikus az elhelyezkedése a feladat szempontjából, így itt is az a helyes válasz, hogy 0 vagy 1 ütközés lehetséges (maximum 1).