Ho un problema con le word ladder. Il problema è: date due parole e un file di dizionario, trova la scala di parole più breve tra le due parole. Quindi se hai dato le parole cat e pot:
cat -> cot -> pot
Questo è solo un esempio facile. Hai un'idea.
Il problema è il vincolo temporale, Il problema richiede l'utilizzo di un grafico, che sarà veramente buono da usare poiché la seconda parte del problema riguarda la ricerca della scala con il minor peso.
Se pre-generi il grafico (generi il grafico completo all'esecuzione del programma) ci vorrà molto tempo. Dato che l'algoritmo che ho trovato confrontava ogni parola con tutte le altre parole del dizionario per trovare i nodi adiacenti. Questo arriva a O (n ^ 2) confronti, oltre a confrontare lettere di stesse parole di dimensioni. Che finisce per essere molto.
Ho eseguito un test con un elenco di parole da 1k e 3 lettere e ci sono voluti 2,6 secondi per generare il grafico. Ciò significa che con una lista di 200k ci vorranno 26 ore per generare il grafico.
Dopo averlo scoperto ho pensato di generare un grafico che inizia solo dalla parola di partenza e poi trova tutti i nodi adiacenti (parole che sono solo una lettera diversa) e quindi tutti i nodi adiacenti per i nodi adiacenti precedenti fino alla parola finale è stato trovato, o se non è stato trovato, non ci sarebbe alcun percorso.
Il linguaggio di programmazione è C ++. C'è un algoritmo più efficiente che potrei usare per questo?