Dado un espacio bidimensional continuo (euclidiano) lleno de hyperspheres en movimiento/crecimiento/contracción bastante impredecibles Necesito encontrar repetidamente la hiperesfera cuya superficie es la más cercana a un coordenada dada Si algunas hiperesferas están a la misma distancia de mi coordenada, entonces la mayor hiperesfera gana. (El recuento total de hiperesferas está garantizado para permanecer igual en el tiempo.)Estructura de datos espaciales rápidos para la búsqueda de vecinos más cercanos entre hiperesferas de tamaño no uniforme
Mi primera idea fue utilizar un KDTree pero no va a tener volúmenes no uniformes los hiperesferas en cuenta. Así que busqué más y encontré BVH (Jerarquías de volumen delimitador) y BIH (Jerarquías de intervalo delimitador), que parecen hacer el truco. Al menos en el espacio de 2/3 dimensiones. Sin embargo, al encontrar bastante información y visualizaciones en los BVH, apenas pude encontrar nada en los BIH.
Mi requisito básico es un k-dimensional estructura de datos espaciales que toma en cuenta el volumen y de que sea súper rápido para construir (fuera de línea) o dinámicas con casi cualquier desequilibrio.
Dados mis requisitos anteriores, ¿con qué estructura de datos irías? ¿Algún otro que ni siquiera mencioné?
Edición 1: ¿Ha olvidado mencionar: se permite hypershperes (en realidad altamente esperado) para solapar!
Editar 2: Parece que en lugar de "distancia" (y "distancia negativa" en particular) mi métrica descrita coincide con la power of a point mucho mejor.
Dado que calcular la distancia de un punto a una hiperesfera es completamente trivial (incluso si O (k), pero de esa manera es todo en k-espacio), ¿cuántas hypersferas tiene en general? Por supuesto, la estructura de datos debe pagar, en comparación con una simple lista lineal de hiperesferas. Buena pregunta, sin embargo. –
El número de hiperesferas podría ser 8 (en cuyo caso probablemente solo usaría la fuerza bruta, o en miles, o incluso cientos de miles, dependiendo del tamaño del conjunto de datos, que en este momento no puedo prever. Actualmente estoy haciendo fuerza bruta y es tremendamente lento. – Regexident
¿El número de hiperesferas cambia a medida que se ejecuta el programa? Y, para mayor claridad, cuando escribe 'una determinada coordenada', espero que quiera decir que quiere una función que, para cualquier coordenada dada, devuelve la hiperesfera más cercana. Es decir, la coordenada dada no se fija durante la duración del programa? –