Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based...

40
Big O Notation Robin Visser Background Definition Examples Mathematical examples Formalities Algorithmic examples Summary Limitations Big O Notation Robin Visser IOI Training Camp University of Cape Town 3 December 2016 1 / 15

Transcript of Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based...

Page 1: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Big O Notation

Robin Visser

IOI Training CampUniversity of Cape Town

3 December 2016

1 / 15

Page 2: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Overview

1 Background

2 Definition

3 ExamplesMathematical examplesFormalitiesAlgorithmic examples

4 Summary

5 Limitations

2 / 15

Page 3: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Background

• Often times, it is an easy exercise to construct analgorithm which will solve the task at hand.

• What is more challenging, is getting an algorithm whichruns in the allocated time and memory constraints.

• Big O notation allows us to efficiently classify algorithmsbased on their time/memory performance for large inputs.

3 / 15

Page 4: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Background

• Often times, it is an easy exercise to construct analgorithm which will solve the task at hand.

• What is more challenging, is getting an algorithm whichruns in the allocated time and memory constraints.

• Big O notation allows us to efficiently classify algorithmsbased on their time/memory performance for large inputs.

3 / 15

Page 5: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Background

• Often times, it is an easy exercise to construct analgorithm which will solve the task at hand.

• What is more challenging, is getting an algorithm whichruns in the allocated time and memory constraints.

• Big O notation allows us to efficiently classify algorithmsbased on their time/memory performance for large inputs.

3 / 15

Page 6: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Definition

• Consider an algorithm which depends on some parametern (for example: sorting an array of size n)

• Let T (n) be the number of steps that the algorithm takes.

Definition

We say T (n) is O(g(n)) if and only if there exists constants Cand n0 such that, for all n ≥ n0, we have:

T (n) ≤ Cg(n)

Alternate Definition

We say T (n) is O(g(n)) if and only if:

limn→∞

T (n)

g(n)<∞

4 / 15

Page 7: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Definition

• Consider an algorithm which depends on some parametern (for example: sorting an array of size n)

• Let T (n) be the number of steps that the algorithm takes.

Definition

We say T (n) is O(g(n)) if and only if there exists constants Cand n0 such that, for all n ≥ n0, we have:

T (n) ≤ Cg(n)

Alternate Definition

We say T (n) is O(g(n)) if and only if:

limn→∞

T (n)

g(n)<∞

4 / 15

Page 8: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Definition

• Consider an algorithm which depends on some parametern (for example: sorting an array of size n)

• Let T (n) be the number of steps that the algorithm takes.

Definition

We say T (n) is O(g(n)) if and only if there exists constants Cand n0 such that, for all n ≥ n0, we have:

T (n) ≤ Cg(n)

Alternate Definition

We say T (n) is O(g(n)) if and only if:

limn→∞

T (n)

g(n)<∞

4 / 15

Page 9: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Let T (n) = n2 + 42n+ 7. Can we say T (n) is O(n) ? Whatabout O(n2) or O(n3)?

limn→∞

T (n)

n= lim

n→∞

(n+ 42 +

7

n

)=∞

Therefore, T (n) 6= O(n)

limn→∞

T (n)

n2= lim

n→∞

(1 +

42

n+

7

n2

)= 1 <∞

Therefore, T (n) = O(n2)

limn→∞

T (n)

n3= lim

n→∞

(1

n+

42

n2+

7

n3

)= 0 <∞

Therefore, we can also say, T (n) = O(n3)

5 / 15

Page 10: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Let T (n) = n2 + 42n+ 7. Can we say T (n) is O(n) ? Whatabout O(n2) or O(n3)?

limn→∞

T (n)

n= lim

n→∞

(n+ 42 +

7

n

)=∞

Therefore, T (n) 6= O(n)

limn→∞

T (n)

n2= lim

n→∞

(1 +

42

n+

7

n2

)= 1 <∞

Therefore, T (n) = O(n2)

limn→∞

T (n)

n3= lim

n→∞

(1

n+

42

n2+

7

n3

)= 0 <∞

Therefore, we can also say, T (n) = O(n3)

5 / 15

Page 11: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Let T (n) = n2 + 42n+ 7. Can we say T (n) is O(n) ? Whatabout O(n2) or O(n3)?

limn→∞

T (n)

n= lim

n→∞

(n+ 42 +

7

n

)=∞

Therefore, T (n) 6= O(n)

limn→∞

T (n)

n2= lim

n→∞

(1 +

42

n+

7

n2

)= 1 <∞

Therefore, T (n) = O(n2)

limn→∞

T (n)

n3= lim

n→∞

(1

n+

42

n2+

7

n3

)= 0 <∞

Therefore, we can also say, T (n) = O(n3)

5 / 15

Page 12: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Let T (n) = n2 + 42n+ 7. Can we say T (n) is O(n) ? Whatabout O(n2) or O(n3)?

limn→∞

T (n)

n= lim

n→∞

(n+ 42 +

7

n

)=∞

Therefore, T (n) 6= O(n)

limn→∞

T (n)

n2= lim

n→∞

(1 +

42

n+

7

n2

)= 1 <∞

Therefore, T (n) = O(n2)

limn→∞

T (n)

n3= lim

n→∞

(1

n+

42

n2+

7

n3

)= 0 <∞

Therefore, we can also say, T (n) = O(n3)

5 / 15

Page 13: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

More examples:

• 3n3 + 7n2 + n+ 36 = O(n3)(for polynomials, we only care about the leading term)

• 5n2 log2 n+ 4n log2 n+ 6n = O(n2 log2 n)(we can ignore constants, and only take the highest-orderterm)

• 13 log2 n = O(log2 n) = O(log7 n) = O(log n)(the base for logarithms does not matter)

• 9 log n+ 5(log n)4 + 18√n log n+ 2n2 = O(n2)

6 / 15

Page 14: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

More examples:

• 3n3 + 7n2 + n+ 36 = O(n3)(for polynomials, we only care about the leading term)

• 5n2 log2 n+ 4n log2 n+ 6n = O(n2 log2 n)(we can ignore constants, and only take the highest-orderterm)

• 13 log2 n = O(log2 n) = O(log7 n) = O(log n)(the base for logarithms does not matter)

• 9 log n+ 5(log n)4 + 18√n log n+ 2n2 = O(n2)

6 / 15

Page 15: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

More examples:

• 3n3 + 7n2 + n+ 36 = O(n3)(for polynomials, we only care about the leading term)

• 5n2 log2 n+ 4n log2 n+ 6n = O(n2 log2 n)(we can ignore constants, and only take the highest-orderterm)

• 13 log2 n = O(log2 n) = O(log7 n) = O(log n)(the base for logarithms does not matter)

• 9 log n+ 5(log n)4 + 18√n log n+ 2n2 = O(n2)

6 / 15

Page 16: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

More examples:

• 3n3 + 7n2 + n+ 36 = O(n3)(for polynomials, we only care about the leading term)

• 5n2 log2 n+ 4n log2 n+ 6n = O(n2 log2 n)(we can ignore constants, and only take the highest-orderterm)

• 13 log2 n = O(log2 n) = O(log7 n) = O(log n)(the base for logarithms does not matter)

• 9 log n+ 5(log n)4 + 18√n log n+ 2n2 = O(n2)

6 / 15

Page 17: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Formalities

• Given some function g(n), we note O(g(n)) as a set offunctions. Hence we should actually say:n2 + 42n+ 7 ∈ O(n2), although most just abuse notationand use the equality symbol.

• Note that 3n3 = O(n3). We can technically also say3n3 = O(n5) or 3n3 = O(2n) or 3n3 = O(n!), althoughwe usually only care about the tightest possible bound.

7 / 15

Page 18: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Formalities

• Given some function g(n), we note O(g(n)) as a set offunctions. Hence we should actually say:n2 + 42n+ 7 ∈ O(n2), although most just abuse notationand use the equality symbol.

• Note that 3n3 = O(n3). We can technically also say3n3 = O(n5) or 3n3 = O(2n) or 3n3 = O(n!), althoughwe usually only care about the tightest possible bound.

7 / 15

Page 19: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Calculate the time complexity of the following:

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

a[i] = i;

}

To calculate the total number of steps T (n), we note:

• 1 assignment (int i = 0)

• n+ 1 comparisons (i < n)

• n increments (i++)

• n array offset calculations (a[i])

• n indirect assignments (a[i] = i)

In total: T (n) = a+ b(n+ 1) + cn+ dn+ en, where theconstants a, b, c, d, e depend on the compiler/machine runningthe code. It is much easier to simply say the code runs in O(n)time.

8 / 15

Page 20: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Calculate the time complexity of the following:

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

a[i] = i;

}

To calculate the total number of steps T (n), we note:

• 1 assignment (int i = 0)

• n+ 1 comparisons (i < n)

• n increments (i++)

• n array offset calculations (a[i])

• n indirect assignments (a[i] = i)

In total: T (n) = a+ b(n+ 1) + cn+ dn+ en, where theconstants a, b, c, d, e depend on the compiler/machine runningthe code. It is much easier to simply say the code runs in O(n)time.

8 / 15

Page 21: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Calculate the time complexity of the following:

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

a[i] = i;

}

To calculate the total number of steps T (n), we note:

• 1 assignment (int i = 0)

• n+ 1 comparisons (i < n)

• n increments (i++)

• n array offset calculations (a[i])

• n indirect assignments (a[i] = i)

In total: T (n) = a+ b(n+ 1) + cn+ dn+ en, where theconstants a, b, c, d, e depend on the compiler/machine runningthe code. It is much easier to simply say the code runs in O(n)time.

8 / 15

Page 22: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Calculate the time complexity of the following:

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

a[i] = i;

}

To calculate the total number of steps T (n), we note:

• 1 assignment (int i = 0)

• n+ 1 comparisons (i < n)

• n increments (i++)

• n array offset calculations (a[i])

• n indirect assignments (a[i] = i)

In total: T (n) = a+ b(n+ 1) + cn+ dn+ en, where theconstants a, b, c, d, e depend on the compiler/machine runningthe code. It is much easier to simply say the code runs in O(n)time.

8 / 15

Page 23: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Calculate the time complexity of the following:

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

a[i] = i;

}

To calculate the total number of steps T (n), we note:

• 1 assignment (int i = 0)

• n+ 1 comparisons (i < n)

• n increments (i++)

• n array offset calculations (a[i])

• n indirect assignments (a[i] = i)

In total: T (n) = a+ b(n+ 1) + cn+ dn+ en, where theconstants a, b, c, d, e depend on the compiler/machine runningthe code. It is much easier to simply say the code runs in O(n)time.

8 / 15

Page 24: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Calculate the time complexity of the following:

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

a[i] = i;

}

To calculate the total number of steps T (n), we note:

• 1 assignment (int i = 0)

• n+ 1 comparisons (i < n)

• n increments (i++)

• n array offset calculations (a[i])

• n indirect assignments (a[i] = i)

In total: T (n) = a+ b(n+ 1) + cn+ dn+ en, where theconstants a, b, c, d, e depend on the compiler/machine runningthe code. It is much easier to simply say the code runs in O(n)time.

8 / 15

Page 25: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Calculate the time complexity of the following:

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

a[i] = i;

}

To calculate the total number of steps T (n), we note:

• 1 assignment (int i = 0)

• n+ 1 comparisons (i < n)

• n increments (i++)

• n array offset calculations (a[i])

• n indirect assignments (a[i] = i)

In total: T (n) = a+ b(n+ 1) + cn+ dn+ en, where theconstants a, b, c, d, e depend on the compiler/machine runningthe code. It is much easier to simply say the code runs in O(n)time.

8 / 15

Page 26: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

Calculate the time complexity of the following:

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

a[i] = i;

}

To calculate the total number of steps T (n), we note:

• 1 assignment (int i = 0)

• n+ 1 comparisons (i < n)

• n increments (i++)

• n array offset calculations (a[i])

• n indirect assignments (a[i] = i)

In total: T (n) = a+ b(n+ 1) + cn+ dn+ en, where theconstants a, b, c, d, e depend on the compiler/machine runningthe code. It is much easier to simply say the code runs in O(n)time.

8 / 15

Page 27: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

What is the time complexity of the following:

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

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

a[i][j] = i + j;

}

}

Answer: O(n2)(also technically O(n3), O(n4), O(5n) . . . )

9 / 15

Page 28: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

What is the time complexity of the following:

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

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

a[i][j] = i + j;

}

}

Answer: O(n2)(also technically O(n3), O(n4), O(5n) . . . )

9 / 15

Page 29: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

What is the time complexity of the following:

int lo = 0;

int hi = n;

while (hi - lo > 1) {

mid = (lo+hi)/2;

if (a[mid] < x) {

lo = mid;

} else {

hi = mid;

}

}

Answer: O(log n)(also technically O(n2 log n), O(n3 · 2n), O(nnn

) . . . )

10 / 15

Page 30: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

What is the time complexity of the following:

int lo = 0;

int hi = n;

while (hi - lo > 1) {

mid = (lo+hi)/2;

if (a[mid] < x) {

lo = mid;

} else {

hi = mid;

}

}

Answer: O(log n)(also technically O(n2 log n), O(n3 · 2n), O(nnn

) . . . )

10 / 15

Page 31: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

What is the time complexity of the following:

for (int i = 0; i < 10000; i++) {

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

for (int k = 0; k < j; k++) {

d[i][j] = dist[i][k] + dist[k][j];

}

}

}

Answer: O(1)(there isn’t a dependency on n or any other parameter)

11 / 15

Page 32: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

What is the time complexity of the following:

for (int i = 0; i < 10000; i++) {

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

for (int k = 0; k < j; k++) {

d[i][j] = dist[i][k] + dist[k][j];

}

}

}

Answer: O(1)(there isn’t a dependency on n or any other parameter)

11 / 15

Page 33: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

What is the time complexity of the following:

void specialsum(int left, int right) {

if (left == right) {return;}

for (int i = left; i <= right; i++) {

total += vec[i];

}

int mid = (left+right)/2;

specialsum(left, mid);

specialsum(mid, right);

}

total = 0;

specialsum(0, n);

Answer: O(n log n)

12 / 15

Page 34: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Examples

What is the time complexity of the following:

void specialsum(int left, int right) {

if (left == right) {return;}

for (int i = left; i <= right; i++) {

total += vec[i];

}

int mid = (left+right)/2;

specialsum(left, mid);

specialsum(mid, right);

}

total = 0;

specialsum(0, n);

Answer: O(n log n)

12 / 15

Page 35: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Summary

When calculating how long an algorithm will take, a good ruleof thumb is to assume between 107 and 108 operations persecond. This allows us to estimate what the time Big O timeneeds to be given some constraint:

Constraint Time Complexity

N ≤ 10 000 000 O(n)N ≤ 500 000 O(n log n)N ≤ 5 000 O(n2)N ≤ 200 O(n3)N ≤ 20 O(2n)N ≤ 10 O(n!)

13 / 15

Page 36: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Summary

Notation Name Example

O(1) constant Calculating (−1)n

O(log n) logarithmic Binary Search

O(n) linear Searching for item in array

O(n log n) linearithmic Heapsort, merge sort

O(n2) quadratic Selection sort, insertion sort

O(n3) cubicNaive multiplication of

2 n× n matrices

O(cn) exponentialSolving travelling salesmen

using DP

O(n!) factorialSolving travelling salesmen

by brute force

14 / 15

Page 37: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Limitations

• The Big O time complexity of an algorithm only considerslarge input.

• For smaller input, constants do matter.

• Two algorithms could have the same Big-O timecomplexity but one might be practically faster than theother.

• Big O only gives the worst case bound. For competitionpurposes, one can often assume test data which willexhibit worst case behaviour, however for most practicaltest cases, the time taken may be far below the worst casebound.

15 / 15

Page 38: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Limitations

• The Big O time complexity of an algorithm only considerslarge input.

• For smaller input, constants do matter.

• Two algorithms could have the same Big-O timecomplexity but one might be practically faster than theother.

• Big O only gives the worst case bound. For competitionpurposes, one can often assume test data which willexhibit worst case behaviour, however for most practicaltest cases, the time taken may be far below the worst casebound.

15 / 15

Page 39: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Limitations

• The Big O time complexity of an algorithm only considerslarge input.

• For smaller input, constants do matter.

• Two algorithms could have the same Big-O timecomplexity but one might be practically faster than theother.

• Big O only gives the worst case bound. For competitionpurposes, one can often assume test data which willexhibit worst case behaviour, however for most practicaltest cases, the time taken may be far below the worst casebound.

15 / 15

Page 40: Big O Notation · 2016. 12. 4. · Big O notation allows us to e ciently classify algorithms based on their time/memory performance for large inputs. 3/15. Big O Notation Robin Visser

Big ONotation

Robin Visser

Background

Definition

Examples

Mathematicalexamples

Formalities

Algorithmicexamples

Summary

Limitations

Limitations

• The Big O time complexity of an algorithm only considerslarge input.

• For smaller input, constants do matter.

• Two algorithms could have the same Big-O timecomplexity but one might be practically faster than theother.

• Big O only gives the worst case bound. For competitionpurposes, one can often assume test data which willexhibit worst case behaviour, however for most practicaltest cases, the time taken may be far below the worst casebound.

15 / 15