Big-O Practice

CSCI 1913 – Introduction to Algorithms, Data Structures, and Program Development
Adriana Picoral

Big-O

\(O(1) < O(\log N) < O(N) < O(N \log N) < O(n^2) < O(n^3) < O(2^n)\)

Exercise

What is the runtime?

def foo(n):
    if n < 0:
        return True
    else:
        return False

Exercise

What is the runtime? \(O(1)\)

def foo(n):
    if n < 0:
        return True
    else:
        return False

Exercise

What is the runtime?

def foo(numbers):
    result = []
    for n in numbers:
        if n < 0:
            result.append(True)
        else:
            result.append(False)
    return result

Exercise

What is the runtime? \(O(N)\)

def foo(numbers):
    result = []
    for n in numbers:
        if n < 0:
            result.append(True)
        else:
            result.append(False)
    return result

Exercise

What is the runtime?

def foo(numbers):
    result = []
    for n in numbers:
        if n < 0:
            return True
        else:
            result.append(False)
    return result

Exercise

What is the runtime? \(O(N)\)

def foo(numbers):
    result = []
    for n in numbers:
        if n < 0:
            return True
        else:
            result.append(False)
    return result

Exercise

What is the runtime?

def foo(numbers):
    result = []
    while len(numbers) > 1:
        middle = len(numbers)//2
        result.append(numbers[middle])
        numbers = numbers[middle:]
    return result

Exercise

What is the runtime? \(O(\log N)\)

def foo(numbers):
    result = []
    while len(numbers) > 1:
        middle = len(numbers)//2
        result.append(numbers[middle])
        numbers = numbers[middle:]
    return result

Exercise

What is the runtime?

def foo(numbers):
    for i in range(len(numbers)):
      for j in range(i+1, len(numbers)):
        if numbers[i] == numbers[j]:
          return True
    return False

Exercise

What is the runtime? \(O(N^2)\)

def foo(numbers):
    for i in range(len(numbers)):
      for j in range(i+1, len(numbers)):
        if numbers[i] == numbers[j]:
          return True
    return False

\((N-1) + (N-2) + (N-3) + ... + 1 = \frac{N*(N-1)}{2} = \frac{N^2-N}{2}\)

Exercise

What is the runtime?

def foo(numbers):
    result = []
    for i in range(len(numbers)):
      for j in range(5):
        result.append(numbers[i] * j)
    return result

Exercise

What is the runtime?\(O(N)\)

def foo(numbers):
    result = []
    for i in range(len(numbers)):
      for j in range(5):
        result.append(numbers[i] * j)
    return result

Exercise

What is the runtime?

import random

def generate_list(n):  
    result = []
    for _ in range(n):
        result.append(random.randint(0, n))
    return result
      

def foo(n):
    result = []
    for i in range(n):
        numbers = generate_list(n)
        while len(numbers) > 1:
            middle = len(numbers)//2
            result.append(numbers[middle])
            numbers = numbers[middle:]
    return result

Exercise

What is the runtime? \(O(N^2)\)

import random

def generate_list(n):  
    result = []
    for _ in range(n):
        result.append(random.randint(0, n))
    return result
      

def foo(n):
    result = []
    for i in range(n):
        numbers = generate_list(n)
        while len(numbers) > 1:
            middle = len(numbers)//2
            result.append(numbers[middle])
            numbers = numbers[middle:]
    return result

\(O(N^2) + O(N \log N)\)

Exercise

def example(y):
    ctr = 1
    while ctr < y:
        ctr *= 2
    return

Exercise

What is the runtime? \(O(\log N)\)

def foo(y):
    ctr = 1
    while ctr < y:
        ctr *= 2
    return ctr

Each iteration doubles the counter, so for each iteration we half the distance to y.

Gradescope Exercise

Answer the gradescope quiz.