Duplicar posible:
Counting inversions in an array¿Cómo encontrar el número de inversiones en una matriz?
Ésta es una phone interview question: "Encontrar el número de inversiones en una matriz". Supongo que se refieren a la solución O (N log N). Creo que no puede ser mejor que O (N log N) ya que esta es la complejidad de clasificación.
Las respuestas a un similar question se pueden resumir de la siguiente manera:
- Calcular la mitad de la distancia que los elementos deben ser movidos para ordenar la matriz: copiar la matriz y ordenar la copia. Para cada elemento de la matriz original
a[i]
encuentre su posiciónj
en la copia ordenada (búsqueda binaria) y sume las distancias a la mitadabs(i - j)/2
. Modificar
merge sort
:merge
modificar para contar las inversiones entre los dos conjuntos ordenados y ejecutar regularmente conmerge sort
quemerge
modificado.¿Tiene sentido? ¿Hay otras soluciones (quizás más simples)? ¿No es demasiado difícil para una entrevista telefónica?
Puede encontrar la solución n log n codificada en java aquí: http: // stackoverflow.com/questions/337664/conteo-inversiones-en-una-matriz/6424847 # 6424847 –