Salve a tutti!
Mi è stato assegnato un progetto di algoritmi e strutture dati,
in cui si richiede di implementare un motore di ricerca semplificato:
ho una collezione di file di testo e, una volta acquisite le parole (non case sensitive e solo alfanumeriche), devo organizzarle in modo da poter fare delle ricerche.
Si richiede di poter fare:
una ricerca di una parola, che restituisce l'elenco non ordinato dei file in cui compare tale parola.
una ricerca di una parola, che restituisce l'elenco ordinato (si contano le occorrenze della parola).
una ricerca di più parole (non frasi, quindi sarebbe una ricerca multipla di parole) non ordinate e ordinate.
Naturalmente il programma sarà valutato sulla velocità di esecuzione delle ricerce (e non dell'acquisizione) e, magari, anche dello spazio utilizzato.
Volevo soltanto un consiglio: cioè se utilizzare una tabella hash (complessità quasi costante, se non ci sono troppe collisioni) o albero binario (complessità logaritmica).
Io avevo pensato una cosa del genere:
Acquisisco le parole e mi creo un lista di oggetti: ogni oggetto di tale lista ha un vettore per il numero dei file, e ogni cella tiene tracce del numero di occorrenze di tale parola e del file preso in considerazione.
Guardo la lunghezza della lista e mi creo una tabella hash di oggetti come la lista del 20% più grande.
Eseguo la funzione hash sulle parole della lista e le inserisco in tabella la parola e nel vettore le altre informazioni su occorenze e file. Magari potrei ordinarle con dei puntatori così da risolvere la ricerca ordinata di singola parola.
Per la ricerca di più parole ordinate, si devono sommare le varie occorrenze e poi eseguire un algoritmo di ordinamento (tipo quicksort).
Oppure con gli alberi di binari, più o meno la stessa cosa.
Cosa ne pensate??? Help help help