PDA

View Full Version : [C++]: misuare prestazioni algoritmi


robs05
29-12-2008, 08:49
Salve devo fare dei test sperimentali su un algoritmo e misuare i tempi al variare dei paramtri solo che utilizzando:


start = clock();
//---> Algoritmo da misurare
end = clock();
tempo=((double)(end-start))/CLOCKS_PER_SEC;
cout << "\n...tempo di ricerca: " << tempo << endl << endl;


è talmente veloce che mi da sempre 0.

c'è qualche metodo che posso misuare anche i tempi del tipo 0.004?

wizard1993
29-12-2008, 10:03
Salve devo fare dei test sperimentali su un algoritmo e misuare i tempi al variare dei paramtri solo che utilizzando:


start = clock();
//---> Algoritmo da misurare
end = clock();
tempo=((double)(end-start))/CLOCKS_PER_SEC;
cout << "\n...tempo di ricerca: " << tempo << endl << endl;


è talmente veloce che mi da sempre 0.

c'è qualche metodo che posso misuare anche i tempi del tipo 0.004?

il cast è errato, prova così
tempo=(double)(end-start)/CLOCKS_PER_SEC;

robs05
29-12-2008, 10:18
no il risultato non è cambiato.

In effetti sto misurando le prestazioni di un dizionario che ho implementato con il metodo hash table ad indirizzamento aperto, quando carico la lista di 300000 termini essendo i tempi maggiori di 1 secondo il tempo lo misira correttamente, ma le operazioni di ricerca sono talmente veloci che mi da sempre tempo = 0. io dovrei verificare i tempi di search hit e search miss cambiando il fattore di carico della tabella.

cionci
29-12-2008, 10:57
il cast è errato, prova così
Non mi sembra errato, c'è solo una parentesi in più ;)

Prova un po' a stampare end e start (sono interi), mi sembra strano che sia così veloce.

robs05
29-12-2008, 11:14
i tempi start ed end sono uguali sia per un search hit che un search miss sulla stessa parola inserita...

inserito elicottero

parola trovata
start : 17500 end: 17500

inserito elicotero

parola non trovata
start : 88609 end: 88606

questo con un fattore di carico alpha 1/2.


provando con un fattore 1 riesco a vedere la differenza soltanto in una serach miss di 0.002 ma la serach hit è sempre 0.

quindi il calcolo del tempo lo fa bene ma io vorrei annotare sui test sperimentali che sto facendo anche oscillazioni minime prossime allo zero..

cionci
29-12-2008, 11:16
Eh ci credo, lo fai su una sola operazione, è normale che siano uguali, devi farlo su un numero molto grande di operazioni, poi puoi fare la media.

robs05
29-12-2008, 11:22
quindi quando carico i termini dal file di testo ci mette all'incirca 3.5 secondi e qui fa 290000 inserimenti....quindi i test li posso fare al momento del caricamento. giusto?

io invece volevo misurarlo su una singola operazione... e questa cosa non è possibile.

cionci
29-12-2008, 11:27
Attenzione che il caricamento è anche vincolato dalla lettura dei valori dal file. Dovresti prima mettere tutto il file in memoria, fai partire il timer e dopo li carichi.
io invece volevo misurarlo su una singola operazione... e questa cosa non è possibile.
E' possibile, ma devi fare tante ricerche e poi fare la media. Con i valori del file caricati in memoria puoi fare tutte le ricerche che vuoi anche in modo casuale.