Reputation: 1879
I was wondering how can I estimate a total running time of a java program on specific machine before program ends? I need to know how much it will take so I can announce the progress by that.
FYI Main algorithm of my program takes O(n^3) time complexity. Suppose n= 100000, how much it takes to run this program on my machine? (dual intel xeon e2650)
Regards.
Upvotes: 1
Views: 115
Reputation: 71009
In theory 1GHz of computational power should result in about 1 billion simple operations. However finding the number of simple operations is not always easy. Even if you know the time complexity of a given algorithm, this is not enough - you also need to know the constant factor. In theory it is possible to have a linear algorithm that takes several seconds to compute something for input of size 10000
(and some algorithms like this exist - like the linear pre-compute time RMQ).
What you do know, however is that something of O(n^3)
will need to perform on the order of 100000^3
operations. So even if your constant is about 1/10^6
(which is highly unprobable), this computation will take a lot of time.
I believe @ArturMalinowski 's proposal is the right way to approach your problem. If you benchmark the performance of your algorithm for some sequence known aforehand e.g. {32,64,128,...}
or as he proposes {1,10,100,...}
. This way you will be able to determine the constant factor with relatively good precision.
Upvotes: 1