Datenstrom-Algorithmen

Werbung
28. Bundeswettbewerb
Informatik 2009/2010
Endrunde 5.–8.10.2010
Datenstrom-Algorithmen
Gruppenarbeit 1. Tag
In dieser Aufgabe betrachten wir Algorithmen, die auf Datenströmen operieren. Hierbei geht
es darum, sehr große Mengen von Daten in nur einem Durchlauf und unter Verwendung von
sehr wenig Speicherplatz zu verarbeiten. Solche Algorithmen haben vielfältige Anwendungen,
zum Beispiel beim Netzwerk-Monitoring, zum frühzeitigen Erkennen von Denial-of-ServiceAttacken oder zur Online-Analyse von Telefonverbindungen, um rechtzeitig auf überlastete Leitungen reagieren zu können.
Das diesem Bereich zu Grunde liegende Algorithmen-Modell ist wie folgt: Die Eingabe
besteht aus einem Strom von Daten
x1 , x2 , x3 , x4 , x5 , . . . , xn
die nacheinander als Eingabewerte gelesen werden. Dabei stammt jeder der Werte x1 , x2 , . . . , xn
aus einer Menge U = {1, . . . , m} von möglichen Werten.
In der Regel ist der Datenstrom sehr lang, und m ist sehr groß. Zur Orientierung können Sie
sich beispielsweise vorstellen, dass U die Menge aller möglichen IP-Adressen repräsentiert und
dass der Datenstrom für jede Anfrage, die innerhalb eines Tages an eine Internet-Suchmaschine
Ihrer Wahl gestellt wird, einen Eintrag mit der entsprechenden IP-Adresse enthält, von der aus
die Anfrage gestartet wurde.
Einem Datenstrom-Algorithmus steht nur sehr wenig Speicherplatz zur Verfügung, so dass
es nicht möglich ist, die gesamte Eingabe auf einem Speichermedium abzulegen und danach
wieder darauf zuzugreifen.
Aufgabe 1:
(a) Wir betrachten zunächst die Situation, bei der die Eingabe aus einem Datenstrom der Form
x1 , x2 , . . . , xn−1
besteht, wobei n = m ist und x1 , . . . , xn−1 eine Liste von n−1 verschiedenen Zahlen aus
U = {1, . . . , n} ist. Finden Sie einen Datenstrom-Algorithmus, der herausfindet, welche
Zahl aus {1, . . . , n} nicht in dem Datenstrom vorkommt. Ihr Algorithmus darf dabei nur
Speicherplatz der Größe O(log2 n) verwenden.
Können Sie auch einen Algorithmus finden, der mit weniger als log2 n Speicherbits auskommt?
1
(b) Finden Sie einen Datenstrom-Algorithmus, der die Variante des obigen Problems löst, bei
der die Eingabe ein Datenstrom der Länge n−2 ist, in dem x1 , . . . , xn−2 aus n−2 verschiedenen Zahlen aus U besteht, und bei dem die beiden fehlenden Zahlen aus U ermittelt
werden sollen, die nicht im Datenstrom vorkommen. Ihr Algorithmus sollte mit O(2 log2 n)
Speicherbits auskommen.
Können Sie auch eine Lösung für das allgemeinere Problem finden, bei dem für eine beliebige Zahl k der Datenstrom aus n − k verschiedenen Elementen x1 , . . . , xn−k besteht, und
bei dem die k fehlenden Zahlen aus U ermittelt werden sollen?
In den folgenden Aufgaben ist m wieder beliebig vorgegeben, und die Eingabe besteht aus
einem Datenstrom x1 , x2 , . . . , xn dessen einzelne Elemente alle zur Menge U = {1, . . . , m}
gehören.
Aufgabe 2:
Ziel ist jetzt, zu einem gegebenen Schwellwert s mit 0 < s < 1 eine Menge M von Eingabeelementen zu ermitteln, die diejenigen Elemente aus U enthält, die mindestens s·n mal im
Datenstrom vorkommen. (Die Menge M darf aber durchaus auch einige Elemente enthalten,
die weniger häufig im Datenstrom vorkommen.)
Finden Sie einen Datenstrom-Algorithmus, der dieses Problem löst und dabei nur Speicherplatz der Größe O( 1s · log2 m · log2 n) Bits benötigt.
Können Sie auch eine untere Schranke angeben, d.h. einen Wert w (der von s, m, n abhängt),
so dass es keinen Datenstrom-Algorithmus gibt, der dieses Problem löst und dabei höchstens
Speicherplatz der Größe w Bits benutzt?
Aufgabe 3:
Als nächstes sollen randomisierte Algorithmen1 entwickelt werden, die zufällige Stichproben
von Elementen des Eingabe-Datenstroms erstellen.
(a) Zunächst ist ein Datenstrom-Algorithmus gesucht, der eine Variable z enthält, so dass für
jeden Zeitpunkt t gilt: Nach Verarbeiten des t-ten Elements des Datenstroms (d.h. nach
Verarbeiten von xt ) enthält die Variable z genau ein Tupel (x j , j) aus der Menge
{(x1 , 1), (x2 , 2), . . . , (xt ,t)} ,
und jedes j ∈ {1, . . . ,t} wird dabei mit der gleichen Wahrscheinlichkeit gewählt (nämlich
mit der Wahrscheinlichkeit 1/t). D.h.: Ihr Algorithmus soll zufällig ein Element aus der
Menge {(x1 , 1), (x2 , 2), . . . , (xt ,t)} auswählen. Mit “zufällig” ist gemeint: Wenn Sie Ihren
Algorithmus sehr oft – sagen wir, K mal, wobei K eine sehr große Zahl ist – mit derselben Eingabe starten, dann ist für jedes einzelne (x j , j) aus {(x1 , 1), (x2 , 2), . . . , (xt ,t)} die
Variable z zum Zeitpunkt t bei etwa K/t Läufen Ihres Algorithmus mit dem Wert (x j , j)
belegt.
Ihr Algorithmus sollte mit Speicherplatz der Größe O(log2 m + log2 n) Bits auskommen.
1 D.h.,
Ihre Algorithmen dürfen einen Zufallsgenerator benutzen.
2
(b) Sei nun s eine beliebige natürliche Zahl > 1. Verallgemeinern Sie Ihren Algorithmus aus (a)
zu einem Algorithmus, bei dem für jeden Zeitpunkt t > s gilt: Nach Verarbeiten des t-ten
Elements des Datenstroms enthält die Variable z eine s-elementige Menge
X ⊆ {(x1 , 1), (x2 , 2), . . . , (xt ,t)} ,
und jede s-elementige Teilmenge von {(x1 , 1), (x2 , 2), . . . , (xt ,t)} kommt
dabei mit der gleit
2
chen Wahrscheinlichkeit vor (nämlich der Wahrscheinlichkeit 1/ s ). Ihr Algorithmus
sollte dabei mit Speicherplatz der Größe O(s · (log2 m + log2 n)) Bits auskommen.
Weisen Sie jeweils nach, dass Ihre Algorithmen die gewünschten Eigenschaften besitzen.
In der folgenden Aufgabe betrachten wir eine Anwendung des Algorithmus aus Aufgabe 3,
in der es darum geht, eine Approximation an den Median der Eingabewerte x1 , x2 , . . . , xn zu
bestimmen.
Der Median ist hierbei ein Wert x j (für 1 6 j 6 n), so dass gilt: Werden die Werte x1 , x2 , . . . , xn
aufsteigend sortiert, so ist x j der Wert, der in dieser Sortierung in der Mitte steht (d.h. an Posin
tion n+1
2 , falls n ungerade ist, bzw. an Position 2 , falls n gerade ist).
Allgemein wird die Position, an der ein Element x j in der sortierten Liste steht, als der Rang
von x j bezeichnet.
Aufgabe 4:
Nutzen Sie den Algorithmus aus Aufgabe 3, um einen Datenstrom-Algorithmus zu entwickeln,
der eine Approximation an den Median berechnet. Genauer gesagt: Es werden Zahlen ε und δ
mit 0 6 ε 6 1 und 0 6 δ 6 1 vorgegeben. Gesucht ist ein Datenstrom-Algorithmus, der nach
Verarbeiten des Datenstroms x1 , x2 , . . . , xn ein Element x j ausgibt, dessen Rang mit Wahrscheinlichkeit > 1−δ zwischen 2n − ε·n und 2n + ε·n liegt.
Hinweis: Es gibt einen Datenstrom-Algorithmus, der mit einem Speicher der Größe O((log2 m+
log2 n) · ε12 · log2 δ1 ) Bits auskommt.
Aufgabe 5:
Betrachten Sie die auf Seite 1 dieses Aufgabenblatts erwähnten sowie weitere interessante Anwendungsszenarien. Identifizieren Sie für jedes der Szenarien einige wichtige algorithmische
Fragestellungen, diskutieren Sie, inwieweit Datenstrom-Algorithmen zur deren Lösung von
Nutzen sein können, und geben Sie ggf. geeignete Datenstrom-Algorithmen an.
t!
Zahl st ist definiert als s!(t−s)!
und gibt u. a. an, wie viele Teilmengen mit s Elementen es in einer
Gesamtmenge mit t Elementen gibt.
2 Die
3
Herunterladen