I’ve been doing BigO recently, and I get the formula ok, but I’ve written a piece of code that takes and input and returns a time taken to complete a sort. So I have the input and time, how do I use this to classify what sort of BigO it is? I’ve made graphs and can see which sort they are but I can’t do it using the formula? I’m not strong on maths which I think is my problem here!
For instance I get:
Size Time Operations
200 2 163648
400 1 162240
800 15 2489456
1600 6 10247376
3200 19 40858160
6400 79 165383984
12800 318 656588080
25600 1274 2624318128
51200 5059 10476803408
102400 20333 41969291968
I know that this is O(n^2) by looking at the graph and comparing, but how do I prove it?
Yes, you can sample a thousand different input sizes, and then try to derive a Big-O value from that, but you shouldn’t – not only because it doesn’t actually prove anything, but because that isn’t the point.
The way to prove O(n^2) is to prove it on the code itself, not through experiments. The actual running time isn’t important, because Big-O notation doesn’t say anything about that – in simple terms, it only specifies the dominant term of whatever formula you would use to calculate the exact running time, in the sense of the number of operations executed for that function. Constants are thrown away, and so are smaller terms – the actual running time of a function might be 1000n^2+1000000n, but that’s still O(n^2).