Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| courses:cs211:winter2018:journals:patelk:chapter2 [2018/01/19 18:45] – [Personal Thoughts] patelk | courses:cs211:winter2018:journals:patelk:chapter2 [2018/01/28 20:18] (current) – [2.5 A More Complex Data Structure: Priority Queues] patelk | ||
|---|---|---|---|
| Line 211: | Line 211: | ||
| Readability: | Readability: | ||
| Interesting: | Interesting: | ||
| + | |||
| + | |||
| + | ===== 2.5 A More Complex Data Structure: Priority Queues ===== | ||
| + | |||
| + | **The Problem** | ||
| + | * Priority Queue: Elements have a priority value (key), and each time we need to select an element from S, we want to take the one with highest priority. | ||
| + | - Set of elements S | ||
| + | - Smaller keys represent higher priority | ||
| + | * Good for processing real-time events such as the scheduling of processes on a computer | ||
| + | * Priority Queue Operations: any sequence of priority queue operations that results in the sorting of n numbers -> **O(nlogn)** | ||
| + | |||
| + | **A Data Structure for Implementing a Priority Queue** | ||
| + | |||
| + | * List: have a pointer to the min; adding new elements is easy, but extracting the minimum requires O(n) scan to find the new minimum | ||
| + | * Sorted Array: binary search to find position of insertion + shifting all elements -> O(nlogn) | ||
| + | * Sorted Doubly Linked List: insertions are O(1), but O(n) to find position of insertion | ||
| + | |||
| + | __The Heap:__ balanced binary tree; root + nodes with up to two children; key of any element is at least as large as the key of the parent node | ||
| + | |||
| + | * For a heap with bound N, we can use an array | ||
| + | * H[1] is the root | ||
| + | * leftChild(i) = 2i | ||
| + | * rightChild(i) = 2i+1 | ||
| + | |||
| + | |||
| + | **Implementing the Heap Operations** | ||
| + | |||
| + | * Identifying Minimal Element: **O(1)** | ||
| + | * Adding an Element: add element to the final position, then perform heapify-up recursively -> **O(logn)** | ||
| + | |||
| + | {{: | ||
| + | |||
| + | * Deleting an Element: move element w in position n to position i; key of element w may either be too small or too bit -> **O(logn)** | ||
| + | * * If key is too small: use heapify-up to reestablish order | ||
| + | * * If key is too large: use heapify-down to sway the element with one of its children | ||
| + | |||
| + | {{: | ||
| + | |||
| + | **Implementing Priority Queues with Heaps** | ||
| + | * __StartHeap(N): | ||
| + | * __Insert(H, | ||
| + | * __FindMin(H): | ||
| + | * __Delete(H, | ||
| + | * __ExtractMin(H): | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ==== Personal Thoughts ==== | ||
| + | |||
| + | This section was pretty straightforward and easy to follow. I think going over the concepts in class before reading this section of the textbook was helpful in clarifying things that maybe would have been otherwise confusing. I appreciated the summary of the operation run times as these can sometimes be difficult to recall. | ||
| + | Readability: | ||
| + | Interesting: | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
