Its been a while, since I have blogged. To start with I am posting a basics of asymptotic analysis of algorithm, which we study at the start of the course.
Now we are going to be less precise and worry only about approximate answers for large inputs.
The
Definition: Let f(n) and g(n) be real-valued
functions of a single non-negative integer argument.
We write f(n) is O(g(n)) if there is a positive real
number c and a positive integer n0
such that f(n)≤cg(n) for all n≥n0.
What does this mean?
For large inputs (n≤n0), f is not much bigger than g (f(n)≤cg(n)).
Examples to do on the board
Theorem (arithmetic): Let d(n), e(n), f(n), and g(n) be nonnegative real-valued functions of a nonnegative integer argument and assume d(n) is O(f(n)) and e(n) is O(g(n)). Then
Theorem (special functions): (Only n varies)
Definitions: (Common names)
1.2.2
Definition: Let f(n) and g(n) be real valued functions of an integer value. Then f(n) is Ω(g(n)) if g(n) is O(f(n)).
Remarks:
Remarks We pronounce f(n) is Θ(g(n)) as "f(n) is big-Theta of g(n)"
Examples to do on the board.
If you remember limits from calculus, what we want is that f(n)/g(n)→0 as n→∞. However, the definition we give does not use limits (it essentially has the definition of a limit built in).
Definition: Let f(n) and g(n) be real valued functions of an integer variable. We say f(n) is o(g(n)) if for any c>0, there is an n0 such that f(n)≤g(n) for all n>n0. This is pronounced as "f(n) is little-oh of g(n)".
Definition: Let f(n) and g(n) be real valued functions of an integer variable. We say f(n) is ω(g(n) if g(n) is o(f(n)). This is pronounced as "f(n) is little-omega of g(n)".
Examples: log(n) is o(n) and x2 is ω(nlog(n)).
Source
https://cs.nyu.edu/courses/fall02/V22.0310-002/class-notes.html
Now we are going to be less precise and worry only about approximate answers for large inputs.
The Big-Oh
Notation
Definition: Let f(n) and g(n) be real-valued
functions of a single non-negative integer argument.
We write f(n) is O(g(n)) if there is a positive real
number c and a positive integer n0
such that f(n)≤cg(n) for all n≥n0.
What does this mean?
For large inputs (n≤n0), f is not much bigger than g (f(n)≤cg(n)).
Examples to do on the board
- 3n-6 is O(n). So, what f(n) = 3n-6 <= c*n. For example, c=4. Some less common ways of saying the same thing follow.
- 3x-6 is O(x).
- If f(y)=3y-6 and id(y)=y, then f(y) is O(id(y)).
- 3n-6 is O(2n)
- 9n4+12n2+1234 is O(n4).
- innerProduct is O(n)
- innerProductBetter is O(n)
- innerProductFixed is O(n)
- countPositives is O(n)
- n+log(n) is O(n).
- log(n)+5log(log(n)) is O(log(n)).
- 1234554321 is O(1).
- 3/n is O(1). True but not the best.
- 3/n is O(1/n). Much better.
- innerProduct is O(100n+log(n)+34.5). True, but awful.
Theorem (arithmetic): Let d(n), e(n), f(n), and g(n) be nonnegative real-valued functions of a nonnegative integer argument and assume d(n) is O(f(n)) and e(n) is O(g(n)). Then
- ad(n) is O(f(n)) for any nonnegative a
- d(n)+e(n) is O(f(n)+g(n))
- d(n)e(n) is O(f(n)g(n))
Theorem (special functions): (Only n varies)
- If f(n) is a polynomial of degree d, then f(n) is O(nd).
- nx is O(an) for any x>0 and a>1.
- log(nx) is O(log(n)) for any x>0
- (log(n))x is O(ny) for any x>0 and y>0.
Definitions: (Common names)
- If a function is O(log(n)) we call it logarithmic.
- If a function is O(n) we call it linear.
- If a function is O(n2) we call it quadratic.
- If a function is O(nk) with k≥1, we call it polynomial.
- If a function is O(an) with a>1, we call it exponential.
1.2.2 Relatives
of the Big-Oh
Big-Omega and Big-Theta
Recall that f(n) is O(g(n)) if for large n, f is not much bigger than g. That is g is some sort of upper bound on f. How about a definition for the case when g is (in the same sense) a lower bound for f?Definition: Let f(n) and g(n) be real valued functions of an integer value. Then f(n) is Ω(g(n)) if g(n) is O(f(n)).
Remarks:
- We pronounce f(n) is Ω(g(n)) as "f(n) is big-Omega of g(n)".
- What the last definition says is that we say f(n) is not much smaller than g(n) if g(n) is not much bigger than f(n), which sounds reasonable to me.
- What if f(n) and g(n) are about equal, i.e., neither is much bigger than the other?
Remarks We pronounce f(n) is Θ(g(n)) as "f(n) is big-Theta of g(n)"
Examples to do on the board.
- 2x2+3x is θ(x2).
- 2x3+3x is not θ(x2).
- 2x3+3x is Ω(x2).
- innerProductRecutsive is Θ(n).
- binarySearch is Θ(log(n)). Unofficial for now.
- If f(n) is Θ(g(n)), the f(n) is &Omega(g(n)).
- If f(n) is Θ(g(n)), then f(n) is O(g(n)).
Little-Oh and Little-Omega
Recall that big-Oh captures the idea that for large n, f(n) is not much bigger than g(n). Now we want to capture the idea that, for large n, f(n) is tiny compared to g(n).If you remember limits from calculus, what we want is that f(n)/g(n)→0 as n→∞. However, the definition we give does not use limits (it essentially has the definition of a limit built in).
Definition: Let f(n) and g(n) be real valued functions of an integer variable. We say f(n) is o(g(n)) if for any c>0, there is an n0 such that f(n)≤g(n) for all n>n0. This is pronounced as "f(n) is little-oh of g(n)".
Definition: Let f(n) and g(n) be real valued functions of an integer variable. We say f(n) is ω(g(n) if g(n) is o(f(n)). This is pronounced as "f(n) is little-omega of g(n)".
Examples: log(n) is o(n) and x2 is ω(nlog(n)).
Properties of Notations
Notations
|
Reflexive
|
Transitive
|
Symmetric
|
Transpose Symmetric
|
O
|
Yes
|
Yes
|
No
|
No
|
Ω
|
Yes
|
Yes
|
No
|
Yes
Yes i.e. f(n) = O(g(n)), iff
g(n) = Ω(f(n))
|
Θ
|
Yes
i.e.f(n) = Θ (f(n)) |
Yes
f(n)=Θ(g(n)) and
g(n)=Θ(h(n))
implies f(n) = Θ(h(n)) |
Yes
|
No
|
o
|
No
|
Yes
|
No
|
No
|
ω
|
No
|
Yes
|
No
|
No
|
Source
https://cs.nyu.edu/courses/fall02/V22.0310-002/class-notes.html
0 comments:
Post a Comment