Devo indicizzare in maniera efficiente dati da file di testo e inserirli in una struttura dati che mi permetta di avere il mionor costo computazionale possibile per inserimento e ricerca. Il file di testo contiene una parola in ogni riga e possono esserci parole uguali nello stesso file; come risultato della ricerca finale devo restituire la somma del numero delle volte che le parole oggetto di ricerca sono presenti nel file.
Leggendo la documentazione mi sembra di capire che una struttura che fa al caso mio è l'hashmap che mi permette di effettuare inserimento e ricerca in tempo costante (O(1) giusto? documentazione HashMap ). Fin qui tutto bene, credo.
Devo, ora, trovare una funzione che mi permetta di riconoscere univocamente le stringhe che ho ottenuto dal file e che per stringhe uguali mi fornisca lo stesso riusltato; per questo pensavo di convertire la stringa nel suo codice ASCII. Qui sorge il problema: il metodo getBytes("US-ASCII") (getBytes).
Se non ho capito male il metodo restituisce un array di byte nel quale ogni "casella" contiene il corrispettivo numero del carattere della stringa tradotto in ASCII. Io vorrei poter usare questo array byte[] come chiave per l'inserimento della stringa all'interno della mia HashMap però non so come utilizzarlo!
Lavorando così però (riporto solo le parti che mi danno problemi, ma se serve posso passare anche tutto il codice sorgente):
ho un problema: quando faccio la put nella tabella, "codice" riferisce ad una specifica zona di memoria e non vengono valutati i suoi dati! quindi due stringhe con gli stessi caratteri risulterebbero comunque con una chiave diversa.codice:HashMap() tabellHash= new HashMap(); byte[] codice; String word; word=scanSq.nextLine(); codice= word.getBytes("ASCII"); tabellHash.put(codice,word);
Come posso risolvere questo problema? Scorrermi tutte le caselle di codice per prenderne i dati aumenterebbe i miei costi computazionali al numero di caratteri presenti (e non solo a quello delle parole come ora invece ottengo)!
Ci sono metodi che mi permettono di ottenere i dati in maniera efficiente?
Conoscete funzioni di hash alternative che posso utilizzare o differenti approcci al problema?
Vi ringrazio, spero di essere stato chiaro! se volete chiarimenti chiedetemi pure. Rispondente anche solamente idee che magari lavorandoci sopra..