Week 2 Analysis of Algorithms
Week 2 Analysis of Algorithms
html
Analysis of Algorithms
2/89
Running Time
An algorithm is a step-by-step procedure
1 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
3/89
Empirical Analysis
1. Write program that implements an algorithm
2. Run program with inputs of varying size and composition
3. Measure the actual running time
4. Plot the results
Limitations:
4/89
Theoretical Analysis
!"Uses high-level description of the algorithm instead of implementation ("pseudocode")
!"Characterises running time as a function of the input size, n
!"Takes into account all possible inputs
!"Allows us to evaluate the speed of an algorithm independent of the hardware/software environment
5/89
Pseudocode
Example: Find maximal element in an array
2 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
arrayMax(A):
| Input array A of n integers
| Output maximum element of A
|
| currentMax=A[0]
| for all i=1..n-1 do
| | if A[i]>currentMax then
| | currentMax=A[i]
| | end if
| end for
| return currentMax
Control flow
Function declaration
!"f(arguments):
Input …
Output …
…
Expressions
!"= assignment
!"= equality testing
!"n2 superscripts and other mathematical formatting allowed
!"swap A[i] and A[j] verbal descriptions of simple operations allowed
3 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
To reverse the order of the elements on a stack S with the help of a queue:
1. In the first phase, pop one element after the other from S and enqueue it in queue Q until the stack is empty.
2. In the second phase, iteratively dequeue all the elements from Q and push them onto the stack.
Sample solution:
1. A is an array of ints
...
4 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
2. S is a stack
...
swap the top two elements on S
...
2. x = StackPop(S);
y = StackPop(S);
StackPush(S, x);
StackPush(S, y);
...
swap the two elements at the front of queue Q
...
12/89
The Abstract RAM Model
RAM = Random Access Machine
5 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
13/89
Primitive Operations
!"Basic computations performed by an algorithm
!"Identifiable in pseudocode
!"Largely independent of the programming language
!"Exact definition not important (we will shortly see why)
!"Assumed to take a constant amount of time in the RAM model
Examples:
!"evaluating an expression
!"indexing into an array
!"calling/returning from a function
14/89
Counting Primitive Operations
By inspecting the pseudocode …
!"we can determine the maximum number of primitive operations executed by an algorithm
!"as a function of the input size
Example:
arrayMax(A):
| Input array A of n integers
| Output maximum element of A
|
| currentMax=A[0] 1
| for all i=1..n-1 do n+(n-1)
| | if A[i]>currentMax then 2(n-1)
| | currentMax=A[i] n-1
| | end if
| end for
| return currentMax 1
-------
6 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
Total 5n-2
15/89
Estimating Running Times
Algorithm arrayMax requires 5n – 2 primitive operations in the worst case
Define:
!"Constant ≅ 1
!"Logarithmic ≅ log n
!"Linear ≅ n
!"N-Log-N ≅ n log n
!"Quadratic ≅ n2
!"Cubic ≅ n3
!"Exponential ≅ 2n
7 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
In a log-log chart, the slope of the line corresponds to the growth rate of the function
!"Examples:
#"102n + 105 is a linear function
#"105n2 + 108n is a quadratic function
8 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
⇒ Linear growth rate of the running time T(n) is an intrinsic property of algorithm arrayMax
matrixProduct(A,B):
| Input n×n matrices A, B
| Output n×n matrix A·B
|
| for all i=1..n do
| | for all j=1..n do
| | | C[i,j]=0
| | | for all k=1..n do
| | | C[i,j]=C[i,j]+A[i,k]·B[k,j]
| | | end for
| | end for
| end for
| return C
matrixProduct(A,B):
| Input n×n matrices A, B
| Output n×n matrix A·B
|
| for all i=1..n do 2n+1
| | for all j=1..n do n(2n+1)
| | | C[i,j]=0 n2
| | | for all k=1..n do n2(2n+1)
| | | C[i,j]=C[i,j]+A[i,k]·B[k,j] n3·4
| | | end for
| | end for
| end for
9 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
| return C 1
------------
Total 6n3+4n2+3n+2
Big-Oh
23/89
Big-Oh Notation
Given functions f(n) and g(n), we say that
f(n) ∈ O(g(n))
f(n) ≤ c·g(n) ∀n ≥ n0
Hence: O(g(n)) is the set of all functions that do not grow faster than g(n)
10 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
!"2n+10 ≤ c·n
⇒ (c-2)n ≥ 10
⇒ n ≥ 10/(c-2)
!"pick c=3 and n0=10
!"n2 ≤ c·n
⇒ n≤c
!"inequality cannot be satisfied since c must be a constant
Show that
1. 7n-2 is in O(n)
2. 3n3 + 20n2 + 5 is in O(n3)
3. 3·log2 n + 5 is in O(log2 n)
11 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
1. 7n-2 ∈ O(n)
need c>0 and n0≥1 such that 7n-2 ≤ c·n for n≥n0
⇒ true for c=7 and n0=1
2. 3n3 + 20n2 + 5 ∈ O(n3)
need c>0 and n0≥1 such that 3n3+20n2+5 ≤ c·n3 for n≥n0
⇒ true for c=4 and n0=21
3. 3·log2 n + 5 ∈ O(log2 n)
need c>0 and n0≥1 such that 3·log2 n+5 ≤ c·log2 n for n≥n0
⇒ true for c=8 and n0=2
28/89
Big-Oh and Rate of Growth
!"Big-Oh notation gives an upper bound on the growth rate of a function
#""f(n) ∈ O(g(n))" means growth rate of f(n) no more than growth rate of g(n)
!"use big-Oh to rank functions according to their rate of growth
29/89
Big-Oh Rules
!"If f(n) is a polynomial of degree d ⇒ f(n) is O(nd)
#"lower-order terms are ignored
#"constant factors are ignored
!"Use the smallest possible class of functions
12 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
∑
Show that i is O(n2)
i=1
n
n(n + 1) n2 + n
∑
i= =
i=1
2 2
which is O(n2)
32/89
Asymptotic Analysis of Algorithms
Asymptotic analysis of algorithms determines running time in big-Oh notation:
Example:
13 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
33/89
Example: Computing Prefix Averages
!"The i-th prefix average of an array X is the average of the first i elements:
NB. computing the array A of prefix averages of another array X has applications in financial analysis
prefixAverages1(X):
| Input array X of n integers
| Output array A of prefix averages of X
|
| for all i=0..n-1 do O(n)
| | s=X[0] O(n)
| | for all j=1..i do O(n2)
| | s=s+X[j] O(n2)
| | end for
| | A[i]=s/(i+1) O(n)
| end for
| return A O(1)
14 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
prefixAverages2(X):
| Input array X of n integers
| Output array A of prefix averages of X
|
| s=0
| for all i=0..n-1 do O(n)
| s=s+X[i] O(n)
| A[i]=s/(i+1) O(n)
| end for
| return A O(1)
36/89
Example: Binary Search
The following recursive algorithm searches for a value in a sorted array:
search(v,a,lo,hi):
| Input value v
| array a[lo..hi] of values
| Output true if v in a[lo..hi]
| false otherwise
|
| mid=(lo+hi)/2
| if lo>hi then return false
| if a[mid]=v then
| return true
| else if a[mid]<v then
| return search(v,a,mid+1,hi)
15 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
| else
| return search(v,a,lo,mid-1)
| end if
16 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
Cost analysis:
17 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
41/89
Math Needed for Complexity Analysis
!"Logarithms
#"logb (xy) = logb x + logb y
#"logb (x/y) = logb x - logb y
#"logb xa = a logb x
#"loga x = logb x · (logc b / logc a)
!"Exponentials
#"a(b+c) = abac
c
#"abc = (ab)
#"ab / ac = a(b-c)
#"b = alogab
#"bc = ac·logab
!"Proof techniques
!"Summation (addition of sequences of numbers)
!"Basic probability (for average case analysis, randomised algorithms)
enqueue(Q,Elem):
| Input queue Q, element Elem
18 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
Answer: O(|Q|)
insertionSort(A):
| Input array A[0..n-1] of n elements
|
| for all i=1..n-1 do
| | element=A[i], j=i-1
| | while j≥0 and A[j]>element do
| | A[j+1]=A[j]
| | j=j-1
| | end while
| | A[j+1]=element
| end for
Answer: O(n2)
Best known sorting algorithms are O(n · log n). Example: (randomised) Quicksort (→ week 10)
19 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
binaryConversion(n):
| Input positive integer n
| Output binary representation of n on a stack
|
| create empty stack S
| while n>0 do
| | push (n mod 2) onto S
| | n= n/2
| end while
| return S
Assume that creating a stack and pushing an element both are O(1) operations ("constant")
Answer: O(log n)
48/89
Relatives of Big-Oh
big-Omega
!"f(n) ∈ Ω(g(n)) if there is a constant c > 0 and an integer constant n0 ≥ 1 such that
f(n) ≥ c·g(n) ∀n ≥ n0
big-Theta
!"f(n) ∈ Θ(g(n)) if there are constants c',c'' > 0 and an integer constant n0 ≥ 1 such that
20 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
Examples:
!"¼n2 ∈ Ω(n2)
#"need c > 0 and n0 ≥ 1 such that ¼n2 ≥ c·n2 for n≥n0
#"let c=¼ and n0=1
!"¼n2 ∈ Ω(n)
#"need c > 0 and n0 ≥ 1 such that ¼n2 ≥ c·n for n≥n0
#"let c=1 and n0=4
!"¼n ∈ Θ(n2)
2
52/89
Static/Dynamic Sequences
Previously we have used an array to implement a stack
21 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
22 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
Benefits:
56/89
Self-referential Structures
To realise a "chain of elements", need a node containing
!"a value
!"a link to the next node
Disadvantages:
23 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
makeNode(v)
| Input value v
| Output new linked list node with value v
|
| new.value=v // initialise data
| new.next=NULL // initialise link to next node
| return new // return pointer to new node
Write pseudocode to create a linked list of three nodes with values 1, 42 and 9024.
mylist=makeNode(1)
mylist.next=makeNode(42)
(mylist.next).next=makeNode(9024)
61/89
Iteration over Linked Lists
When manipulating list elements
24 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
p=list
while p≠NULL do
| … do something with p.value …
| p=p.next
end while
25 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
inLL(L,d):
| Input linked list L, value d
| Output true if d in list, false otherwise
|
| p=L
| while p≠NULL do
| | if p.value=d then // element found
| | return true
| | end if
| | p=p.next
| end while
| return false // element not in list
26 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
showLL(L):
| Input linked list L
|
| p=L
| while p≠NULL do
| print p.value
| p=p.next
| end while
1 p=list
2 while p≠NULL do
3 | print p.value
4 | if p.next≠NULL then
5 | p=p.next.next
6 | else
7 | p=NULL
8 | end if
9 end while
If p happens to be the last element in the list, then p.next.next is undefined (NULL.next does not exist)
The if-statement ensures that we do not attempt to assign an undefined value to pointer p in line 5
27 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
showLL(L):
| Input linked list L
|
| if L≠NULL do
| print L.value
| showLL(L.next)
| end if
71/89
Modifying a Linked List
Insert a new element at the beginning:
insertLL(L,d):
| Input linked list L, value d
| Output L with d prepended to the list
|
| new=makeNode(d) // create new list element
| new.next=L // link to beginning of list
| return new // new element is new head
deleteHead(L):
| Input non-empty linked list L
| Output L with head deleted
28 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
|
| L = L.next // move to second element
| return L
deleteLL(L,d):
| Input linked list L, value d
| Output L with element d deleted
|
| if L=NULL then // element not in list
| return L
| else if L.value=d then // d found at front
| return deleteHead(L) // delete first element
| else // delete element in tail list
| L.next=deleteLL(L.next,d)
| end if
| return L
29 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
dequeue(Q):
| Input non-empty queue Q
| Output front element d, dequeued from Q
|
| d=Q.front.value // first element in the list
| Q.front=Q.front.next // move to second element
| return d
enqueue(Q,d):
| Input queue Q
|
| new=makeNode(d) // create new list element
| Q.rear.next=new // add to end of list
| Q.rear=new // link to new end of list
75/89
Comparison Array vs. Linked List
Complexity of operations, n elements
30 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
O(n) O(n)
find an element
(O(log n), if array is sorted)
index a specific element O(1) O(n)
Complexity Classes
77/89
Complexity Classes
Problems in Computer Science …
Classes of problems:
!"P = problems for which an algorithm can compute answer in polynomial time
!"NP = includes problems for which no P algorithm is known
Beware: NP stands for "nondeterministic, polynomial time (on a theoretical Turing Machine)"
79/89
Generate and Test
31 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
In scenarios where
!"so that we are guaranteed to find a solution, or know that none exists
#"some randomised algorithms do not require this, however
(more on this later in this course)
Generation is straightforward:
isPrime(n):
| Input natural number n
| Output true if n prime, false otherwise
|
32 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
82/89
Example: Subset Sum
Problem to solve ...
34, 38, 39, 43, 55, 66, 67, 84, 85, 91,
101, 117, 128, 138, 165, 168, 169, 182, 184, 186,
234, 238, 241, 276, 279, 288, 386, 387, 388, 389
General problem:
subsetsum(A,k):
| Input set A of n integers, target sum k
| Output true if Σx∈Sx=k for some S⊆A
| false otherwise
|
33 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
Algorithm:
subsetsum1(A,k):
| Input set A of n integers, target sum k
| Output true if Σx∈Sx=k for some S⊆A
| false otherwise
|
| for s=0..2n-1 do
| | if k = Σ(ith bit of s is 1) A[i] then
34 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
| | return true
| | end if
| end for
| return false
Alternative approach …
subsetsum2(A,n,k)
(returns true if any subset of A[0..n-1] sums to k; returns false otherwise)
subsetsum2(A,n,k):
| Input array A, index n, target sum k
| Output true if some subset of A[0..n-1] sums up to k
| false otherwise
|
| if k=0 then
| return true // empty set solves this
| else if n=0 then
| return false // no elements => no sums
| else
| return subsetsum(A,n-1,k-A[n-1]) or subsetsum(A,n-1,k)
| end if
35 of 36 18/3/2022, 1:07 pm
Week 2: Analysis of Algorithms https://www.cse.unsw.edu.au/~cs9024/22T1/lecs/week2/notes.html
Cost analysis:
89/89
Summary
!"Big-Oh notation
!"Asymptotic analysis of algorithms
!"Examples of algorithms with logarithmic, linear, polynomial, exponential complexity
!"Linked lists vs. arrays
!"Suggested reading:
#"Sedgewick, Ch. 2.1-2.4, 2.6
36 of 36 18/3/2022, 1:07 pm