Esprimere una permutazione arbitraria come una sequenza di operazioni (inserisci, sposta, elimina)


9

Supponiamo che io abbia due stringhe. Li chiamano e B . Nessuna stringa ha caratteri ripetuti.AB

Come posso trovare la sequenza più breve di operazione di inserimento, spostamento ed eliminazione che trasforma in , dove:AB

  • insert(char, offset)inserisce charil dato offsetnella stringa
  • move(from_offset, to_offset)sposta il personaggio attualmente in offset from_offsetin una nuova posizione in modo che abbia offsetto_offset
  • delete(offset) elimina il personaggio in offset

Applicazione di esempio: esegui una query nel database e mostri i risultati sul tuo sito Web. Successivamente, rieseguire la query del database e scoprire che i risultati sono cambiati. Si desidera modificare ciò che è nella pagina in modo che corrisponda a ciò che è attualmente nel database utilizzando il numero minimo di operazioni DOM. Esistono due motivi per cui si desidera la sequenza di operazioni più breve. Innanzitutto, l'efficienza. Quando cambiano solo pochi record, si desidera assicurarsi di eseguire le operazioni DOM anziché , poiché sono costose. Secondo, correttezza. Se un elemento si sposta da una posizione all'altra, si desidera spostare i nodi DOM associati in un'unica operazione, senza distruggerli e ricrearli. Altrimenti perderai lo stato attivo, il contenuto degli elementi e così via.O(1)O(n)<input>

Risposte:


10

Suggerisco di dare un'occhiata all'algoritmo di modifica della distanza . Invece di calcolare solo la distanza, ti consigliamo di registrare il percorso del peso minimo attraverso l'array e restituirlo.


5
Infatti, poiché non ci sono ripetizioni, questo è un problema leggermente più semplice chiamato problema della distanza di Ulam. Sebbene sia possibile utilizzare l'algoritmo di modifica della distanza, esistono anche metodi più veloci mirati a questa distanza: mit.edu/~andoni/papers/ulamSublinear.pdf
Suresh

1
La modifica della distanza di solito non copre le moveoperazioni, quindi potrebbe essere necessario variare durante l'interpretazione del punteggio.
Raffaello
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.