Video: L25 0 Bit Vector + Bloom Filter I Dictionary building 2024
Das Herzstück vieler Streaming-Algorithmen sind Bloom-Filter. Vor fast 50 Jahren von Burton H. Bloom, zu einer Zeit als die Informatik noch recht jung war, war die ursprüngliche Absicht des Schöpfers dieses Algorithmus, Raum (Speicher) und / oder Zeit (Komplexität) gegen das zu handeln, was er nannte. zulässige Fehler. Seine Originalarbeit trägt den Titel Raum / Zeit-Abstriche bei der Hashcodierung mit zulässigen Fehlern.
Sie wundern sich vielleicht über den Raum und die Zeit, die Bloom für seinen Algorithmus als Motivatoren betrachtet. Stellen Sie sich vor, Sie müssen feststellen, ob ein Element bereits in einem Stream unter Verwendung einer zuvor erörterten Datenstruktur aufgetreten ist. Etwas in einem Stream zu finden bedeutet, dass das Aufnehmen und Suchen schnell ist, daher scheint ein Hash-Tabelle eine ideale Wahl zu sein. Hash-Tabellen erfordern lediglich das Hinzufügen der Elemente, die Sie aufzeichnen und speichern möchten. Das Wiederherstellen eines Elements aus einer Hash-Tabelle ist schnell, weil die Hash-Tabelle leicht manipulierte Werte verwendet, um das Element darzustellen, und nicht das Element selbst (das sehr komplex sein kann). Die Speicherung beider Elemente und eines Index für diese Elemente hat jedoch Grenzen. Wenn eine Hashtabelle mehr Elementen gegenübersteht, als sie verarbeiten kann, z. B. die Elemente in einem kontinuierlichen und potentiell unendlichen Stream, werden Sie irgendwann Speicherprobleme bekommen.
Eine wichtige Überlegung für Bloom-Filter ist, dass falsche Positive auftreten können, falsche Negative jedoch nicht. Zum Beispiel könnte ein Datenstrom Echtzeitüberwachungsdaten für ein Kraftwerk enthalten. Bei Verwendung eines Bloom-Filters würde die Analyse des Datenstroms zeigen, dass die erwarteten Messwerte wahrscheinlich Teil der zulässigen Messwerte sind, wobei einige Fehler zulässig sind. Wenn jedoch ein Fehler im System auftritt, zeigt die gleiche Analyse, dass die Messwerte nicht Teil der zulässigen Messwerte sind. Es ist unwahrscheinlich, dass die falschen Positiven Probleme verursachen, aber das Fehlen falscher Negative bedeutet, dass jeder sicher bleibt. Filter wie der Bloom-Filter sind probabilistische Datenstrukturen - sie liefern keine bestimmte, sondern eine wahrscheinliche Antwort.
Hashes, die einzelnen Einträge in einer Hashtabelle, sind schnell, weil sie sich wie der Index eines Buches verhalten. Sie verwenden eine Hash-Funktion, um den Hash zu erzeugen. Die Eingabe ist ein Element, das komplexe Daten enthält, und die Ausgabe ist eine einfache Zahl, die als Index für dieses Element fungiert. Eine Hash-Funktion ist deterministisch, da sie jedes Mal, wenn Sie sie mit einer bestimmten Dateneingabe speisen, dieselbe Nummer erzeugt.Sie verwenden den Hash, um die komplexen Informationen zu finden, die Sie benötigen. Bloom-Filter sind hilfreich, weil sie eine sparsame Möglichkeit darstellen, Spuren vieler Elemente aufzuzeichnen, ohne sie wie eine Hash-Tabelle speichern zu müssen. Sie arbeiten auf einfache Weise und verwenden folgende Hauptbestandteile:
- Ein Bitvektor: Eine Liste von Bitelementen, wobei jedes Bit im Element einen Wert von 0 oder 1 haben kann. Die Liste ist lang. Anzahl von Bits, die m genannt werden. Je größer m ist, desto besser, obwohl es Möglichkeiten gibt, seine Größe optimal zu bestimmen.
- Eine Reihe von Hash-Funktionen: Jede Hash-Funktion repräsentiert einen anderen Wert. Die Hash-Funktionen können Daten schnell zerreißen und gleichmäßig verteilte Ergebnisse erzeugen, die Ergebnisse sind, die sich gleichermaßen von den minimalen bis zu den maximalen Ausgabewerten des Hashs erstrecken.