Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:asd:cwiczenia:2011-hashing [2011/04/27 15:58]
kkr
pl:dydaktyka:asd:cwiczenia:2011-hashing [2019/06/27 15:50] (aktualna)
Linia 13: Linia 13:
     * Metoda łańcuchowa     * Metoda łańcuchowa
     * Metoda adresowania otwartego     * Metoda adresowania otwartego
 +
 +===== Przykładowe zadania =====
 +Poniżej mają Państwo przykładowe zadania z haszowania. W razie znalezienia błędów, prosimy o informację.
 +
 +**Zadanie 1** \\
 +Tablica ''​TAB''​ jest tablicą haszującą w której konflikty są rozwiązywane za pomocą liniowego adresowania otwartego. Zakładamy że tablica ma rozmiar ''​m=7''​ i jest początkowo pusta. Pomocnicza funkcja haszująca jest funkcją haszowania modularnego,​ natomiast funkcja obliczająca klucz na podstawie wartości elementu jest dana wzorem: ''​k(x) = x*4''​. Napisz wzór pomocniczej funkcji haszującej oraz przedstaw stan tablicy ''​TAB''​ po każdym wstawieniu wartości w następującej kolejności:​ ''​5,​ 3, 7, 10, 2''​. \\
 +**Rozwiązanie** \\
 +  * ''​h(k,​i) = (h'​(k)+i)%m''​
 +  * ''​h'​(k) = k%m''​
 +  * ''​TAB = 7, 10, 2, NIL, NIL, 3, 5''​
 +
 +**Zadanie 2** \\
 +Tablica ''​TAB''​ jest tablicą haszującą w której konflikty są rozwiązywane za pomocą liniowego adresowania otwartego. Zakładamy że tablica ma rozmiar ''​m=7''​ i jest początkowo pusta. Pomocnicza funkcja haszująca jest funkcją haszowania modularnego,​ natomiast funkcja obliczająca klucz na podstawie wartości elementu jest dana wzorem: ''​k(x) = 3x+1''​. Napisz wzór pomocniczej funkcji haszującej oraz przedstaw stan tablicy ''​TAB''​ po każdym wstawieniu wartości w następującej kolejności:​ ''​2,​ 5, 9, 1, 3''​. \\
 +**Rozwiązanie** \\
 +  * ''​h(k,​i) = (h'​(k)+i)%m''​
 +  * ''​h'​(k) = k%m''​
 +  * ''​TAB = 2, 9, 5, 3, 1, NIL, NIL''​
 +
 +**Zadanie 3** \\
 +Tablica ''​TAB''​ jest tablicą haszującą w której konflikty są rozwiązywane za pomocą kwadratowego adresowania otwartego ''​h(k,​i) = (h'(k) + i² + i)%m''​. Zakładamy że tablica ma rozmiar ''​m=8''​ i jest początkowo pusta. Pomocnicza funkcja haszująca jest funkcją haszowania modularnego,​ natomiast funkcja obliczająca klucz na podstawie wartości elementu jest dana wzorem: ''​k(x) = 2x+1''​. Przedstaw stan tablicy ''​TAB''​ po każdym wstawieniu wartości w następującej kolejności:​ ''​2.5,​ 2, 9, 5, 1''​. \\
 +**Rozwiązanie** \\
 +  * ''​h'​(k) = k%m''​
 +  * ''​TAB = NIL, 5, NIL, 9, NIL, 2, 2.5, 1''​
 +
 +**Zadanie 4** \\
 +Dane jest uniwersum możliwych kluczy: ''​U = {2,​3,​4,​5,​6,​7,​8}''​. Zaproponuj funkcję ''​k(x)''​ wyliczającą klucz na podstawie wartości elementu, której przeciwdziedziną jest zbiór ''​Y=U''​. Następnie wyznacz uniwersalną klasę funkcji haszujących. Dla wybranej funkcji należącej do wyznaczonej rodziny oblicz jej wartości dla każdego klucza należącego do uniwersum. Zakładamy że wartościami elementów mogą być tylko liczby naturalne oraz że rozmiar tablicy haszującej wynosi ''​m=8''​.\\
 +**Przykładowe rozwiązanie**
 +  * ''​k(x) = (x%7)+2''​
 +  * ''​p = 11''​
 +  * ''​Zp = {0,​1,​...,​10}''​
 +  * ''​Z*p = {1,​2,​...,​10}''​
 +  * Wybieramy np. ''​a=3'',​ ''​b=1''​.
 +    * ''​h(k)=[(3*k+1)%11]%8''​
 +
 +**Zadanie 5** \\
 +Tablica ''​TAB''​ jest tablicą haszującą o rozmiarze ''​m=12''​ w której konflikty są rozwiązywane metodą łańcuchową. Funkcja haszująca jest modularną funkcją haszującą. Zakładając że indeksowanie tablicy rozpoczyna się od ''​1''​ oraz że funkcja obliczająca klucz ma postać ''​k(x)=2x+4''​ podaj przynajmniej ''​5''​ różnych wartości elementów, które mogą być zapisane w tablicy pod indeksem ''​7''​. \\
 +**Rozwiązanie** \\
 +  * ''​h(k) = (k%12)+1''​
 +  * ''​(k%12)+1 = 7''​
 +  * ''​k%12 = 6 ⇒ k = 12i+6'',​ gdzie ''​i={0,​1,​...}''​
 +  * ''​12i+6 = 2x+4''​
 +  * ''​12i+2 = 2x''​
 +  * ''​6i+1 = x'',​ gdzie ''​i={0,​1,​...}''​
 +  * Co nam generuje ciąg wartości których docelowy indeks to ''​7''​.
 +
 +**Zadanie 6** \\
 +Tablica ''​TAB''​ jest tablicą haszującą w której konflikty są rozwiązywane za pomocą metody łańcuchowej. Haszowanie jest wykonywane przez mnożenie dla ''​A=0.4''​. Zakładamy że tablica ma rozmiar ''​m=8''​ i jest początkowo pusta. Funkcja obliczająca klucz na podstawie wartości elementu jest dana wzorem: ''​k(x)=x+8''​. Napisz wzór funkcji haszującej oraz przedstaw stan tablicy ''​TAB''​ po każdym wstawieniu wartości w następującej kolejności:​ ''​3,​ 1, 7, 11, 4''​. \\
 +**Rozwiązanie** \\
 + * Po przetworzeniu powyższych wartości przez funkcję ''​k(x)'',​ powstaje następujący zbiór kluczy \\ ''​k = {11,​9,​15,​19,​12}''​
 +  * ''​h(k) = floor(8*(0.4k%1))''​
 +  * ''​TAB = [7], NIL, NIL, [3], [1, 11], NIL, [4], NIL''​
pl/dydaktyka/asd/cwiczenia/2011-hashing.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0