Problema:ordinamento delle stringhe in modo che la distanza di Hamming è bassa tra le stringhe adiacenti
ho N (~ 100k-1m) Corde ciascun D (ad esempio, 2000) caratteri e con un basso alfabeto (ad esempio 3 caratteri possibili). Vorrei ordinare queste stringhe in modo tale che ci siano meno modifiche possibili tra stringhe adiacenti (ad es. La distanza di hamming è bassa). La soluzione non deve essere la migliore possibile ma più vicina e migliore.
Esempio
N=4
D=5
//initial strings
1. aaacb
2. bacba
3. acacb
4. cbcba
//sorted so that hamming distance between adjacent strings is low
1. aaacb
3. acacb (Hamming distance 1->3 = 1)
4. cbcba (Hamming distance 3->4 = 4)
2. bacba (Hamming distance 4->2 = 2)
Pensieri sul problema
Ho una brutta sensazione che questo è un problema non banale. Se consideriamo ogni stringa come un nodo e le distanze rispetto ad altre stringhe come un margine, allora stiamo esaminando un problema di commesso viaggiatore. Il gran numero di stringhe significa che il calcolo di tutte le distanze a due a due è potenzialmente irrealizzabile, penso che trasformare il problema in qualcosa di più come lo Canadian Traveller Problem.
Al momento la mia soluzione è stata quella di utilizzare un VP tree per trovare una soluzione di tipo vicino di golosi più vicino al problema
curr_string = a randomly chosen string from full set
while(tree not empty)
found_string = find nearest string in tree
tree.remove(found_string)
sorted_list.add(curr_string)
curr_string = found_string
ma i primi risultati sembrano essere poveri. Le stringhe di hashing in modo che quelle più simili siano più vicine potrebbero essere un'altra opzione, ma io so poco su quanto sia valida una soluzione che fornirà o quanto bene si ridurrà ai dati di queste dimensioni.