## What is Asymptotic Notation?

Asymptotic notation describes algorithm efficiency & performance using the behaviour of time or space complexity for large instance characteristics. It describes the behaviour of time or space complexity for large instance characteristics. An asymptotic notation essentially describes the running time of an algorithm. This means that it shows how much time the algorithm takes to run with a given input, n.

There are three different notations, big O, big Theta (θ), and big Omega (Ω). Big O is used for the worst-case running time, big θ is used when the running time is the same for all cases, and big Ω is used for the best case running time.

The order of growth of the running time of an algorithm gives a simple character of the algorithm’s efficiency and also allows allow us to compare relative performance of alternative algorithm. we call it growth function as we ignore the very small constant. The asymptotic running time of an algorithm is defined in terms of functions.

## What are the three basic Asymptotic Notations?

The asymptotic notation of an algorithm is classified into 3 types:

- Big Oh notation(O): (Asymptotic Upper bound) The function f(n)=O(g(n)), if and only if there exist a positive constant C and K such that f(n) ≤ C * g(n) for all n, n≥K.
- Big Omega notation(Ω): (Asymptotic Lower bound) The function f(n)=Ω(g(n)), if and only if there exist a positive constant C and K such that f(n)≥C * g(n) for all n, n≥K.
- Big Theta notation(θ): (Asymptotic Tight bound) The function f(n)=θ(g(n)), if and only if there exist a positive constant C1, C2 and K such that C1*g(n) ≤ f(n) ≤ C2 * g(n) for all n, n≥K.

## What is Big O Omega Theta notation?

Sometimes, we want to say that an algorithm takes at least a certain amount of time, without providing an upper bound. We use big-Ω notation; that's the Greek letter "omega."

If a running time is Ω(f(n)), left parenthesis, f, left parenthesis, n, right parenthesis, right parenthesis, then for large enough n, the running time is at least k⋅f(n), for some constant k. Here's how to think of a running time that is Ω(f(n)):

We say that the running time is "big-Ω of f(n)." We use big-Ω notation for asymptotic lower bounds, since it bounds the growth of the running time from below for large enough input sizes.

Just as Θ(f(n))automatically implies O(f(n)), it also automatically implies Ω(f(n)). So we can say that the worst-case running time of binary search is Ω(log 2 n)

We can also make correct, but imprecise, statements using big-Ω notation. For example, if you really do have a million dollars in your pocket, you can truthfully say "I have an amount of money in my pocket, and it's at least 10 dollars." That is correct, but certainly not very precise. Similarly, we can correctly but imprecisely say that the worst-case running time of binary search is Ω(1), because we know that it takes at least constant time.

Of course, typically, when we are talking about algorithms, we try to describe their running time as precisely as possible.

##

## What is asymptotic notation in data structure with example?

Asymptotic analysis of an algorithm refers to defining the mathematical boundation/framing of its run-time performance. Using asymptotic analysis, we can very well conclude the best case, average case, and worst case scenario of an algorithm.

Asymptotic analysis is input bound i.e., if there's no input to the algorithm, it is concluded to work in a constant time. Other than the "input" all other factors are considered constant.

Asymptotic analysis refers to computing the running time of any operation in mathematical units of computation. For example, the running time of one operation is computed as f(n) and may be for another operation it is computed as g(n2). This means the first operation running time will increase linearly with the increase in n and the running time of the second operation will increase exponentially when n increases. Similarly, the running time of both operations will be nearly the same if n is significantly small.

Usually, the time required by an algorithm falls under three types −

- Best Case − Minimum time required for program execution.
- Average Case − Average time required for program execution.
- Worst Case − Maximum time required for program execution.

## Which asymptotic notation is best?

Big-Omega, commonly written as Ω, is an Asymptotic Notation for the best case, or a floor growth rate for a given function. It provides us with an asymptotic lower bound for the growth rate of the runtime of an algorithm. f(n) is Ω(g(n)), if for some real constants c (c > 0) and n0 (n0 > 0), f(n) is >= c g(n) for every input size n (n > n0).

The asymptotic growth rates provided by big-O and big-omega notation may or may not be asymptotically tight. Thus we use small-o and small-omega notation to denote bounds that are not asymptotically tight.

Whereas, Big-O, commonly written as O, is an Asymptotic Notation for the worst case, or ceiling of growth for a given function. It provides us with an asymptotic upper bound for the growth rate of the runtime of an algorithm. Say f(n) is your algorithm runtime, and g(n) is an arbitrary time complexity you are trying to relate to your algorithm. f(n) is O(g(n)), if for some real constants c (c > 0) and n0, f(n) <= c g(n) for every input size n (n > n0).