Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
50 views17 pages

Introduction To Programming (In C++) : Complexity Analysis of Algorithms

This document discusses complexity analysis of algorithms including estimating runtime, big O notation, examples of complexity ranking for different algorithms, and analyzing complexity of recursive algorithms.

Uploaded by

Elias Karam
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)
50 views17 pages

Introduction To Programming (In C++) : Complexity Analysis of Algorithms

This document discusses complexity analysis of algorithms including estimating runtime, big O notation, examples of complexity ranking for different algorithms, and analyzing complexity of recursive algorithms.

Uploaded by

Elias Karam
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/ 17

Introduction to Programming

(in C++)

Complexity Analysis of Algorithms

Jordi Cortadella
Dept. of Computer Science, UPC
Estimating runtime
• What is the runtime of g(n)?
void g(int n) {
for (int i = 0; i < n; ++i) f();
}

void g(int n) {
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j) f();
}

Introduction to Programming © Dept. CS, UPC 2


Estimating runtime
• What is the runtime of g(n)?

void g(int n) {
for (int i = 0; i < n; ++i)
for (int j = 0; j <= i; ++j) f();
}

Introduction to Programming © Dept. CS, UPC 3


Complexity analysis
• A technique to characterize the execution time of
an algorithm independently from the machine,
the language and the compiler.

• Useful for:
– evaluating the variations of execution time with regard
to the input data
– comparing algorithms

• We are typically interested in the execution time


of large instances of a problem, e.g., when n  ,
(asymptotic complexity).
Introduction to Programming © Dept. CS, UPC 4
Big O
• A method to characterize the execution time of
an algorithm:
– Adding two square matrices is O(n2)
– Searching in a dictionary is O(log n)
– Sorting a vector is O(n log n)
– Solving Towers of Hanoi is O(2n)
– Multiplying two square matrices is O(n3)
– …

• The O notation only uses the dominating terms


of the execution time. Constants are disregarded.
Introduction to Programming © Dept. CS, UPC 5
Big O: formal definition
• Let T(n) be the execution time of an algorithm with
input data n.
• T(n) is O(f(n)) if there are positive constants c and n0
such that T(n)  cf(n) when n  n0.
cf(n)

T(n)

n0 n
Introduction to Programming © Dept. CS, UPC 6
Big O: example

• Let T(n) = 3n2 + 100n + 5, then T(n) = O(n2)


• Proof:
– Let c = 4 and n0 = 100.05
– For n  100.05, we have that 4n2  3n2 + 100n + 5

• T(n) is also O(n3), O(n4), etc.


Typically, the smallest complexity is used.

Introduction to Programming © Dept. CS, UPC 7


Big O: examples

Introduction to Programming © Dept. CS, UPC 8


Complexity ranking

Introduction to Programming © Dept. CS, UPC 9


Complexity analysis: examples
Let us assume that f() has complexity O(1)
for (int i = 0; i < n; ++i) f();

for (int i = 0; i < n; ++i)


for (int j = 0; j < n; ++j) f();

for (int i = 0; i < n; ++i)


for (int j = 0; j <= i; ++j) f();

for (int i = 0; i < n; ++i)


for (int j = 0; j < n; ++j)
for (int k = 0; k < n; ++k) f();

for (int i = 0; i < m; ++i)


for (int j = 0; j < n; ++j)
for (int k = 0; k < p; ++k) f();
Introduction to Programming © Dept. CS, UPC 10
Complexity analysis: recursion
void f(int n) {
if (n > 0) {
DoSomething(n); // O(n)
f(n/2);
}
}

Introduction to Programming © Dept. CS, UPC 11


Complexity analysis: recursion
void f(int n) { n
if (n > 0) {
DoSomething(n); // O(n) n/2 n/2
f(n/2); f(n/2);
} n/4 n/4 n/4 n/4
}
… … … … … … … …

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Introduction to Programming © Dept. CS, UPC 12


Complexity analysis: recursion
void f(int n) {
if (n > 0) {
DoSomething(n); // O(n)
f(n-1);
}
}

Introduction to Programming © Dept. CS, UPC 13


Complexity analysis: recursion
void f(int n) {
if (n > 0) {
DoSomething(); // O(1)
f(n-1); f(n-1);
}
}

Introduction to Programming © Dept. CS, UPC 14


Asymptotic complexity (small values)

Introduction to Programming © Dept. CS, UPC 15


Asymptotic complexity (larger values)

Introduction to Programming © Dept. CS, UPC 16


Execution time: example
• Let us consider that an operation can be
executed in 1 ns (10-9 s).

Introduction to Programming © Dept. CS, UPC 17

You might also like