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.