Digamos que tiene k
matrices de tamaño N
, cada una con valores únicos de 1
a 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 1
y 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 k
matrices), pero ¿hay una solución mejor?
Quiero implementar dicho algoritmo en C ++, pero cualquier descripción de una solución sería útil.
fuente
Tengo una sugerencia para el mejor caso . Puedes seguir un enfoque heurístico.
Por ejemplo, sabes que si
N=4
,N-1=3
será la distancia máxima y1
será la mínima. La distancia media es10/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/2
matrices (la mayoría de las veces), ya está en la parte superior promedio (> =2
de la distancia), incluso si están1
separados por la distancia en las otrask/2
matrices. Esa podría ser una solución para el mejor caso enO(2k)
=O(k)
.fuente