Al tratar de idear mi propio algoritmo de clasificación, estoy buscando el punto de referencia óptimo con el que pueda compararlo. Para una ordenación no ordenada de los elementos A y una ordenación ordenada B , ¿cuál es una manera eficiente de calcular el número óptimo de transposiciones para llegar de A a B ?
Una transposición se define como cambiar la posición de 2 elementos en la lista, por ejemplo
1 2 4 3
tiene una transposición (transposición 4 y 3) para hacerlo
1 2 3 4
Algo como
1 7 2 5 9 6
requiere 4 transposiciones (7, 2), (7, 6), (6,5), (9, 7)
Actualización (7/9/11): la pregunta cambió para usar "transposición" en lugar de "intercambios" para referirse a intercambios no adyacentes.
Respuestas:
Si solo se trata de permutaciones de elementos, necesitará exactamente swaps, donde es el número de ciclos en la descomposición del ciclo disjunto de . Como esta distancia es bi-invariante, transformar en (o en , o viceversa) requiere tales movimientos.n n−c(π) c(π) π π σ A B n−c(σ−1∘π)
fuente
La distancia de intercambio también puede integrarse isométricamente en el espacio euclidiano. Para cada cadena s, construir una matriz de donde si se produce antes de y es cero en caso contrario. Entonces la distancia de Frobenius es la distancia de intercambio . (de las diapositivas de Graham Cormode ). No es tan elegante como la respuesta de Anthony, pero es bastante fácil de calcular.METRO( s ) METROyo j= 1 yo j ∥ M(s)−M(s′)∥2 d(s,s′)
Actualización: por favor vea los comentarios de Oleksandr
fuente