* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download ANALYSIS OF ALGORITHMS
Knapsack problem wikipedia , lookup
Corecursion wikipedia , lookup
Sieve of Eratosthenes wikipedia , lookup
Theoretical computer science wikipedia , lookup
Computational complexity theory wikipedia , lookup
Gene expression programming wikipedia , lookup
Pattern recognition wikipedia , lookup
Probabilistic context-free grammar wikipedia , lookup
Smith–Waterman algorithm wikipedia , lookup
Sorting algorithm wikipedia , lookup
Multiplication algorithm wikipedia , lookup
Simplex algorithm wikipedia , lookup
Genetic algorithm wikipedia , lookup
K-nearest neighbors algorithm wikipedia , lookup
Binary search algorithm wikipedia , lookup
Fisher–Yates shuffle wikipedia , lookup
Fast Fourier transform wikipedia , lookup
Dijkstra's algorithm wikipedia , lookup
Expectation–maximization algorithm wikipedia , lookup
Planted motif search wikipedia , lookup
Algorithm characterizations wikipedia , lookup
Factorization of polynomials over finite fields wikipedia , lookup
ANALYSIS OF ALGORITHMS
Data Structures
Algorithms
Definition
A step by step procedure for performing
some task in a finite amount of time
Analysis
Methodology for analyzing a “good”
algorithm (i.e. Archimedes)
Look at Running Time
How are algorithms described ?
PSEUDO-CODE
representation of an algorithm
combines
natural language
familiar programming language structures
facilitates the high-level analysis of an
algorithm
Pseudo-Code Conventions
Expressions
Algorithm Structures
Control Structures
Expressions
Standard math symbols
+
-
*
/
()
Relational operators
Boolean operators
and
or
not
Assignment operator
Array indexing A[i]
,=
Algorithm Structure
Algorithm heading
Algorithm name(param1, param2,...):
Input : input elements
Output : output elements
Statements
call
return statement
control structures
object.method(arguments)
return value
Control Structures
decision structures
if ... then ... [else ...]
while loops
while ... do
repeat loops
repeat ... until ...
for loop
for ... do
General Rules
communicate high level ideas and not
implementation details (programming
language specifics)
clear and informative
Example - Problem
Problem : Write pseudo-code for an
algorithm that will determine the
maximum element from a list (array)
Example - Algorithm
Algorithm arrayMax(A,n):
Input: An array A storing n integers.
Output: The maximum element in A.
currentMax
A[0]
for i
1 to n - 1 do
if currentMax < A[i] then
currentMax
A[i]
return currentMax
Analysis of Algorithms
Running time
depends on input size n
number of primitive operations performed
Primitive operation
unit of operation that can be identified in the
pseudo-code
Primitive Operations-Types
Assigning a value to a variable
Calling a method/procedure
Performing an arithmetic operation
Comparing two numbers
Returning from a method/procedure
Primitive Operations Some General Rules
for Loops
Nested for Loops
Conditional Statements
for Loops
The running time of a for loop is at most
the running time of the statements inside
the for loop (including tests) times the
number of iterations.
Example
for i
0 to n - 1 do
A[i]
0
Nested for Loops
Analyze these inside out. The total
running time of a statement inside a
group of nested for loops is the running
time of the statement multiplied by the
product of the sizes of all the for loops.
Example
for i
0 to n - 1 do
for j
0 to n - 1 do
k++
Conditional Statements
if (cond) then
S1
else
S2
The running time of an if-else statement is
never more than the running time of the
test plus the larger of the running times
of S1 and S2.
Primitive Operations Example
Count the number of primitive
operations in this program :
i=0
a=0
for i = 1 to n do
print i
a=a+i
return i
Primitive Operations Example
Estimate : 3n + 3
Linear Time
- (i.e. 6n + 2, 3n+5, n+1,etc.)
Primitive Operations Example 2
Count the number of primitive
operations in this program :
i=0
a=0
for i = 1 to n do
print i
for a = 1 to n do
print a
return i
Primitive Operations Example2
Estimate : n2 + n + 3
Polynomial (Quadratic) Time
Example 3 - Class
Algorithm sum(int n):
Input: Integer n
Output: Sum of the cubes of 1 to n
partial_sum
0
for i
1 to n do
partial_sum
partial_sum + i*i*i
return (partial_sum)
Primitive Operations Considerations
Arbitrariness of measurement
Worst-case versus average-case (difficult
to be exact : range)
Implicit operations
loop control actions
array access
Analysis of Algorithms
take-out the effect of constant factors
(i.e. 2n vs 3n : same level)
this can be attributed to differences in
hardware and software environments
compare algorithms across types (linear
vs polynomial vs exponential)
look at growth rates
Asymptotic Notation
Goal:
To simplify analysis by getting rid of
irrelevant information
The “Big-Oh” Notation
Given functions f(n) and g(n), f(n) is O
(g(n)) if f(n) <= c g(n) for n>= n0 where c
and n0 are constants
Big-Oh Notation
Rule : Drop lower order terms and
constant factors
5n + 2 is O (n)
4n3log n + 6n3 + 1 is O (n3logn)
Big-Oh Notation - Relatives
Big Omega (reverse)
Big Theta (both ways, same level)
General Rule : Use the most descriptive
notation to describe the algorithm
Practical Significance of
Big-Oh Notation
Example
for i
0 to n-1 do
A[i]
0
Running time is
2n, if we count assignments & array accesses
3n, if we include implicit loop assignments
4n, if we include implicit loop comparisons
Regardless, running time is O (n)
Algorithms - Common
Classifications
Typical functions that classify algorithms
constant
logarithmic
linear
quadratic
exponential
O (1)
O (log n)
O (n)
O (n2)
O (an), n > 1
Linear Search vs Binary
Search
Linear Search
Binary Search
O (n)
O (log n)
Example : to search for a number from
1024 entries using the binary search
algorithm will only take 10 steps
O(log n) Algorithm
Steps
Range (n)
Power of 2
0
1
20
1
2
21
2
4
22
3
8
23
4
16
24
5
32
25
6
64
26
7
128
27
O(log n) Algorithm
Binary Search
Algorithm bin_search(int a[], int x, int n)
Input: Array a, search target x,
array size n
Output: Position of x in the array (if found)
`
{
low
0; high
n-1
while (low <= high) do
mid
(low + high)/2
if(a[mid] < x) then
low
mid + 1
else
if (a[mid] > x) then
high
mid - 1
else
return (mid)
return (NOT_FOUND)
}
Prefix Average Problem
Given an array X storing n numbers, we
want to compute an array A such that
A[1] is the average of elements X[0] …
X[I] for I = 0 … n-1.
algorithm A = O (n2)
algorithm B = O (n)