Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Measuring Performance of a java algorithm

How can i measure the performance of my java algorithm effectively ? is there any accurate way of doing it?

i read other questions of same kind but not satisfied. any help would be appreciated.

like image 613
chhaya vishwakarma Avatar asked Oct 17 '25 19:10

chhaya vishwakarma


2 Answers

long reference=System.nanoTime();
your_funct();
long finishm=System.nanoTime();

System.out.println( ( (double)(finishm-reference) )/1000000000.0);  //in seconds

Has a meaningful level of ~0.003 seconds in my machine. I mean, you measure in nano-seconds but smallest step is around 3000000 nanoseconds in my machine.

like image 187
huseyin tugrul buyukisik Avatar answered Oct 20 '25 09:10

huseyin tugrul buyukisik


You ask for performance which indicates some sort of timing. But then what would you compare against?

A general way of measuring an algorithm is using Big O, which takes a simplified mathematical approach.

To explain this at a very basic level a simple linear search of a list of integers has a linear (n) worst case big o. Eg: for(int i = 0; i < sizeofarray; ++i) if(array[i] == to_find) return i;

At the worst case this would take i iterations (often number is referred to as n in big o) - so we call it n or linear complexity algorithm.

Something like a bubblesort algorithm is a loop within a loop so we have n * n complexity = n^2 or quadratic complexity.

Comparing like with like, if we just consider sorting, quicksort is more efficient than quadratic complexity (it is n log n complexity) so you can consider quicksort being 'better' than bubblesort.

So when evaluating your algorithm think about it in terms of n. Is there a loop? how many? The fewer the better. No loops even better - constant big o.

like image 31
Angus Comber Avatar answered Oct 20 '25 08:10

Angus Comber



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!