Sfondo:
Sto scrivendo un'applicazione per un piccolo dispositivo incorporato. C'è una lista statica di stringhe: attualmente circa 500 stringhe e la lunghezza della stringa è di 12 caratteri in media. L'elenco potrebbe aumentare in futuro. Quando l'applicazione si avvia, l'elenco di stringhe verrà analizzato una volta. Niente più aggiunte, cancellazioni alla lista. La ricerca () verrà chiamata un numero elevato di volte.
Devo trovare se una stringa di input è presente nell'elenco. Attualmente sto ordinando e memorizzando le stringhe in un array. Sto usando la ricerca binaria per trovare la stringa. Il caso peggiore è 0 (log n) e la complessità dello spazio è 0 (12 * n) (??).
Domanda:
C'è un approccio migliore? So che i tavoli hash sono più veloci. Ma sono preoccupato per la memoria extra. Posso creare una tabella hash di dimensioni n. Ma avrei bisogno di una funzione Perfect hash . Qualche suggerimento su come ottenere una tale funzione di hash? È solo una prova ed un errore? Qualsiasi altra struttura dati che potrebbe essere migliore?