Il meglio che puoi fare è ridurre il numero di confronti con il numero di lettere nel dizionario.
cercato: a, e, o, g, z, k, l, j, w, n
-
crea l'indice dell'alfabeto dove le chiavi ricercate hanno valore 1, il resto: 0.
index={a:1, b:0, c:0, d:0, e:1, f:0, g:1...}
-
Iterate su ogni parola del dizionario. Aggiungi il valore dell'indice alla somma di quella parola. Ricorda la posizione della parola e il valore se è maggiore del migliore.
max=0;
max_index=0;
foreach(dictionary as position=>word)
{
sum=0;
foreach(word as letter)
{
sum += index[letter];
}
if(sum > max)
{
max = sum;
max_index = position;
}
}
max_index punta alla parola con il massimo delle lettere.
Alcune ottimizzazioni possono saltare parole più brevi del massimo corrente o iniziare con un dizionario ordinato per lunghezza della parola e fermarsi una volta che la lunghezza della parola scende al massimo attualmente trovato.
Ciò presuppone che le lettere della lista possano ripetere un numero qualsiasi di volte. Se non lo sono, fai in modo che l'indice contenga il numero di un determinato tipo di lettere, incrementa la somma di 1 per ogni valore di indice diverso da zero e decrementa l'indice. (resetta l'indice su ogni riga.)
In questo momento le ottimizzazioni potrebbero essere, in aggiunta alle precedenti: interrompi la verifica della parola se rimangono meno delle lettere di massima somma, interrompi l'operazione se viene trovata la parola con tutte le lettere.