Esto es un problema en Data mining
y similarity search
. Existen numerosos artículos que describen cómo se puede hacer eso y escalar a grandes cantidades de datos.
Tengo una implementación (github : mksteve, clustering, con algunos comentarios al respecto en mi blog) de wikipedia : Metric tree. Esto requiere que las medidas que está realizando cumplan con la desigualdad del triángulo (wikipedia : Metric space). Es decir, la distancia métrica del elemento A al elemento C es menor o igual que la distancia A a B + la distancia B a C.
Dado esa desigualdad, es posible recortar el espacio de búsqueda, por lo que solo se buscan los subárboles que pueden superponerse con el área objetivo. Sin esa característica es verdadera (espacio métrico)
Posiblemente el número de bits de diferencia en el simhash sería un espacio métrico.
El uso general de estos conjuntos de datos, se alude en el documento cuando se menciona mapReduce, que generalmente se ejecuta en un hadoop cluster
. Cada nodo de procesamiento recibe un subconjunto de datos y encuentra un conjunto de coincidencias objetivo de sus conjuntos de datos locales. Estos se combinan para dar una lista completamente ordenada de elementos similares.
Hay algunos documentos (inseguros de referencias) que aluden al uso de m-trees en un clúster, donde se dan diferentes partes del espacio de búsqueda a diferentes clústeres, pero no estoy seguro de si la infraestructura de hadoop sería compatible usando una abstracción de alto nivel.
Si propones el problema en http://codegolf.stackexchange.com/ probablemente termines con una implementación de Perl de 250 bytes gratis. Es un chiste. – robermorales