I'll be taking points from Edison here as I visualize Big-O time complexity with flowcharts.
The way I visually understand time complexity is by looking at the iterator,
i*2 for example , and looking at how many loops the function has.
Linear time and logarithmic time look similar but the output is different because of the conditions of the loop.
exampleLogarithmic(100) will return
1, 2, 4, 8, 16, 32, 64, whereas
exampleLinear(100) simply loops through all positive integers under 100.
This isn't the only way to understand time complexity, but it is really helpful to literally see the function grow longer as time complexity increases. Sometimes code written in black and white
<pre> blocks doesn't get the point across to visual learners.
Now let's have a quiz. What is the time complexity of this function?
I said that the number of loops denoted the exponent n is raised to. So why is does this have linear time complexity and not quadratic?
This would have quadratic time complexity if it showed a
for loop inside of another
for loop. However, one
for loop that runs after another
for loop does not have quadratic but rather linear time complexity.
Now, for your last question - a question that questions all the other questions - what is this function's time complexity?
I hope you're looking at the conditions of the for loop as well as the sheer number of loops. This has quadratic time complexity because of the loop condition
I generated the images in this post with my app, whose development process I described in another post: