En cs.stackexchange , pregunté sobre la biblioteca algebird scala en github, especulando sobre por qué podrían necesitar un paquete de álgebra abstracta.
La página de github tiene algunas pistas:
Implementaciones de monoides para algoritmos de aproximación interesantes, como el filtro Bloom, HyperLogLog y CountMinSketch. Estos le permiten pensar en estas operaciones sofisticadas como si fueran números, y sumarlas en hadoop o en línea para producir estadísticas y análisis potentes.
y en otra parte de la página de GitHub:
Originalmente se desarrolló como parte de la API de matriz de Scalding, donde las matrices tenían valores que son elementos de monoides, grupos o anillos. Posteriormente, estaba claro que el código tenía una aplicación más amplia dentro de Scalding y en otros proyectos dentro de Twitter.
Incluso Oskar Boykin de Twitter intervino:
La respuesta principal es que al explotar la estructura de semi-grupos, podemos construir sistemas que se paralelizan correctamente sin conocer la operación subyacente (el usuario promete asociatividad).
Al usar Monoids, podemos aprovechar la dispersión (tratamos con muchas matrices dispersas, donde casi todos los valores son cero en algunos Monoid).
Al usar Rings, podemos hacer una matriz de multiplicación sobre otras cosas que no sean números (que en ocasiones lo hemos hecho).
El proyecto algebird en sí (así como el historial de problemas) explica con bastante claridad lo que está sucediendo aquí: estamos creando muchos algoritmos para la agregación de grandes conjuntos de datos, y el aprovechamiento de la estructura de las operaciones nos da una victoria en el lado de los sistemas (que suele ser el punto crítico cuando se intenta producir algoritmos en miles de nodos).
Resuelva los problemas del sistema una vez para cualquier Semigroup / Monoid / Group / Ring, y luego puede conectar cualquier algoritmo sin tener que pensar en Memcache, Hadoop, Storm, etc.
¿Cómo son Bloom filters
/ hyperloglog
/ countminsketch
números similares?
¿Cómo es que las agregaciones de bases de datos tienen una estructura monoidal?
¿Cómo se ve este monoide? ¿Alguna vez tienen estructura grupal?
Las referencias bibliográficas serían útiles.