 # What is BIG O notation?

Big O notation is a mathematical notation used to describe the complexity of an algorithm. It gives a rough estimate of how long an algorithm will take to run as the size of the input data increases.

There are several types of Big O notation, each with a different meaning. The most common ones are:

• O(1) means that the algorithm has a constant running time, regardless of the input data size.
• O(log n) means that the algorithm’s running time increases logarithmically with the size of the input data.
• O(n), which means that the algorithm’s running time increases linearly with the size of the input data.
• O(n log n), which means that the algorithm’s running time increases in a log-linear fashion with the size of the input data.
• O(n^2) means that the algorithm’s running time increases in a quadratic fashion with the size of the input data.

It’s important to note that Big O notation is an estimate, and it only gives a rough idea of the running time of an algorithm. It doesn’t consider factors such as the specific hardware and software used or the input data’s specifics.

One of the main benefits of using Big O notation is that it allows us to compare the complexity of different algorithms and choose the most efficient one for a given problem. For example, if we have two algorithms that both solve the same problem, but one has a running time of O(n^2), and the other has a running time of O(n log n), we can conclude that the second algorithm is more efficient because it has a lower complexity.

In conclusion, Big O notation is a valuable tool for analyzing the complexity of algorithms and comparing the efficiency of different approaches to solving a problem. It’s an important concept to understand for anyone working in computer science or a related field. It can be a helpful tool for making informed decisions about which algorithms to use in a given situation.

``````
import UIKit
import Foundation

func bigONotation() {

//O(4) ie, running time(4) linearly dependent on the size

for i in 0...3 {
print(i)
}

// O(n^2)
// ie, 4^2 = 16 times
for i in 0...3 {
for j in 0...3 {
print (i,j)
}
}

// O(n^m)
// ie, 4^4 =256 times
for i in 0...3{
for j in 0...3{
for k in 0...3{
for l in 0...3{
print(i, j, k, l)
}
}
}
}

}

bigONotation()
``````