CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++...
Transcript of CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++...
![Page 1: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/1.jpg)
1
Data Structures - CSCI 102
CS102 C++ Stacks & Queues Prof Tejada
![Page 2: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/2.jpg)
Templated lists are good for storing generic sequences of items, but they can be specialized to form other useful structures
3
Data Structures - CSCI 102
Copyright © William C. Cheng
Stacks/Queues
What if we had a List, but we restricted how insertion and removal were done?
Stack: only ever insert/remove from the front of the list Queue: only ever insert at the back and remove from the front of the list
![Page 3: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/3.jpg)
Examples A spring-loaded plate dispenser at a buffet
Stack: a list of items where insertion and removal only occurs at one end of the list
4
Data Structures - CSCI 102
Copyright © William C. Cheng
Stacks
A stack of boxes where you have to move the top one to get to ones farther down A PEZ dispenser
Stacks are LIFO (Last In, First Out) Items at the top of the stack are the newest Items at the bottom of the stack are the oldest
![Page 4: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/4.jpg)
What member data does a Stack need?
5
Data Structures - CSCI 102
Copyright © William C. Cheng
The Stack ADT
What member functions does a Stack have? push(item) - Add an item to the top of the Stack pop() - Remove the top item from the Stack
A list of items A length A maximum size (optional)
top() - Get a reference to the top item on the Stack (don’t remove it though!) size() - Get the number of items in the Stack empty() - Check if the Stack is empty
![Page 5: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/5.jpg)
6 Copyright © William C. Cheng
Data Structures - CSCI 102 The Stack ADT
Push Pop
![Page 6: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/6.jpg)
template <typename T> class Stack {
public: Stack(); ~Stack(); int size() const; void push(const T& value); void pop(); T& top(); bool empty() const;
};
What does the interface for a Stack look like?
7
Data Structures - CSCI 102
Copyright © William C. Cheng
Stack Declaration
![Page 7: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/7.jpg)
template <typename T> class Stack {
private: Node<T>* head; int length;
public: Stack(); ~Stack(); int size() const; void push(const T& value); void pop(); T& top(); bool empty() const;
};
How would you build a Linked List-based Stack?
8
Data Structures - CSCI 102
Copyright © William C. Cheng
Stack Declaration
![Page 8: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/8.jpg)
template <typename T> class Stack {
private: T* date; //could also be vector<T> int length;
public: Stack(); ~Stack(); int size() const; void push(const T& value); void pop(); T& top(); bool empty() const;
};
How would you build a Linked List-based Stack?
9
Data Structures - CSCI 102
Copyright © William C. Cheng
Stack Declaration
You could also back the Stack with a vector
![Page 9: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/9.jpg)
int main() { Stack<char> s;
string word; cout << "Enter a word: "; getline(cin,word);
for(int i=0; i < word.size(); i++) { s.push(word.at(i));
} while(!s.empty()) {
cout << s.top(); s.pop();
} }
Reversing the letters in a string
10
Data Structures - CSCI 102
Copyright © William C. Cheng
Stack Examples
![Page 10: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/10.jpg)
((((3*4 + 1) 5) + 6 * (2-3) + 4 (1/5)) + 1 ) + 2
Data Structures - CSCI 102 Stack Examples
How would you check that this string has equal numbers of opening/closing parentheses?
If you see a "(", use a push If you see a ")", use a pop At the end of the string, your stack should be completely empty!
11
Copyright © William C. Cheng
![Page 11: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/11.jpg)
12 Copyright © William C. Cheng
Data Structures - CSCI 102 Stack Examples
The call stack isused to keep track of function calls in C++ What happens when your code calls a function? What happens when you return from a function? How does your code keep track of which line it should return to when a function ends?
void A(int x,int y) {
int m=0; B(x);
}
void B(int x) {
int n=0; C();
}
void C() {
int p=0; cout << p;
}
![Page 12: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/12.jpg)
What happens when a function is called?
13
Data Structures - CSCI 102
Copyright © William C. Cheng
The Call Stack
The address of the next line of code is pushed onto the stack (one line past the function call) A placeholder is put on the stack for the function’s return type Execution jumps to the function’s code All arguments to the function go on the stack The function begins executing All local variables to the function are pushed onto the call stack
![Page 13: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/13.jpg)
void C() {
int p=0; cout << p;
} void B(int x) {
int n=0; C();
}
void A(int x,int y) {
int m=0; B(x);
} 14
Copyright © William C. Cheng
Data Structures - CSCI 102 The Call Stack
stack
main() calls
argc
p
...
x n
x y m
B()
C()
A()
calls
calls calls
argv ?
? 0
? ? 0
0
0 ? ? ?
![Page 14: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/14.jpg)
What happens when a function returns?
15
Data Structures - CSCI 102
Copyright © William C. Cheng
The Call Stack
The return value is copied back into the placeholder that we made for it All local arguments and variables are popped off of the stack
The return value is popped off the stack and assigned to a variable (if need be) The address of the next line of code is popped off the stack and executed
This is why we call them stack variables
![Page 15: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/15.jpg)
Dreams = Functions Inception is a perfect example of how the call stack works
16
Data Structures - CSCI 102
Copyright © William C. Cheng
Dreaming = Calling a function Waking up = Returning from a function
![Page 16: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/16.jpg)
How should you implement a Stack?
17
Data Structures - CSCI 102
Copyright © William C. Cheng
Other Stack Details
Back it with an array Back it with a vector Back it with a linked list Inherit from linked list Which is best?
Stack Underflow: the name for the condition where you call pop on an empty Stack
Stack Error Conditions
Stack Overflow: the name for the condition where you call push on a full Stack (a stack that can’t grow any more)
![Page 17: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/17.jpg)
Like waiting in line for a cashier at a store
Queue: a list of items where insertion only occurs at the back of the list and removal only occurs at the front of the list
18
Data Structures - CSCI 102
Copyright © William C. Cheng
Queues
Queues are FIFO (First In, First Out) Items at the back of the queue are the newest Items at the front of the queue are the oldest Elements are processed in the order they arrive
![Page 18: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/18.jpg)
What member data does a Queue have?
19
Data Structures - CSCI 102
Copyright © William C. Cheng
The Queue ADT
A list of items A length A maximum size (optional)
What member functions does a Queue have? push(item): add an item to the back of the Queue pop(): remove the front item from the Queue front()/back(): get a reference to the front or back item of the Queue (don’t remove it though!) size(): get the number of items in the Queue empty(): check if the Queue is empty
![Page 19: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/19.jpg)
20
Data Structures - CSCI 102
Copyright © William C. Cheng
The Queue ADT
Pop (Dequeue)
Push (Enqueue)
![Page 20: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/20.jpg)
What does the interface for a Queue look like?
21
Data Structures - CSCI 102
Copyright © William C. Cheng
Queue Declaration
template <typename T> class Queue {
public: Queue(); ~Queue(); int size() const; void push(const T& value); //enqueue void pop(); //dequeue T& front(); T& back(); bool empty() const;
};
![Page 21: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/21.jpg)
22
Data Structures - CSCI 102 Queue Declaration
What does a Linked List-based Queue look like?
template <typename T> class Queue { private: Node<T> *head, *tail; int length; public: Queue(); ~Queue(); int size() const; void push(const T& value); //enqueue void pop(); //dequeue T& front(); T& back(); bool empty() const;
}; Copyright © William C. Cheng
![Page 22: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/22.jpg)
23 }; Copyright © William C. Cheng
Data Structures - CSCI 102 Queue Declaration
What does an array-based Queue look like?
You could also back the Queue with a vector template <typename T> class Queue { private: T* data; //could also be vector<T> int length; public: Queue(); ~Queue(); int size() const; void push(const T& value); //enqueue void pop(); //dequeue T& front(); T& back(); bool empty() const;
![Page 23: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/23.jpg)
How does a printer work?
24
Data Structures - CSCI 102
Copyright © William C. Cheng
Queue Examples
Multiple print jobs are sent in Click "Print" on the computer is much faster than actually printing (build a backlog) Each job is processed in the order it’s received (FIFO)
Why wouldn’t you use a "Print Stack" instead of a "Print Queue"?
![Page 24: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/24.jpg)
Computer processor serving threads
25
Data Structures - CSCI 102
Copyright © William C. Cheng
Other Queue Examples
Serving customers at a restaurant (in the order they were seated)
Valets parking cars at a busy restaurant (park them in the order they arrived)
Anything that involves elements "waiting in line"
How do you organize your closet?
![Page 25: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/25.jpg)
How should you implement a Queue?
26
Data Structures - CSCI 102
Copyright © William C. Cheng
Other Queue Details
Back it with an array Back it with a vector Back it with a linked list Inherit from a linked list Which is best?
Queue Underflow: the name for the condition where you call pop on an empty Queue
Queue Error Conditions
Queue Overflow: the name for the condition where you call push on a full Queue (a Queue that can’t grow any more)
![Page 26: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/26.jpg)
Like books on a bookshelf
Deque: a combination of a Stack and a Queue where you can insert or remove at either end of the list (but not the middle)
27
Data Structures - CSCI 102
Copyright © William C. Cheng
Deques
![Page 27: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/27.jpg)
28 Copyright © William C. Cheng
Data Structures - CSCI 102 The Deque ADT
Push Back Pop Back
Push Front Pop Front
![Page 28: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/28.jpg)
29 Copyright © William C. Cheng
Data Structures - CSCI 102 Implement Stack Using Deque
Push Back Pop Back
Push Front Pop Front
![Page 29: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/29.jpg)
30 Copyright © William C. Cheng
Data Structures - CSCI 102 Implement Queue Using Deque
Push Back Pop Back
Push Front Pop Front
![Page 30: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/30.jpg)
1
Data Structures - CSCI 102
Copyright © William C. Cheng
CS102 Searching
![Page 31: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/31.jpg)
One of the best ways to understand Big O is by example
3
Data Structures - CSCI 102
Copyright © William C. Cheng
Search
If you were given a list of items and you wanted to see if an item is in that list, how would you do it?
How did you write your contains() function on your Linked List class?
![Page 32: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/32.jpg)
Start at the beginning (or end) of the list
4
Data Structures - CSCI 102
Copyright © William C. Cheng
Linear (a.k.a. Sequential) Search
If you find what you’re looking for, return true
Compare search value with every element in the list one at a time
If you look through all the items and don’t find it, return false
![Page 33: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/33.jpg)
5
Data Structures - CSCI 102
Copyright © William C. Cheng
Linear Search int linearSearch(const vector<int>& list,
const int& value) { for(int i=0;
i < list.size(); i++) {
if (list[i] == value) { return true;
} } return false;
}
What is the Big O?
![Page 34: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/34.jpg)
What is the best case scenario?
7
Data Structures - CSCI 102
Copyright © William C. Cheng
Linear Search
What is the worst case scenario?
Assuming value in the list? What is the average scenario?
Assuming all possible inputs?
![Page 35: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/35.jpg)
What is the best case scenario? Search item is first in list = O(1)
8
Data Structures - CSCI 102
Copyright © William C. Cheng
Linear Search
Search item not in list = O(N) What is the worst case scenario?
Assuming value in the list? What is the average scenario?
Look through half the list = O(N/2) = O(N) Assuming all possible inputs?
Hard to say. Probably O(N)
![Page 36: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/36.jpg)
Arrays What data types does this work for?
9
Data Structures - CSCI 102
Copyright © William C. Cheng
Linear Search
Vectors Linked Lists
![Page 37: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/37.jpg)
Search is a very recursive problem. How would we write a recursive linear search?
10
Data Structures - CSCI 102
Copyright © William C. Cheng
Linear Search
What’s the algorithm?
What are the base cases?
What’s the recursive case?
![Page 38: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/38.jpg)
11
Data Structures - CSCI 102
Copyright © William C. Cheng
Linear Search int recursiveSearch(const vector<int>& list,
const int& value) { recSearchHelper(list, value, 0);
}
int recSearchHelper(const vector<int>& list, const int& value), const int index) {
if (index >= list.size()) { return false;
} else if (list[i] == value) { return true;
} return recSearchHelper(list, value, index+1);
}
![Page 39: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/39.jpg)
If we know nothing else about the data in the list we’re searching, is there a better way?
12
Data Structures - CSCI 102
Copyright © William C. Cheng
Search
What assumptions would be helpful? What about if we could make assumptions about the data?
By the way, the word "assumption" means that this is what we assume about the data
If the data/input violates the assumption, it can break our algorithm Sometimes, we should check if our assumption is correct before we proceed (of course, this is not free)
![Page 40: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/40.jpg)
Assumption: List elements are sorted in ascending order
13
Data Structures - CSCI 102
Copyright © William C. Cheng
Binary Search
Compare search value to the median and see if the search item is ==, < or >
If search item is equal, return true
Otherwise, cut the list in half and repeat by finding the median value in the valid half of the list
Return false if the value is not found
Ex: Looking up a word in a dictionary
![Page 41: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/41.jpg)
Data Structures - CSCI 102 Binary Search
int binarySearch(const vector<int>& list,
const int& value) { int first=0, last=list.size()-1; while (first <= last) { int mid=(first+last)/2; if (list[mid] == value) { return true; } else if (list[mid] > value) { last = mid-1; } else { first = mid+1;
} }
return false; }
14
Copyright © William C. Cheng
first mid last
![Page 42: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/42.jpg)
What is the best case scenario?
What is the worst case scenario?
Assuming value in the list? What is the average scenario?
Assuming all possible inputs?
15
Data Structures - CSCI 102
Copyright © William C. Cheng
Binary Search
![Page 43: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/43.jpg)
if a = log2 n, then 2 = n therefore, x = log2 2
16 Copyright © William C. Cheng
Data Structures - CSCI 102 Binary Search
log n 1 2 3 4 5 6 7 8 9 10 11 12
n 2 4 8 16 32 64 128 256 512 1024 2048 4096
What is the best case scenario? Value is in the middle of the list = O(1)
What is the worst case scenario?
Value is not in the list = O(log(N)) a x as n grows geometrically/exponentially, log2 n grows linearly the base of logarithm is usually omitted logb n = logx n / logx b for any base x logb n = log2 n / log2 b = c ⋅ log2 n
![Page 44: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/44.jpg)
Value is in the middle of the list = O(1) What is the best case scenario?
What is the worst case scenario? Value is not in the list = O(log(N))
17
Data Structures - CSCI 102
Copyright © William C. Cheng
Binary Search
Assuming value in the list? What is the average scenario?
O(2*log(N)-3) = O(log(N)) Assuming all possible inputs?
O(2*log(N)) = O(log(N))
![Page 45: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/45.jpg)
Arrays What data types does this work for?
18
Data Structures - CSCI 102
Copyright © William C. Cheng
Binary Search
Vectors Linked Lists (will not work)
![Page 46: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/46.jpg)
19
Data Structures - CSCI 102
Copyright © William C. Cheng
Binary Search vs. Linear Search
N
T(N)
Search Function Growth
Linear Search O(N)
Binary Search O(log(N))
![Page 47: CS102 C++ Stacks Queues Prof Tejadastejada/csci102/slides/exam2/stackqueueSearchTej... · CS102 C++ Stacks & Queues Prof Tejada . ... Stack: only ever insert/remove from the front](https://reader034.fdocuments.us/reader034/viewer/2022042801/5ab5e9a37f8b9a1a048d5c2d/html5/thumbnails/47.jpg)
20
Data Structures - CSCI 102
Copyright © William C. Cheng
Stuff to Read Stack Overflow Question: "Plain English explanation of Big O"
http://stackoverflow.com/questions/487258/plain-english- explanation-of-big-o
Check out the accepted answer
Slightly longer version: http://www.cforcoding.com/2009/07/plain-english- explanation-of-big-o.html