How to calculate big-theta
Can some one provide me a real time example for how to calculate big theta.
Is big theta some thing like average case, (min-max)/开发者_JS百科2?
I mean (minimum time - big O)/2
Please correct me if I am wrong, thanks
Big-theta notation represents the following rule:
For any two functions
f(n)
,g(n)
, iff(n)/g(n)
andg(n)/f(n)
are both bounded asn
grows to infinity, thenf = Θ(g)
andg = Θ(f)
. In that case,g
is both an upper bound and a lower bound on the growth off
.
Here's an example algorithm:
def find-minimum(List)
min = +∞
foreach value in List
min = value if min > value
return min
We wish to evaluate the cost function c(n)
where n
is the size of the input list. This algorithm will perform one comparison for every item in the list, so c(n) = n
.
c(n)/n = 1
which remains bounded as n
goes to infinity, so c(n)
grows no faster than n
. This is what is meant by big-O notation c(n) = O(n)
. Conversely, n/C(n) = 1
also remains bounded, so c(n)
grows no slower than n
. Since it grows neither slower nor faster, it must grow at the same speed. This is what is meant by theta notation c(n) = Θ(n)
.
Note that c(n)/n²
is also bounded, so c(n) = O(n²)
as well — big-O notation is merely an upper bound on the complexity, so any O(n)
function is also O(n²)
, O(n³)
...
However, since n²/c(n) = n
is not bounded, then c(n) ≠ Θ(n²)
. This is the interesting property of big-theta notation: it's both an upper bound and a lower bound on the complexity.
Big theta is a tight bound, for a function T(n)
: if: Omega(f(n))<=T(n)<=O(f(n))
, then Theta(f(n)) is the tight bound for T(n).
In other words Theta(f(n)) 'describes' a function T(n), if both O [big O] and Omega, 'describe' the same T, with the same f.
for example, a quicksort [with correct median choices], always takes at most O(nlogn), at at least Omega(nlogn), so quicksort [with good median choices] is Theta(nlogn)
EDIT:
added discussion in comments:
Searching an array is still Theta(n). the Theta function does not indicate worst/best case, but the behavior of the desired case. i.e, searching for an array, T(n)=number of ops for worst case. in here, obviously T(n)<=O(n)
, but also T(n)>=n/2
, because at worst case you need to iterate the whole array, so T(n)>=Omega(n)
and therefore Theta(n) is asymptotic bound.
From http://en.wikipedia.org/wiki/Big_O_notation#Related_asymptotic_notations, we learn that "Big O" denotes an upper bound, whereas "Big Theta" denotes an upper and lower bound, i.e. in the limit as n
goes to infinity:
f(n) = O(g(n)) --> |f(n)| < k.g(n)
f(n) = Theta(g(n)) --> k1.g(n) < f(n) < k2.g(n)
So you cannot infer Big Theta from Big O.
ig-Theta (Θ) notation provides an asymptotic upper and lower bound on the growth rate of an algorithm's running time. To calculate the big-Theta notation of a function, you need to find two non-negative functions, f(n) and g(n), such that:
There exist positive constants c1, c2 and n0 such that 0 <= c1 * g(n) <= f(n) <= c2 * g(n) for all n >= n0. f(n) and g(n) have the same asymptotic growth rate. The big-Theta notation for the function f(n) is then written as Θ(g(n)). The purpose of this notation is to provide a rough estimate of the running time, ignoring lower order terms and constant factors.
For example, consider the function f(n) = 2n^2 + 3n + 1. To calculate its big-Theta notation, we can choose g(n) = n^2. Then, we can find c1 and c2 such that 0 <= c1 * n^2 <= 2n^2 + 3n + 1 <= c2 * n^2 for all n >= n0. For example, c1 = 1/2 and c2 = 2. So, f(n) = Θ(n^2).
精彩评论