Algorithm Analysis. Algorithm An algorithm is a clearly specified set of instructions which, when...

Post on 29-Dec-2015

230 views 6 download

Tags:

Transcript of Algorithm Analysis. Algorithm An algorithm is a clearly specified set of instructions which, when...

Algorithm Analysis

Algorithm

An algorithm is a clearly specified set of instructions which, when followed, solves a problem. recipesdirections for putting together a bicycleprograms

Algorithm Analysis

The process by which we determine the amount of resources used by the algorithm

Resources usually measured timememory space

We will concentrate on run time of algorithms

Common functions encountered

Some commonly encountered functions are: ,linear ,quadratic ,cubic

The next slide shows the graphs of these functions

)log(NN2N

3N

N

Growth Rates

Growth rates

-20

0

20

40

60

80

100

120

0 20 40 60 80 100 120

N

Series1

Series2

Series3

Series4

Running Time T(N)Example 1

Problem: Given an array of N elements, find the smallest.

Solution:1. key = Integer.Mininum_Value

2. for( int i=0 ; i< inarray.length ; i++ )

3. if ( inarray[i] < key ) key = inarray[i];

Running Time T(N)Example 2

Suppose we wish to download a file 2 seconds for setting up the connectiondownloading proceeds at 2.8 K/sec

If the downloaded file is N kilobytes, the time to download is T(N) = N/2.8 + 280K file takes about 31 seconds160K file takes about 59 seconds

This is a linear algorithm

Functions in Increasing Order

Function Name

c

log N

log2 N

N

N log N

N2

N3

2N

Constant

Logarithmic

Log-squared

Linear

N log N

Quadratic

Cubic

Exponential

Measurement of T(N)

Place your timer before/after the algorithm Run the algorithm multiple times Take the average of the total time

1. time = System.currentTimeMillis();

2. for (int i = 0; i<num_iteration ; i++)

3. // Your algorithm comes here

4. newtime = System.currentTimeMillis();

5. output (newTime-time)/num_iteration

Big-O notation

We use big-O to specify growth rates of algorithms linear functions are specified as O(N)quadratic functions as O(N2)

Formal Definition of Big-O

Definition: T(N) is O(F(N)) if there are positive constants c and N0 such that T(N)cF(N) whenever N N0 .

Usually T(N) is a complicated function involving N.

We choose F(N) as simple as possible.

Examples of Big-O

Find equivalent Big-Oh functions for the following runtime T(N).

T1(N)=N2

T2(N)=20*N

T3(N)=N+1000*N2

T4(N)=N+60 N3 -1000*N2

T5(N)=N*log(N)+N2

T6(N)=50*N*log(N) + N

T7(N)=N + 60 N3 - N*log(N)

T8(N)= 20*N +100*N2

T9(N)=90*N2 + 60 N3

Examples of Big-O

Algorithm Analysis

A1: Minimum element in an arrayGiven an array of N elements, find the

smallest.

A2: Closest points in the planeGiven N points in the plane, find the pair of

points that are closest together.

A3: Collinear points in the planeGiven N points in the plane, determine if

any three are on the same line.

A1: Minimal Element in an Array

Algorithm Initialize min as the first element Scan thru the other N-1 elements, updating min as

appropriate

There is a fixed amount of work for each element of the array

The running time is O(N)

A2: Closest Point in the Plane

AlgorithmCalculate the distance between each pair of

points [there are N(N-1)/2 pairs of points] find the minimum of these distances

Finding the minimum of N(N-1)/2 distances by this algorithm is O(N2)

There is a O(N log N) algorithm to solve this problem, and one thought to be O(N).

A3: Collinear Points in the Plane

AlgorithmEnumerate all triples of the N points. There

are N(N-1)(N-2)/6 of these triples.check to see if the three points are on the

same lineThis is a O(N3) algorithmThere is a clever quadratic algorithm for

solving this problem

Maximum Contiguous Subsequence Sum Problem

Given (possibly negative) integers A1, A2,…, AN , find (and identify the subsequence corresponding to) the maximum value Ai + Ai+1 +…+ Ak .

The maximum contiguous subsequence sum is zero if all the integers are negative

Examples

With input of [-2, 11, -4, 13, -5, 2], then the maximum sum is 20 using items at positions 2 through 4.

With input of [ 1, -3, 4, -2, -1, 6], then the maximum sum is 7 using the last four items.

Obvious O(N3) Algorithm

maxSum = 0;for (i=0; i < N; i++)

for (j=i; j < N; j++){thisSum = 0;for (k=i;k <= j; k++)

thisSum += a[k];if (thisSum > maxSum){

maxSum = thisSum;seqStart = i;seqStop = j;

}}

return maxSum;

Improving the Algorithm

If we can eliminate one of the loops, we will be able to reduce this algorithm to a O(N2) algorithm.

Observe that Ai + Ai+1 +…+ Ak = (Ai + Ai+1 +…+ Ak-1 ) + Ak . The inner loop is used to calculate Ai + Ai+1 +…+ Ak-1 , then this result is thrown away and then Ai + Ai+1 +…+ Ak is calculated (duplicating work)

Improved O(N2) Algorithm

maxSum = 0;for (i=0; i < N; i++){

thisSum = 0;for (j=i; j < N; j++){

thisSum += a[j];if (thisSum > maxSum){

maxSum = thisSum;seqStart = i;seqStop = j;

}}

}return maxSum;

Observations

no maximum contiguous subsequence sum begins with a subsequence which has a negative sum

all subsequences which border on the maximum contiguous subsequence must have negative or zero sums

Improving again

Using these observations, any time the current subsequence sum (thisSum) becomes negative, we can begin a new subsequence sum at the next position since the subsequence we are searching for cannot begin with a subsequence with negative sum.

Linear Algorithm

maxSum = thisSum = 0;for (i=0, j=0; j < N; j++){

thisSum += a[j];if (thisSum > maxSum){

maxSum = thisSum;seqStart = i;seqStop = j;

}else if (thisSum < 0){

i = j+1;thisSum = 0;

}}return maxSum;

Big-O

Definition: T(N) is O(F(N)) if there are positive constants c and N0 such that T(N)cF(N) whenever N N0 .

This means, that for sufficiently large N, T(N) is bounded by some multiple of F(N).

This means that the growth rate of T is no worse than the growth rate of F.

Big- (omega)

Definition: T(N) is (F(N)) if there are positive constants c and N0 such that T(N) cF(N) whenever N N0 .

This means, that for sufficiently large N, T(N) is bounded below by some multiple of F(N).

This means that the growth rate of T is no better than the growth rate of F.

Big- (theta)

Definition: T(N) is (F(N)) if and only if T(N) is O(F(N)) and T(N) is (F(N)).

This means that the growth rate of T is equal to the growth rate of F.

Little-o

Definition: T(N) is o(F(N)) if and only if T(N) is O(F(N)) and T(N) is not (F(N)).

This means that the growth rate of T is strictly better than the growth rate of F

Summary

Mathematical Expression Relative Rates of Growth

T(N) = O(F(N)) Growth of T(N) growth of F(N)

T(N) = (F(N)) Growth of T(N) growth of F(N)

T(N) = (F(N)) Growth of T(N) = growth of F(N)

T(N) = o(F(N)) Growth of T(N) < growth of F(N)

The Logarithm

Definition: For any B, N > 0, logBN = K if and only if BK = N

In Computer Science, base 2 logarithms are used almost exclusively.

The use of the symbol log indicates log2 unless otherwise indicated

Use of logarithms

Bits in a binary numberThe number of bits needed to represent N

consecutive integers is log NRepeated Doubling

Starting with X=1, the number of times needed to double X to reach at least N is log N

Searching

Sequential Search the average number of comparisons made

to find an item in an unordered list of N items is N/2 = O(N)

An unsuccessful search requires testing every item in the list, so is also O(N)

Binary Search

If searching a sorted list of N items, we can do better

low = 1; high = N; while (low < high)

{mid = (low+high)/2;if (A[mid]< x)

low = mid +1;else high = mid;

} if (X == A[low])

return low; return -1;

Limitations of Big-O

In the following definition of O:

T(N) is O(F(N)) if there are positive constants c and N0 such that T(N)cF(N) whenever N N0 .

N0 can be a very large number.

The positive constants c can be a large number.

Example : Compare the running time two algorithms

Algorithm1 = 10000N

Algorithm2 = 2N log(N)

Other Issues of Algorithm Analysis

Memory accessDisk access Average-case v.s. worst-case running

time.Implementation Difficulties