Auf cs.stackexchange fragte ich nach der Algebird- Scala-Bibliothek auf Github und spekulierte darüber, warum sie möglicherweise ein abstraktes Algebra-Paket benötigen.
Die Github-Seite enthält einige Hinweise:
Implementierungen von Monoiden für interessante Approximationsalgorithmen wie Bloom-Filter, HyperLogLog und CountMinSketch. Mit diesen können Sie sich diese ausgefeilten Vorgänge wie Zahlen vorstellen und sie in Hadoop oder online addieren, um leistungsstarke Statistiken und Analysen zu erstellen.
und in einem anderen Teil der GitHub-Seite:
Es wurde ursprünglich als Teil der Matrix-API von Scalding entwickelt, bei der Matrizen Werte hatten, die Elemente von Monoiden, Gruppen oder Ringen sind. In der Folge war klar, dass der Code eine breitere Anwendung in Scalding und in anderen Projekten innerhalb von Twitter hatte.
Sogar Oskar Boykin von Twitter mischte sich ein:
Die Hauptantwort lautet, dass wir durch Ausnutzung der Halbgruppenstruktur Systeme erstellen können, die korrekt parallelisieren, ohne die zugrunde liegende Operation zu kennen (der Benutzer verspricht Assoziativität).
Durch die Verwendung von Monoiden können wir die Sparsamkeit nutzen (wir haben es mit vielen spärlichen Matrizen zu tun, bei denen fast alle Werte in einigen Monoiden eine Null sind).
Mit Ringen können wir eine Matrixmultiplikation über andere Dinge als Zahlen durchführen (was wir gelegentlich getan haben).
Das Algebird-Projekt selbst (sowie die Problemhistorie) erklärt ziemlich deutlich, was hier vor sich geht: Wir erstellen viele Algorithmen für die Aggregation großer Datenmengen, und die Nutzung der Struktur der Vorgänge verschafft uns einen Gewinn auf der Systemseite (Dies ist normalerweise der Schmerzpunkt beim Versuch, Algorithmen auf Tausenden von Knoten zu erstellen).
Lösen Sie die Systemprobleme einmal für eine Halbgruppe / Monoid / Gruppe / Ring, und dann können Sie einen beliebigen Algorithmus anschließen, ohne an Memcache, Hadoop, Storm usw. denken zu müssen.
Wie sind Bloom filters
/ hyperloglog
/ countminsketch
wie Zahlen?
Wie kommt es, dass Datenbankaggregationen eine monoidale Struktur haben?
Wie sieht dieses Monoid aus? Haben sie jemals eine Gruppenstruktur?
Literaturhinweise wären hilfreich.