CPSC 331: Tutorial 4
Recursion and Recurrence
PhD Student
Spring 2018
Today
Mostly practice problems and homework help.
But I want to review some linear data structures first.
Linked List
Each element of the list is a container. Each container has a
- Reference to some data
- Reference to the next (or perhaps previous) element
\(head\)
\(null\)
\(tail\)
192
42
36
Linked List
\(head\)
\(null\)
\(tail\)
192
42
36
We call this a "linked list" because it's list of "things" where each "thing" is linked to the next.
Is the better than an array? When would you use this instead of an array?
Doubly Linked List
Each element of the list is a container. But now each container has a
- Reference to some data
- Reference to the next AND previous element
\(head\)
\(null\)
\(tail\)
192
42
36
\(null\)
What does this allow you to do that Linked lists don't?
Doubly Linked List
\(head\)
\(null\)
\(tail\)
192
42
36
\(null\)
What does this allow you to do that Linked lists don't?
What is the sacrifice?
Stacks
Put a plate on (push), take a plate from the top (pop). Both are "easy" operations i.e. O(1).
Stacks
How do we make a data structure for this?
- I need to know what's on the top of the stack...
- I need to have easy access to the element after the top
- And this is true for all elements of the stack
\(top\)
\(null\)
This is just a linked list (without a tail)
Stacks
\(top\)
\(null\)
How do you push?
How do you pop?
Queues
Easy to enter the queue, and easy to exit when it's your turn. Cutting in line is problematic, so is removing yourself from the middle.
Queues
How do we make a data structure for this?
- Need to keep track of the front and back of the queue (easy insertion and deletion)
- If I remove someone, I need to know who the next person in line is
\(front\)
\(back\)
This is just a linked list...
\(null\)
Queues
How do we add?
\(front\)
\(back\)
How do we remove?
Recursion
When solving recurrence relations, you have a few options.
- Substitution
- Guess n' check
With guess and check, it's a good idea to look at some values for \(T(n)\), then guess an appropriate \(g(n)\) such that \(T(n) = O(g(n))\).
You then have to prove that this is true, which is often easy to do by induction.
CPSC 331: Tutorial 4
By Joshua Horacsek
CPSC 331: Tutorial 4
- 1,140