2016-05-12 11 views
0

wir stehen derzeit vor einem interessanten Problem. Wir möchten schätzen die Kardinalität eines Satzes ohne die Notwendigkeit, jedes einzelne Element zu speichern (in der Regel Bitmaps/Bitsets sind ein netter Ansatz). Ein sehr netter Algorithmus ist der sogenannte HyperLogLog-Random-Algorithmus (mehr dazu hier http://antirez.com/news/75).Kardinalitätsannäherung für logische Mengenoperationen - (das "HyperLogLog" für AND/OR/XOR)

Das Problem hierbei ist, dass Sie nur Sätze wie UNIONs, es ist so verschmelzen können im Grunde eine OR Kombination.

Eigentlich wollen wir nicht nur Sets mit ODER kombinieren, sondern auch mit AND. Wir wollen diese Operationen sogar kombinieren.

Beispiel: set1 UND (set2 OR set3) OR (set4 UND set5)

Jeder Satz eine Mächtigkeit im Bereich von Millionen hat. Jeder Wert hat eine Größe von 128 Bit.

Jeder Satz kann in irgendeiner Weise, z.B. "HLL, Bloom Filter, eine einfache Liste oder eine Kombination von diesen". Der Algorithmus muss in der kürzestmöglichen Zeit unter Verwendung eines realisierbaren Platzes ausgeführt werden.

Irgendwelche Ideen?

+0

Müssen die Sets nur durch diese Strukturen repräsentiert werden oder können zusätzliche Strukturen verwendet werden? Ich meine, wenn Sie HLLs mit MinHashes mischen, können Sie die Kardinalität von gesetzten Kreuzungen ziemlich einfach abschätzen. –

Antwort

2

Dieses genaue Problem ist das Thema https://pdfs.semanticscholar.org/5da8/bf81712187712aed159aed62e38fb012872e.pdf. Ihre Empfehlung ist, Bloom-Filter zu verwenden.

Der Bloomfilter für die Union ist das bitweise ODER der Bloomfilter. Der Bloom-Filter für den Schnittpunkt ist das bitweise UND der Bloom-Filter. So können Sie ganz einfach den Bloom-Filter der gewünschten Operation generieren.

Ihr Theorem 1 ermöglicht es Ihnen, die Größe eines Satzes aus der Anzahl der Bits in seinem Bloomfilter zu schätzen.

+0

Schön! Ich werde das untersuchen ... Ich freue mich darauf zu sehen, ob diese Lösung tatsächlich beide Operationen (in Kombination) UND und ODER erlaubt. Vielen Dank! – Fritz