• Keine Ergebnisse gefunden

bei großem C, und einer geringen Anzahl tats¨ achlich abgelegter Datenelemente sind 1-Level-Buckets in zweifacher Hinsicht ung¨ unstig:

N/A
N/A
Protected

Academic year: 2021

Aktie "bei großem C, und einer geringen Anzahl tats¨ achlich abgelegter Datenelemente sind 1-Level-Buckets in zweifacher Hinsicht ung¨ unstig:"

Copied!
14
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

7.1.2 2-Level-Buckets

Bei einem großen Wertebereich der zu speichernden Schl¨ ussel, d.h.

bei großem C, und einer geringen Anzahl tats¨ achlich abgelegter Datenelemente sind 1-Level-Buckets in zweifacher Hinsicht ung¨ unstig:

Das Feld b belegt statisch Speicherplatz der Gr¨ oße Θ(C), obwohl nur ein kleiner Teil davon wirklich gebraucht wird.

Der Zeitbedarf f¨ ur ein ExtractMin n¨ ahert sich der

worst-case-Komplexit¨ at Θ(C), da der n¨ achste nicht-leere

Bucket ziemlich weit entfernt sein kann.

(2)

2-Level-Buckets versuchen diesen Problemen mit folgender Idee abzuhelfen:

Es gibt einen Array btop, bestehend aus B := √ C + 1 top-Buckets.

Zu jedem Bucket i in btop gibt es noch einen weiteren Array bbot

i

, der ebenfalls aus B bottom-Buckets besteht.

bbot

i

nimmt Elemente auf, deren Schl¨ ussel im Interval [iB, (i + 1)B − 1] liegen. Um ein Element in einen Bucket

einzuf¨ ugen, wird zuerst der passende Bucket in btop gesucht. Dann wird in dem dazugeh¨ origen bbot

i

das Element (wie bei

1-Level-Buckets) eingef¨ ugt.

(3)

Um sowohl Platz als auch Zeit zu sparen, kann man durch leichte Modifizierung mit einem einzigen Array von Bottom-Buckets auskommen:

Wir verwenden zwei Arrays (Top-Buckets und Bottom-Buckets).

Dabei enth¨ alt der Array der Top-Buckets in l√

C + 1 m

+ 1

Buckets die meisten Elemente in grob vorsortierter Form, nur die Elemente mit den kleinsten Schl¨ usseln werden im Array f¨ ur die Bottom-Buckets, der die L¨ ange

B := l√

C + 1 m

hat, dann endg¨ ultig sortiert vorgehalten.

(4)

2-Level-Buckets k¨ onnen mit folgenden Elementen aufgebaut werden:

Der Array btop[0..B] nimmt in jedem Bucket Elemente mit Schl¨ usseln aus einem Intervall der L¨ ange B auf; die Schl¨ ussel stammen aus allen Intervallen außer dem niedrigsten.

Der Array bbot[0..B − 1] nimmt in jedem Bucket Elemente mit genau einem Schl¨ ussel auf; die Schl¨ ussel stammen nur aus dem niedrigsten.

valtop ist die linke Intervallgrenze des niedrigsten Intervalls.

postop enth¨ alt den Index des Buckets in btop f¨ ur das niedrigste Intervall (das aber in bbot gespeichert wird).

nbot ist die Anzahl der Elemente in bbot.

n ist die Anzahl der Elemente in bbot und btop.

(5)

0 1 2 3 4 5 6 7 8 9

86 32 48 57

26 59

? ? ? ?

? ?

-

? C= 80

valtop= 6 postop= 2 btop:

bbot:

nbot= 4

pppppp pppppp pppppp pppppp pppppp pppppp pppppp pppppp pp

pppppp pppppp pppppp pppppp pppppp pppppp pppppp pppppp ppp pp ppp ppp ppp ppp ppp

pp pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp

pppppp

pppp pppppppppp

0 1 2 3 4 5 6 7 8

7

7

11 13

?

? ? ?

(6)

Dabei gilt:

btop[(postop + i) mod B] enth¨ alt alle Elemente x mit

valtop + iB ≤ k(x) < valtop + (i + 1)B, wobei 1 ≤ i ≤ B ; bbot[i] enth¨ alt alle Elemente x mit

k(x) = valtop + i, wobei 0 ≤ i ≤ B − 1 .

Dazu ist allerdings folgende Annahme zu machen:

Hat ein ExtractMin ein Element mit Schl¨ ussel k zur¨ uckgeliefert, werden bis zum n¨ achsten Aufruf von ExtractMin nur Elemente mit Schl¨ usseln ≥ valtop eingef¨ ugt. Dies stellt sicher, dass ein Element aus bbot nie nach btop wandert, und ist z.B. in Dijkstra’s

Algorithmus f¨ ur k¨ urzeste Pfade erf¨ ullt.

(7)

Lemma 63

Zu jedem Zeitpunkt haben alle Schl¨ ussel Platz in der Datenstruktur.

Beweis:

Am meisten Platz wird ben¨ otigt, wenn der kleinste Schl¨ ussel ganz rechts in bbot gespeichert oder dort entfernt worden ist. Er hat dann den Wert valtop + B − 1. Der gr¨ oßte Schl¨ ussel, der nun vorkommen kann und also Platz finden muss, ist

valtop + B − 1 + C.

(8)

Beweis (Forts.):

gr¨ oßtm¨ oglicher Schl¨ ussel in btop

= valtop + (B + 1) · B − 1

= valtop + B + B · B − 1

= valtop + B + d √

C + 1ed √

C + 1e − 1

≥ valtop + B + C + 1 − 1

> valtop + B − 1 + C

= gr¨ oßtm¨ oglicher erlaubter Schl¨ ussel

(9)

Annahme: Vor dem ersten ExtractMin werden nur Elemente x mit 0 ≤ k(x) ≤ C eingef¨ ugt.

i) Initialize:

valtop := postop := nbot := n := 0

initialisiere btop, bbot

(10)

ii) Insert(x):

¨

uberpr¨ ufe Invarianten;

i := j

k(x)−valtop B

k

+ postop

mod (B + 1) if i = postop then

f¨ uge x in bbot[k(x) − valtop] ein nbot := nbot + 1

else

f¨ uge x in btop[i] ein fi

n := n + 1

(11)

iii) ExtractMin

co suche kleinstes Element in bbot oc j := 0; while bbot[j] = ∅ do j := j + 1 od

entferne ein (beliebiges) Element aus bbot[j] und gib es zur¨ uck nbot := nbot − 1; n := n − 1

if n = 0 then return fi if nbot = 0 then

while btop[postop] = ∅ do

postop := (postop + 1) mod (B + 1) valtop := valtop + B

od

while btop[postop] 6= ∅ do

entferne beliebiges Element x aus btop[postop]

f¨ uge x im bbot[k(x) − valtop] ein nbot := nbot + 1

od

(12)

iv) DecreaseKey(x, k)

entferne x aus seinem momentanen Bucket falls n¨ otig, aktualisiere nbot

k(x) := k

¨

uberpr¨ ufe Invarianten;

i := j

k(x)−valtop B

k

+ postop

mod (B + 1) if i = postop then

f¨ uge x in bbot[k(x) − valtop] ein nbot := nbot + 1

else

f¨ uge x in btop[i] ein

fi

(13)

Lemma 64

Die worst-case (reelle) Laufzeit bei 2-Level-Buckets ist f¨ ur Insert und DecreaseKey O(1), f¨ ur ExtractMin O(n + √

C) und f¨ ur Initialize O( √

C).

Beweis:

— Insert: O(1) + 1 = O(1)

— DecreaseKey : O(1)

— ExtractMin

O

√ C +

C + #Elemente btop

↓ bbot

(14)

Setze Potenzial := Anzahl der Elemente in Buckets in btop.

Satz 65

Die amortisierten Kosten f¨ ur 2-Level-Buckets sind O(1) bei Insert und DecreaseKey und O( √

C) bei ExtractMin.

Beweis:

— Insert: s.o.

— DecreaseKey : s.o.

— ExtractMin:

O

C + #Elemente btop

↓ bbot

 −#Elemente btop

↓ bbot

= O( √

C)

Referenzen

ÄHNLICHE DOKUMENTE

Da sie Angst haben, dass ihre Nachrichten mitgelesen werden, kreieren sie dazu einen geheimen Schl ¨ussel mithilfe des Diffie-Hellman Schl ¨usselaustausches.. Sei G = (Z/77, +)

Problem: Es entstehen prim¨ are H¨ aufungen (primary clustering) um diejenigen Schl¨ ussel herum, die beim Einf¨ ugen eine Kollision hervorgerufen haben. EADS 4.2 Methoden

Buckets die meisten Elemente in grob vorsortierter Form (ein Top-Bucket wird nicht ben¨ utzt!), nur die Elemente mit den kleinsten Schl¨ usseln werden im Array f¨ ur die

In einem AVL-Baum mit n Schl¨ usseln kann in Zeit O(log n) festgestellt werden, ob sich ein gegebener Schl¨ ussel in der Schl¨ usselmenge befindet oder

2 In jedem von H’s Binomialb¨ aumen ist ein kleinster Schl¨ ussel an der Wurzel gespeichert; verlinkt man daher die Wurzeln aller Binomialb¨ aume von H in einer zirkul¨ aren Liste,

(a) Bestimmen Sie die Struktur der elliptischen Kurven (als Gruppen), die durch die Glei- chungen y 2 = x 3 + ax f¨ ur a = 1, 2, 3 ¨ uber F 17 gegeben sind (dazu ist die Software

Implementieren Sie auch die anderen notwen- digen Rotationsarten und erg¨anzen Sie die Methode zum Einf¨ugen um die entsprechenden Methoden- aufrufe f¨ur Rotationen.. Schreiben

Testen Sie mithilfe des Miller-Rabin-Tests, ob die Zahl 577 mit 75% Wahrscheinlichkeit eine Primzahl ist oder nicht.. 3. RC4