Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine...

13

Transcript of Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine...

Page 1: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.
Page 2: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/13

Das Externspeichermodell Lineare geordnete Listen Eine „naive“ Implementierung Eine „bessere“ Implementierung

◦ Aufbau◦ Operationen

Optimierungsmöglichkeiten Quellen

11.04.23 2

Page 3: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/13

ExternspeicherExternspeicher

1 I/O

B1 B2 Bn

11.04.23 3

Page 4: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/1311.04.23

Anfang

Array

einfachverlinkte Liste

Anfang

doppelverlinkte Liste

Anfang Ende

aufsteigend sortiert

Operationen:

- Search (x) Suchen eines Elementes innerhalb der Liste mit dem Schlüssel ‚x‘- Insert (x)Fügt ein Element mit dem Schlüssel ‚x‘ in die Liste- Delete (x)Entfernt ein Element mit dem Schlüssel ‚x‘ aus die Liste

4

Page 5: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/1311.04.23

Search(x):Search(x):Es wird über jedes Element in den Blöcken der Liste traversiert, auf der Suche nach dem Element mit dem Schlüssel ‚x‘.

Insert(x):Insert(x):Jeder Block wird einzeln durchlaufen, auf der Suche nach einem der Ordnung entsprechenden Platz. N/B I/Os

Falls der passende Block einen verfügbaren Platz besitzt, so wird das Element mit dem Schlüssel ‚x‘ eingefügt. 1 I/O

Falls der passende Block keinen verfügbaren Platz hat, so wird dieser in zwei Blöcke zu je B/2 Elemente aufgespalten. Beide Blöcke werden anschließend zurückgeschrieben. 2 I/O

ges. N/B+3 I/Os

ges. N/B I/Os

5

Page 6: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/1311.04.23

Delete(x):Delete(x):Es wird über jedes Element in den Blöcken der Liste traversiert, auf der Suche nach dem Element mit dem Schlüssel ‚x‘ (Search(x)).

Das gesuchte Element wird aus dem Block entfernt und der betreffende Block wird zurückgeschrieben.

ges. N/B+1 I/Os

N/B I/Os

1 I/O

Die „naive“ Implementierung lässt sich optimieren…

6

Page 7: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/1311.04.23

interner Speicherinterner Speicher

Indexarray:Indexarray:Beinhaltet Schlüssel des ersten Elements jedes Blocks (Key x), den dazugehörigen Zeiger dieses Blocks im externen Speicher (ptr y) und die Anzahl der Elemente innerhalb des Blocks (n). Länge des Arrays: N/B

…………

……

Blockarray:Blockarray:Ein Block wird repräsentiert als Array der Länge: B

5Key 1

ptr 13

Key x

ptr y

7

Page 8: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/1311.04.23

interner Speicherinterner Speicher Blockplätze:Blockplätze:Zum Mischen und Aufspalten der Blöcke bei Bedarf. Entspricht der Größe von: 2B

Optimierungsziel:Optimierungsziel:Zu jeder Zeit sollten sich in einem Paar aufeinander folgender Blöcke 2/3 B an zusammengehörigen Elementen befinden. (Minimierung der Blockanzahl)

|B2| + |B3| > 2/3 BBeispiel Blockgröße: B = 5

|B1| + |B2| > 2/3 B

8

|Bx| = #Elemente

Page 9: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/1311.04.23

Search(x):Search(x):- Führe binäre Suche auf dem Indexarray durch. Da alle ersten Schlüssel im Indexarray gespeichert sind, kann der gesuchte Block anhand der Schlüssel seiner Nachbarblöcke gefunden werden.

- Führe eine binäre Suche auf das Blockarray durch.

Search(5)

Search(5)

3 1 31

ptr B1

7

ptr B2

8

ptr B3

9

1 I/O

ges. 1 I/O

Page 10: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/13

Beispiel Blockgröße: B = 3

11.04.23

Insert(x):Insert(x):Passender Block kann für das Einfügen analog zur Search(x)-Operation gesucht werden.

Fall 1 – Gesuchter Block bietet Platz zum EinfügenFall 1 – Gesuchter Block bietet Platz zum EinfügenFüge das Element ein und verschiebe wenn nötig die nachfolgenden Elemente dieses Blockes. *

Fall 2 – Gesuchter Block bietet Fall 2 – Gesuchter Block bietet keinenkeinen Platz zum Einfügen Platz zum Einfügena)Falls ein benachbarter Block noch eine Einfügemöglichkeit besitzt, so füge Element in diesen ein bzw. tausche Elemente aus. (Minimierung #Blöcke) *

b)Neuer Block wird mit der Hälfte der Elemente des vollen Blocks erzeugt. Element wird nun in den richtigen Block eingefügt. *

11 22

4444

10

3 I/Os

2 I/Os

1 I/O

ges. max. 4 I/Os

* ggf. Indexarray aktualisieren

Page 11: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/1311.04.23

Delete(x):Delete(x):Element mit Schlüssel ‚x‘ kann analog zur Search(x)-Operation gesucht werden. Element kann nun entfernt werden. *

Fall – Block (BFall – Block (Bxx) hat nun < B/3 Elemente) hat nun < B/3 ElementePrüfe ob ein Nachbarblock in der Summe mit Block Bx höchstens 2/3 Elemente besitzen. Wenn Block nicht eindeutig, wähle den Kleineren von Beiden und verschmelze die Blöcke

|By| + |Bx| 2/3 B

11

* ggf. Indexarray aktualisieren

1 I/O

ges. max. 4 I/Os

3 I/Os

Beispiel Blockgröße: B = 6

Bz > By

Page 12: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/1311.04.23

Blockarray könnte durch eine einfach/doppelt verlinkte Liste ersetzt werden.Die daraus resultierenden Änderungen sind wie folgt:

Die Suche innerhalb eines Block hat nun eine größere Laufzeit da keine binäre Suche möglich ist.

Das Aufrücken der Elemente bei Insert(x) und nach Delete(x) geschieht in O(1).

12

Keine Änderung der I/O – Anzahl, aber Änderung der Laufzeit

Page 13: Externe Datenstruktur lineare Liste. /13 Das Externspeichermodell Lineare geordnete Listen Eine naive Implementierung Eine bessere Implementierung Aufbau.

/1311.04.23

U. Meyer, P. Sanders und J. Sibeyn (Eds.), Algorithms for Memory Hierarchies, Advances Lectures, Lecture Notes in Computer Science 2625, Springer 2003• Kapitel 2: R. Pagh: Basic External Memory Data Structures

13