Introduction to Algorithm Analysis - Home
Download
Report
Transcript Introduction to Algorithm Analysis - Home
Asymptotic Behavior
Algorithm : Design & Analysis
[2]
In the last class…
Goal of the Course
Mathematical Background
Probability
Summations and Series
Monotonic and Convex Functions
Average and Worst-Case Analysis
Lower Bounds and the Complexity of
Problems
Asymptotic Behavior
Asymptotic growth rate
The Sets , and
Complexity Class
An Example: Searching an Ordered Array
Improved Sequential Search
Binary Search
Binary Search Is Optimal
Fundamentals of Cost
Input
Input size:
Number of items (sorting)
Total number of bits (integer multiplying)
Number of vertices+number of edges (graph)
Structure of input
Running time
Number of primitive operations executed
Actual cost of each operation
How to Compare Two Algorithm?
Simplifying the analysis
assumption that the total number of steps is roughly
proportional to the number of basic operations
counted (a constant coefficient)
only the leading term in the formula is considered
constant coefficient is ignored
Asymptotic growth rate
large n vs. smaller n
Relative Growth Rate
Ω(g):functions that grow at
least as fast as g
g
Θ(g):functions that grow at
the same rate as g
Ο(g):functions that grow no
faster as g
The Set “Big Oh”
Definition
A function fΟ(g) if limn→[f(n)/g(n)]=c<
Giving g:N→R+, then Ο(g) is the set of f:N→R+, such
that for some cR+ and some n0N, f(n)cg(n) for all
nn0.
Note: c may be zero. In that case, f(g), “little Oh”
Example: let f(n)=n2, g(n)=nlgn, then:
fΟ(g), since limn→[f(n)/g(n)]= limn→[n2/nlgn]=
limn→[n/lgn]= limn→[1/(1/nln2)]=
gΟ(f), since limn→[g(n)/f(n)]=0
The Sets and
Definition
A function f(g) if limn→[f(n)/g(n)]>0
Note: the limit may be infinity
Definition
Giving g:N→R+, then (g) is the set of f:N→R+, such
that for some cR+ and some n0N, f(n)cg(n) for all
nn0.
Giving g:N→R+, then (g) = Ο(g) (g)
A function fΟ(g) if limn→[f(n)/g(n)]=c,0<c<
How Functions Grow
Algorithm
Time function(ms)
1
2
3
4
33n
46n lg n
13n2
3.4n3
Input size(n)
2n
Solution time
10
0.00033 sec.
0.0015
sec.
0.0013 sec.
0.0034 sec.
0.001 sec.
100
0.0033 sec.
0.03 sec.
0.13 sec.
3.4 sec.
41016 yr.
1,000
0.033 sec.
0.45 sec.
13 sec.
0.94 hr.
10,000
0.33 sec.
6.1 sec.
22 min.
39 days
100,000
3.3 sec.
1.3 min.
1.5 days
108 yr.
Time allowed
Maximum solvable input size (approx.)
1 second
30,000
2,000
280
67
20
1 minute
1,800,000
82,000
2,200
260
26
Increasing Computer Speed
Number of steps
performed
on input of size n
f(n)
Maximum feasible
input size
s
Maximum feasible
input size
in t times as much time
snew
lg n
s1
s1 t
n
s2
t s2
n2
s3
t s3
n3
s4
s4+lg t
Sorting a Array of 1 Million Numbers
Using merge sort,
taking time 50nlogn:
100 seconds!
Computer B
10 Mips
Computer A
1000 Mips
Using insertion sort, taking time 2n2:
2000 seconds!
Properties of O, and
Transitive property:
Symmetric properties
If fO(g) and gO(h), then fO(h)
fO(g) if and only if g(f)
f(g) if and only if g(f)
Order of sum function
O(f+g)=O(max(f,g))
Complexity Class
Let S be a set of f:NR* under consideration,
define the relation ~ on S as following: f~g iff.
f(g)
then, ~ is an equivalence.
Each set (g) is an equivalence class, called
complexity class.
We usually use the simplest element as possible
as the representative, so, (n), (n2), etc.
Comparison of Often Used Orders
The log function grows more slowly than
any positive power of n
lgn o(n) for any >0
The power of n grows more slowly than
any exponential function with base greater
than 1
nk o(cn) for any c>1
(The commonly seen base is 2)
Order of Common Sums
n
d 1
d
n
i
i 1
b
k is the largest term in the sum
k
i
r
)
r
(
r
i a
Area=nf(n)
f(n)
n
log(i) (n log n)
f(rn)
i 1
n
d 1
d
log(n))
n
(
)
i
log(
i
i 1
rn
n
(0<r<1)
Area=(1-r)nf(rn)
Manipulation of Big-O
n p O(n q ) if p q
O( f (n)) O( g (n)) O(| f (n) | | g (n) |)
f (n) O( f (n))
c O( f (n)) O( f (n)) if c is constant
O(O( f (n))) O( f (n))
O( f (n))O( g (n)) O( f (n) g (n)) f (n)O( g (n))
ln(1 O( f (n))) O( f (n)) if lim f (n) 0
n
eO ( f ( n )) 1 O( f (n)) if f (n) O(1)
(1 O( f (n)))O ( g ( n )) 1 O( f (n) g (n)) if lim f (n) 0 and f (n) g (n) O(1)
n
Roulette Wheel
There are N
slots , some
winning and
some losing
N 1
n | n
3
3
.
.
.
.
Winner:
2
i
n
.
.
If there are W
winners with
bonus a, and L
losers with
penalty b, then the
average winning
will be:
aW bL
N
A Special Case with N=1000
Let winning bonus be 5, and losing penalty be 1
5W L 5W (1000 W ) 6W 1000
average winnings
1000
1000
1000
1000
1000
W n is a winner
n 1
k
3
n 1
n | n k n k | n1 n 1000
3
3
k ,n
n ( k 1) 3 n km 1 n 1000
k ,m,n
1 m k
/ k 1 k 10
1 k 3 km ( k 1) 3 1 k 10
k ,m
2
, ( k 1) 3
k ,m
9
1 ( k 1) / k k
k 1
3
1 (3k 4) 172
9
2
k 1
Solution Generalized
Let the largest slot number be N, and K
K 1
N
3
, then:
W (3k 4) K 3 Km N
k 1
m
(7 3K 1)(K 1)
2 N
m K ,
2
K
m
N
3 2 5
2
K K 4
K 1
2
2
K
5
N 1
K2 K 3
2
K 2
Reasonable Approximation
N
3
Now, we have: W=N/K+K2/2+5K/2-3, where K=
1
3
We replaceK by N (1)
1
3
K N (1 ( N
2
3
K 2 N (1 ( N
1
3
)
1
3
2
3
))2 N (1 ( N
1
3
2
3
)) N ( N )
1
N
1
3
3
N
(
1
(
N
))
(1) N 3 ( N 3 )
K
So,
1
2
3
1
1
3
2
2
1
1
3
1
1
1
W N ( N ) ( N 3 ( N 3 )) ( N 3 ) (1)
2
2
1
2
3 3
3
N ( N 3 ) N 3
2
2
If Only N Large Enough…
2
N
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
1,000,000,000
3 3
N
2
150.0
696.2
3231.7
15000.0
69623.8
323165.2
1500000.0
W
172
746
3343
15247
70158
324322
1502497
%error
12.791
6.670
3.331
1.620
0.761
0.357
0.166
Searching an Ordered Array
Problem:
Input:
an array E containing n entries of numeric type sorted in nondecreasing order
a value K
Output:
index for which K=E[index], if K is in E, or, -1, if K is not in E
Algorithm:
Int seqSearch(int[] E, int n, int K)
1. Int ans, index;
2. Ans=-1; // Assume failure
3. For (index=0; index<n; index++)
4.
If (K==E[index]) ans=index;//success!
5.
break;
6. return ans
Searching a Sequence (cont.)
For a given K, there are two possibilities
K in E (say, with probability q), then K may be any
one of E[i] (say, with equal probability, that is 1/n)
K not in E (with probability 1-q), then K may be
located in any one of gap(i) (say, with equal
probability, that is 1/(n+1))
gap(0)
E[1] E[2]
gap(i-1)
gap(i-1)
E[i-1] E[i] E[I+1]
E[n]
Improved Sequential Search
Since E is sorted, when an entry larger than K is met, no
more comparison is needed
Worst-case complexity: n, unchanged
Average complexity
Roughly n/2
A( n) qA (n) (1 q ) A ( n)
succ
fail
n 1
n 1
1
Asucc ( n)
(i 1)
n
2
i 0
n 1
n
n
1
1
A fail ( n)
(i 1)
n
n 1
2 n 1
n 1
i 0
A( n)
n n
n
q
2 n 1
n 1
Note: A(n)(n)
Divide and Conquer
If we compare K to every jth entry, we can locate
the small section of E that may contain K.
To locate a section, roughly n/j steps at most
To search in a section, j steps at most
So, the worst-case complexity: (n/j)+j, with j selected
properly, (n/j)+j(n)
However, we can use the same strategy in the
small sections recursively
Choose j = n
Binary Search
int binarySearch(int[] E, int first, int last, int K)
if (last<first)
index=-1;
else
int mid=(first+last)/2
if (K==E[mid])
index=mid;
else if (K<E[mid])
index=binarySearch(E, first, mid-1, K)
else if (K<E[mid])
index=binarySearch(E, mid+1, last, K)
return index;
Worst-case Complexity
of Binary Search
Observation: with each call of the
recursive procedure, only at most half
entries left for further consideration.
At most lg n calls can be made if we
want to keep the range of the section left
not less than 1.
So, the worst-case complexity of binary
search is lg n+1=lg(n+1)
Average Complexity
of Binary Search
Observation:
for most cases, the number of comparison is
or is very close to that of worst-case
particularly, if n=2k-1, all failure position need
exactly k comparisons
Assumption:
all success position are equally likely (1/n)
n=2k-1
Average Complexity
of Binary Search
Average complexity
Note: We count the sum of st, which is the
number of inputs for which the algorithm does t
comparisons, and if n=2k-1, st=2t-1
Aq ( n) qA1 ( n) (1 q ) A0 ( n)
1 k
(k 1) 2 k 1
st
t 1
A1 ( n) t t 2
n t 1
n
t 1 n
( k 1)(n 1) 1
log n
lg( n 1) 1 O
n
n
A0 lg( n 1)
k
Aq ( n) lg( n 1) q
Decision Tree
An algorithms A that can do no other operations on the array entries
except comparison can be modeled by a decision trees.
A decision tree for A and a given input of size n is a binary tree
whose nodes are labeled with numbers between 0 and n-1
Root: labeled with the index
4
first compared
7
1
If the label on a particular node
is i, then the left child is labeled
5
the index next compared if K<E[i], 0
2
the right child the index next
3
compared if K>E[i], and no branch
6
for the case of K=E[i].
8
9
Binary Search Is Optimal
If the number of comparison in the worst case is
p, then the longest path from root to a leaf is p-1,
so there are at most 2p-1 node in the tree.
There are at least n node in the tree.
(We can prove that For all i{0,1,…,n-1}, exist a
node with the label i.)
Conclusion: n 2p-1, that is plg(n+1)
Binary Search Is Optimal
For all i{0,1,…,n-1}, exist a node with the label i.
Proof:
if otherwise, suppose that i doesn’t appear in
the tree, make up two inputs E1 and E2, with
E1[i]=K, E2[i]=K’, K’>K, for any ji, (0jn-1),
E1[j]=E2[j]. (Remember that both array are
sorted). Since i doesn’t appear in the tree, for
both K and K’, the algorithm behave alike
exactly, and give the same outputs, of which at
least one is wrong, so A is not a right algorithm.
Home Assignment
pp.63 –
1.23
1.27
1.31
1.34
1.45