Ho bisogno di una struttura di dati che rappresenta un insieme di sequenze (tutti della stessa, nota, lunghezza) con la seguente operazione non standard:Trovare tutte le coppie di sequenze che differiscono esattamente una posizione
cerca due sequenze nel set che differiscono esattamente da un indice. (O stabilire che tale coppia esiste.)
Se N
è la lunghezza delle sequenze e M
il numero di sequenze, v'è un ovvio O(N*M*M)
algoritmo. Mi chiedo se esiste un modo standard per risolverlo in modo più efficiente. Sono disposto ad applicare la pre-elaborazione, se necessario.
Punti bonus se invece di restituire una coppia, l'algoritmo restituisce tutte le sequenze che si differenziano nello stesso punto.
alternativa, sono interessati anche a una soluzione in cui posso controllare efficacemente se una sequenza particolare differisce a un indice con qualsiasi sequenza nel set. Se aiuta, possiamo supporre che nel set, nessuna delle due sequenze abbia quella proprietà.
Modifica: è possibile assumere N
per essere ragionevolmente piccolo. Con questo, intendo miglioramenti come O(log(N)*M*M)
non sono immediatamente utili per il mio caso d'uso.
Possiamo assumere le sequenze contengono numeri interi? – IVlad
@IVlad sì, se aiuta. Nel mio caso, mi capita di avere una funzione di hash perfetta a mia disposizione (per gli elementi, non per sequenze) .. – Philippe