qualcuno mi saprebbe dire con esattezza l'implementazione della funzione hash in c? grazie
ai fini dell'esame di linguaggi non è importante la qualità della funzione hash, è sufficiente che svolga il lavoro di restituire un numero compreso in un determinato intervallo a fronte di una stringa in argomento. Per tenere ad esempio il valore di ritorno x nell'intervallo [0,n] devi fare una semplice x=x%n; mentre la conversione della stringa è abbastanza arbitraria, a me piace applicare l'algoritmo di horner opportunamente modificato:
int hash(char *chiave)
{
int indice=0, base=128;
for(;*chiave!='\0';chiave++)
indice=(base*indice+*chiave)%DIM_TABELLA;
return indice;
}
Grazie, mi sa che manca qualcosa dopo il for i=0 vero?
int hash(char *chiave) { int indice=0, base=128; for(i=0 ;*chiave!='\0';chiave++) indice=(base*indice+*chiave)%DIM_TABELLA; return indice;
non manca nulla, non ho bisogno di contare da 0 a n perchè il ciclo si ferma quando il vettore finisce. Prova a esercitarti sui cicli di scansioni di stringhe (o vettori di char) vedrai che ti renderai conto del perchè si usa quella forma sul for.