Distancia promedio máxima entre dos números en múltiples matrices


8

Digamos que tiene kmatrices de tamaño N, cada una con valores únicos de 1a N.

¿Cómo encontrarías los dos números que están en promedio más alejados el uno del otro?

Por ejemplo, dados los arreglos:

[1,4,2,3]
[4,2,3,1]
[2,3,4,1]

Entonces la respuesta sería el ítem 1y 2, dado que están a una distancia de 2 en las dos primeras matrices, y de 3 números en la última.

Soy consciente de una solución O (kN ^ 2) (midiendo la distancia entre cada par de números para cada una de las kmatrices), pero ¿hay una solución mejor?

Quiero implementar dicho algoritmo en C ++, pero cualquier descripción de una solución sería útil.

Respuestas:


3

Después de una transformación de tiempo lineal que indexa los números, este problema se reduce a calcular el diámetro de un conjunto de puntos con respecto a la distancia L1. Lamentablemente, este problema está sujeto a la maldición de la dimensionalidad.

Dado

    1 2 3 4
1: [1,4,2,3]
2: [4,2,3,1]
3: [2,3,4,1]

calculamos

    1 2 3
1: [1,4,4]
2: [3,2,1]
3: [4,3,2]
4: [2,1,3]

y luego la distancia L1 entre 1y 2es |1-3| + |4-2| + |4-1| = 8, que es su distancia promedio (en términos de problemas) veces k = 3.

Dicho esto, puede aplicar un algoritmo vecino más cercano aproximado utilizando la entrada de arriba como la base de datos y la imagen de cada punto en la base de datos N+1-vcomo una consulta.


Esta referencia sugiere un algoritmo aleatorio con tiempo de ejecución lineal esperado que puede ser de interés para el OP.
hilberts_drinking_problem

@hilberts_drinking_problem Podría ser útil, pero solo para dimensiones bajas.
David Eisenstat

¿Crees que sería posible combinar esto con un enfoque heurístico descrito en otra respuesta?
Magnus EF

@ MagnusE-F Hay muchos algoritmos vecinos más cercanos aproximados. Modifiqué mi respuesta sobre cómo reducir este problema a ANN.
David Eisenstat

1

Tengo una sugerencia para el mejor caso . Puedes seguir un enfoque heurístico.

Por ejemplo, sabes que si N=4, N-1=3será la distancia máxima y 1será la mínima. La distancia media es 10/6=1,66667 (sumas de distancias entre pares dentro de una matriz / número de pares dentro de una matriz).

Entonces, sabe que si dos números están en los bordes de las k/2matrices (la mayoría de las veces), ya está en la parte superior promedio (> = 2de la distancia), incluso si están 1separados por la distancia en las otras k/2matrices. Esa podría ser una solución para el mejor caso en O(2k)= O(k).


Eso parece un buen enfoque. En mi caso, N es mucho más grande que k y creo que un algoritmo heurístico funcionará bien
Magnus EF

¿Qué pasa con el peor caso de este algoritmo? ¿Sigue siendo O (k N ^ 2)?
Jérôme Richard

@ JérômeRichard no cambiamos el algoritmo, solo agregamos una heurística que, si corresponde, solo se aplica a un buen escenario. En el peor de los casos, el algoritmo principal lo resolverá.
Samthegolden
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.