• Nie Znaleziono Wyników

2 Join i Split na 2–3–4 drzewach

N/A
N/A
Protected

Academic year: 2021

Share "2 Join i Split na 2–3–4 drzewach"

Copied!
4
0
0

Pełen tekst

(1)

Algorytmy i Struktury Danych, 10. ćwiczenia

2015-12-04

1 Plan zajęć

• Join i Split na 2-3-4 drzewach

• usuwanie z B-drzew

• haszowanie uniwersalne

2 Join i Split na 2–3–4 drzewach

http://courses.csail.mit.edu/6.046/spring04/handouts/ps5-sol.pdf i ogólnie o 2–3–4 drzewach:

https://www.cs.purdue.edu/homes/ayg/CS251/slides/chap13b.pdf

3 Przejście z 2–3–4 drzew na czerwono-czarne

• węzeł z jednym kluczem zamieniany jest na czarny węzeł,

• węzeł z dwoma kluczami zamieniany jest na dwa węzły czarny i jego czer- wonego syna (możemy dowolnie wybrać lewy czy prawy),

• węzeł z trzema kluczami jest zamieniany na czarny węzeł z dwoma czer- wonymi synami.

4 Uniwersalna klasa funkcji haszujących

[[CLR, rozdział 11. Strona 234]]

Dla dowolnej pary liczb a ∈ Zp ({1, . . . , p − 1}), b ∈ Zp, niech:

ha,b(k) = ((ak + b) mod p) mod m Rodzina wszystkich takich funkcji to:

Hp,m= {ha,b: a ∈ Zpi b ∈ Zp}

Twierdzenie 1 Klasa funkcji haszujących Hp,m, jest klasą uniwersalną.

Niech k, l ∈ Zp (k 6= l). Dla danej funkcji haszującej ha,b, niech:

1

(2)

• r = (ak + b) mod p,

• s = (al + b) mod p.

Zauważmy, że r 6= s:

r − s ≡ a(k − l) mod p

Ponieważ a i (k − l) są różne od zera, stąd też ich iloczyn (modulo p) jest również różny od zera. Co więcej każda możliwa para (a, b) z a 6= 0 daje inną parę (r, s) z r 6= s. Ponieważ możliwych par (r, s) z r 6= s jest tylko p(p − 1), istnieje zatem wzajemnie jednoznaczne odwzorowanie między parami (a, b) z a 6= 0 i parami (r, s) z r 6= s. Tak więc dla każdej pary różnych kluczy k i l, jeśli wybierzemy (a, b) równomiernie losowo z Zp× Zp, to wynikową parą (r, s) może być z jednakowym prawdopodobieństwem każda para różnych liczb modulo p.

Wynika stąd, że prawdopodobieństwo kolizji dwóch różnych kluczy k i l jest równe prawdopodobieństwu, że r ≡ s ( mod m), gdzie r i s są różnymi losowymi wartościami modulo p. Dla ustalonego r liczba tych s, spośród pozostałych p−1 możliwych wartości, dla których s 6= r i s ≡ r ( mod m), wynosi co najwyżej:

dp/me − 1 ≤ (p − 1)/m

Prawdopodobieństwo, że r i s kolidują modulo m wynosi co najwyżej:

(p − 1)/m

(p − 1) = 1/m

Zatem dla każdej pary różnych wartości k, l ∈ Zp mamy:

P r{ha,b(k) = ha,b(l)} ≤ 1/m

qued

5 Adresowanie otwarte

[[CLR, rozdział 11.4. Strona 236]]

• adresowane liniowe:

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

• adresowanie kwadratowe:

h(k, i) = (h0(k) + c1i + c2i2) mod m

• haszowanie dwukrotne:

h(k, i) = (h1(k) + ih2(k)) mod m [[CLR, Rozdział 11, strona 242]]

2

(3)

Twierdzenie 2 Jeśli współczynnik zapełnienia tablicy z haszowaniem wynosi α = n/m < 1, to oczekiwana liczba sprawdzanych pozycji w czasie wyszukiwania elementu, który nie występuje w tablicy, jest nie większa niż 1−α1 , o ile jest spełnione założenie o równomiernym haszowaniu.

Niech X będzie zmienną losową równą liczbie sprawdzanych pozycji.

P r[X ≥ i] = n

m· n − 1

m − 1· · · n − i + 2

m − i + 2 ≤ αi−1 (zauważmy, że m−jn−jmn dla 0 ≤ j < m)

E[X] =

X

i=1

P r[X ≥ i] ≤

X

i=1

αi−1=

X

i=0

αi= 1 1 − α

qued Twierdzenie 3 Jeżeli współczynnik zapełnienia tablicy z haszowaniem wynosi α, to wstawianie z adresowaniem otwartym wymaga średnio co najwyżej 1−α1 sprawdzeń pozycji w tablicy, o ile spełniony jest warunek równomiernego haszo- wania.

Wynika bezpośrednio z twierdzenia 2. qued

[[CLR, Rozdział 11, strona 243–244]]

Twierdzenie 4 Załóżmy, że element znajduje się w tablicy z haszowaniem przez adresowanie otwarte, a współczynnik zapełnienia tablicy α spełnia nierówność α < 1. Wtedy oczekiwana liczba sprawdzeń pozycji w tablicy wykonywanych w czasie wyszukiwania tego elementu jest nie większa niż α1ln1−α1 .

Wyszukanie elementu k wymaga tyle samo czasu ile kosztowało jego wsta- wienie, stąd możemy uśrednić koszt wstawienia wszystkich elementów.

1 n

n−1

X

i=0

m m − i= m

n

n−1

X

i=0

1 m − i = 1

α(Hm− Hm−n) (Hi – i–ta liczba harmoniczna).

1

α(Hm− Hm−n) = 1 α

m

X

k=m−n+1

1 k ≤ 1

α Z m

m−n

1 xdx = 1

αln m m − n = 1

αln 1 1 − α

qued (stary CLR) 12.4-3 — adresowanie otwarte, dwukrotne haszowanie, wykazać, że ciąg kontrolny jest permutacją gdy h2(k) jest względnie pierwsze z m

Bez utraty ogólności możemy założyć, że h1(k) = 0. Niech a = h2(k), d = gcd(a, n). Ciąg kontrolny ma postać ax( mod n). Rozważmy równanie ax ≡ z( mod n).

• z = d, z algorytmu Euklidesa wynika, że istnieje rozwiązanie równania ax + ny = gcd(a, n) = d — x0,

3

(4)

• z = kd — x := kx0

• d 6 |z — powiedzmy, że istnieją całkowite x, y spełniające równanie ax = z + ny, jednak d|n i d|a stąd lewa strona jest podzielna przez d, natomiast prawa nie! — sprzeczność.

qued

B-drzewa definicja

• każdy węzeł ma następujące pola n, c[], key[],

• każdy węzeł wewnętrzny utrzymuje n kluczy i n + 1 wskaźników do synów,

• klucze są uporządkowane rosnąco,

• klucz w poddrzewie c[i] mają wartości pochodzą z przedziału [key[i − 1], key[i]] (definiujemy key[0] = −∞, key[n + 1] = ∞),

• wszystkie liście mają leżą na tej samej głębokości,

• każdy węzeł zawiera nie więcej niż 2t − 1 kluczy,

• każdy węzeł oprócz korzenia zawiera co najmniej t − 1 kluczy.

B-drzewa usuwanie

• jeśli klucz k jest w węźle x i x jest liściem, to usuń k z węzła,

• jeśli klucz k jest w węźle wewnętrznym x, to:

– niech y1 syn x poprzedzający k, y2 syn x występujący po k, k1 po- przednik k w drzewie, k2 następnik k w drzewie,

– jeśli węzeł y1 ma co najmniej t kluczy, to rekurencyjnie usuń k1 i zastąp k przez k1,

– w przeciwnym przypadku, jeśli węzeł y2ma co najmniej t kluczy, to rekurencyjnie usuń k2i zastąp k przez k2,

– w przeciwnym przypadku, y1i y2mają po t − 1 kluczy, scal węzeł y1, klucz k i węzeł y2otrzymując węzeł y0, usuń rekurencyjnie k z węzła y.

• jeśli klucz k nie występuje w węźle wewnętrznym x, to:

– znajdź odpowiednie poddrzewo y w którym może znajdować się k, – jeśli y ma co najmniej t kluczy, usuń rekurencyjnie k z y,

– wpp., jeśli y ma t − 1 kluczy, ale jeden z sąsiadów y ma t kluczy, to dodaj jeden klucz do y (jeden klucz przechodzi z x do y, jeden z brata y do x),

– wpp., scal y z dowolnym bratem i usuń k z tak utworzonego węzła (je- śli x jest korzeniem, to może to spowodować zmniejszenie wysokości drzewa).

4

Cytaty

Powiązane dokumenty

Wyznaczyć czasy działania algorytmów w przypadku sortowania tablicy liczb całkowitych (wykorzystać funkcję pomiaru czasu). Wyprowadzić na ekran czasy

Zaproponuj wydajną implementację d-kopca w tablicy i dokonaj analizy złożoności obliczeniowych operacji kolejki priorytetowej: Ini, Min, DeleteMin, Insert i DecreaseKey.. W jaki

Zauważmy, że ostatnie n/2 ele- mentów spełnia warunki kopca, pozostaje jedynie poprawić porządek w pierw- szych n/2

Posortuj

Każde drzewo decyzyjne dla algorytmu sortującego ciąg n- elementowy przez porównywanie elementów, ma co najmniej wysokość log

Obliczanie wartości wyrażeń.. Czytamy kolejno znaki wyrażenia i kolejne argumenty operacji wpisujemy na stos argumentów, a kolejno spotkane operacje wpisujemy na stos

Zadanie Do zbioru reprezentowanego przez drzewo D dołączyć element e, o ile nie należy on jeszcze do etykiet drzewa D.... Zastosowanie: wyszukiwanie

Powiemy, że problem jest rozstrzygalny, jeśli istnieje algorytm, który dla dowolnych danych x po skończonej liczbie kroków daje rozwiązanie problemu. W przeciwnym