0% found this document useful (0 votes)
7 views18 pages

Algorithms Rosen

The document discusses the analysis of algorithms, focusing on comparing their efficiency in terms of running time and other factors. It illustrates the differences between linear search and binary search, highlighting that binary search is more efficient for larger datasets. The document also emphasizes the importance of asymptotic analysis and orders of growth in evaluating algorithm performance.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views18 pages

Algorithms Rosen

The document discusses the analysis of algorithms, focusing on comparing their efficiency in terms of running time and other factors. It illustrates the differences between linear search and binary search, highlighting that binary search is more efficient for larger datasets. The document also emphasizes the importance of asymptotic analysis and orders of growth in evaluating algorithm performance.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

Analysis of Algorithms &

Orders of Growth

1
Analysis of Algorithms
• An algorithm is a finite set of precise instructions
for performing a computation or for solving a
problem.
• What is the goal of analysis of algorithms?
– To compare algorithms mainly in terms of running time
but also in terms of other factors (e.g., memory
requirements, programmer's effort etc.)
• What do we mean by running time analysis?
– Determine how running time increases as the size of
the problem increases.

2
Example: Searching
• Problem of searching an ordered list.
– Given a list L of n elements that are sorted into
a definite order (e.g., numeric, alphabetical),
– And given a particular element x,
– Determine whether x appears in the list, and if
so, return its index (position) in the list.

3
Search alg. #1: Linear Search
procedure linear search
(x: integer, a1, a2, …, an: distinct integers)
i := 1
while (i  n  x  ai)
i := i + 1
if i  n then location := i
else location := 0
return location {index or 0 if not found}

4
Search alg. #2: Binary Search
• Basic idea: On each step, look at the middle
element of the remaining list to eliminate
half of it, and quickly zero in on the desired
element.

<x <x <x >x

5
Search alg. #2: Binary Search
procedure binary search
(x:integer, a1, a2, …, an: distinct integers)
i := 1 {left endpoint of search interval}
j := n {right endpoint of search interval}
while i<j begin {while interval has >1 item}
m := (i+j)/2 {midpoint}
if x>am then i := m+1 else j := m
end
if x = ai then location := i else location := 0
return location
6
Is Binary Search more efficient?
• Number of iterations:
– For a list of n elements, Binary Search can
execute at most log2 n times!!
– Linear Search, on the other hand, can execute up
to n times !!

Average Number of Iterations


Length Linear Search Binary Search
10 5.5 2.9
100 50.5 5.8
1,000 500.5 9.0
10,000 5000.5 12.0 7
Is Binary Search more efficient?
• Number of computations per iteration:
– Binary search does more computations than
Linear Search per iteration.
• Overall:
– If the number of components is small (say, less
than 20), then Linear Search is faster.
– If the number of components is large, then
Binary Search is faster.

8
How do we analyze algorithms?

• We need to define a number of objective measures.

(1) Compare execution times?


Not good: times are specific to a particular computer !!

(2) Count the number of statements executed?


Not good: number of statements vary with the
programming language as well as the style of the
individual programmer.

9
Example (# of statements)
Algorithm 1 Algorithm 2

arr[0] = 0; for(i=0; i<N; i++)


arr[1] = 0; arr[i] = 0;
arr[2] = 0;
...
arr[N-1] = 0;
10
How do we analyze algorithms?

(3) Express running time as a function of


the input size n (i.e., f(n)).
– To compare two algorithms with running times
f(n) and g(n), we need a rough measure of
how fast a function grows.
– Such an analysis is independent of machine
time, programming style, etc.

11
Computing running time
• Associate a "cost" with each statement and find the
"total cost“ by finding the total number of times
each statement is executed.
• Express running time in terms of the size of the
problem.
Algorithm 1 Algorithm 2
Cost Cost
arr[0] = 0; c1 for(i=0; i<N; i++) c2
arr[1] = 0; c1 arr[i] = 0; c1
arr[2] = 0; c1
...
arr[N-1] = 0; c1
----------- -------------
c1+c1+...+c1 = c1 x N (N+1) x c2 + N x c1 =
(c2 + c1) x N + c2
12
Computing running time (cont.)
Cost
sum = 0; c1
for(i=0; i<N; i++) c2
for(j=0; j<N; j++) c2
sum += arr[i][j]; c3
------------
c1 + c2 x (N+1) + c2 x N x (N+1) + c3 x N x N
13
Comparing Functions Using
Rate of Growth
• Consider the example of buying elephants and
goldfish:
Cost: cost_of_elephants + cost_of_goldfish
Cost ~ cost_of_elephants (approximation)
• The low order terms in a function are relatively
insignificant for large n
n4 + 100n2 + 10n + 50 ~ n4
i.e., n4 + 100n2 + 10n + 50 and n4 have the same
rate of growth

14
Rate of Growth ≡Asymptotic Analysis

• Using rate of growth as a measure to compare


different functions implies comparing them
asymptotically.
• If f(x) is faster growing than g(x), then f(x)
always eventually becomes larger than g(x) in
the limit (for large enough values of x).

15
Example
• Suppose you are designing a web site to process
user data (e.g., financial records).
• Suppose program A takes fA(n)=30n+8
microseconds to process any n records, while
program B takes fB(n)=n2+1 microseconds to
process the n records.
• Which program would you choose, knowing
you’ll want to support millions of users?

16
Visualizing Orders of Growth
• On a graph, as
you go to the

Value of function 
fA(n)=30n+8
right, a faster
growing
function
fB(n)=n2+1
eventually
becomes
larger... Increasing n 

17
Questions
• Find the best big-O notation to describe the
complexity of following algorithms:
– A binary search algorithm.
– A linear search algorithm.
– An algorithm that finds the maximum element
in a finite sequence.

18

You might also like