Remember, "the answer" is only half of it! Also, make sure everyone in your group can explain why.

We will use this Gradescope Online Assignment as our worksheet for in-class work. These problems are coded as being worth points for our simplicity, but will not impact your grade in the course.

## Question 2

### Question 2.1

Recall that Big-Oh is an upper bound, meaning that any function that $f(n) = n^2$ is greater than as $n$ approaches infinity is bound by $\mathcal{O}(n^2)$.

### Question 2.2

Recall that Big-Omega is an lower bound, meaning that any function that grows at least as fast as $f(n) = n^2$ as $n$ approaches infinity is bound by $\mathcal{Ω}(n^2)$.

### Question 2.3

Recall that Big-Theta represents that "perfect fit" for a function. In other words, to be bound by $\mathcal{Θ}(n^2)$, a function must be both bound by $\mathcal{O}(n^2)$ and $\mathcal{Ω}(n^2)$ as $n$ approaches infinity.

## Question 3

### Question 3.1

This is fairly similar to the isPrime example from lecture, but it's a little easier to state which inputs of n will cause the slower runtime. The answer is $\mathcal{O}(n)$ since under certain circumstances (for loop when n % 11 == 0) the function will have at most linear runtime as n increases.

### Question 3.2

$\Omega(1)$ since no matter what, as n increases, the function will always have at least a constant runtime.

### Question 3.3

This function has no theta, since its Big-Oh and Big-Omega bounds are different.

## Question 4

### Question 4.1

Adding an item to ArrayQueueV2 is often pretty fast ($\Theta(1)$) when there is space in the queue for more items because of the front and back pointers. So the best case is actually most cases when we don't have to resize. However, whenever the queue is full, the array has to resize, which will have a runtime of $\Theta(n)$ since it has to copy data from the smaller to the new larger array.