Expresar una permutación arbitraria como una secuencia de operaciones (insertar, mover, eliminar)


9

Supongamos que tengo dos cuerdas. Llamarlos y . Ninguna cadena tiene caracteres repetidos.AB

¿Cómo puedo encontrar la secuencia más corta de operación de inserción, movimiento y eliminación que convierte en , donde:AB

  • insert(char, offset)inserta charen el dado offseten la cadena
  • move(from_offset, to_offset)mueve el personaje actualmente en desplazamiento from_offseta una nueva posición para que tenga desplazamientoto_offset
  • delete(offset) elimina el personaje en offset

Ejemplo de aplicación: realiza una consulta a la base de datos y muestra los resultados en su sitio web. Más tarde, vuelve a ejecutar la consulta de la base de datos y descubre que los resultados han cambiado. Desea cambiar lo que está en la página para que coincida con lo que está actualmente en la base de datos utilizando la cantidad mínima de operaciones DOM. Hay dos razones por las que desea la secuencia de operaciones más corta. Primero, la eficiencia. Cuando solo cambian unos pocos registros, desea asegurarse de que realiza operaciones lugar de DOM, ya que son caras. En segundo lugar, la corrección. Si un elemento se movió de una posición a otra, desea mover los nodos DOM asociados en una sola operación, sin destruirlos ni recrearlos. De lo contrario, perderá el estado de enfoque, el contenido de los elementos, etc.O(1)O(n)<input>

Respuestas:


10

Sugiero echar un vistazo al algoritmo de distancia de edición . En lugar de simplemente calcular la distancia, querrá registrar su ruta de peso mínimo a través de la matriz y devolverla.


55
De hecho, dado que no hay repeticiones, este es un problema un poco más simple llamado problema de distancia de Ulam. Si bien puede usar el algoritmo de edición de distancia, también hay métodos más rápidos dirigidos a esta distancia: mit.edu/~andoni/papers/ulamSublinear.pdf
Suresh

1
La distancia de edición generalmente no cubre las moveoperaciones, por lo que es posible que tenga que variar al interpretar la partitura.
Raphael
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.