CSE373: Data Structures & Algorithms Lecture 4: Dictionaries; Binary Search Trees Hunter Zahn Summer 2016 Summer 2016.

Slides:



Advertisements
Similar presentations
Comp 122, Spring 2004 Binary Search Trees. btrees - 2 Comp 122, Spring 2004 Binary Trees  Recursive definition 1.An empty tree is a binary tree 2.A node.
Advertisements

CSE332: Data Abstractions Lecture 4: Priority Queues Dan Grossman Spring 2010.
CSE332: Data Abstractions Lecture 6: Dictionaries; Binary Search Trees Dan Grossman Spring 2010.
CSE 326: Data Structures Lecture #7 Branching Out Steve Wolfman Winter Quarter 2000.
CSE 326 Binary Search Trees David Kaplan Dept of Computer Science & Engineering Autumn 2001.
CSE 326: Data Structures Binary Search Trees Ben Lerner Summer 2007.
1 abstract containers hierarchical (1 to many) graph (many to many) first ith last sequence/linear (1 to 1) set.
CSE373: Data Structures & Algorithms Lecture 5: Dictionaries; Binary Search Trees Aaron Bauer Winter 2014.
CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees Nicki Dell Spring 2014 CSE373: Data Structures & Algorithms1.
CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees Lauren Milne Summer
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees Nicki Dell Spring 2014 CSE373: Data Structures & Algorithms1.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 223 – Advanced Data Structures Course Review Midterm.
Binary Trees, Binary Search Trees RIZWAN REHMAN CENTRE FOR COMPUTER STUDIES DIBRUGARH UNIVERSITY.
CSE332: Data Abstractions Lecture 6: Dictionaries; Binary Search Trees Tyler Robison Summer
CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees continued Aaron Bauer Winter 2014 CSE373: Data Structures & Algorithms1.
Week 10 - Friday.  What did we talk about last time?  Graph representations  Adjacency matrix  Adjacency lists  Depth first search.
CSE373: Data Structures & Algorithms Lecture 4: Dictionaries; Binary Search Trees Dan Grossman Fall 2013.
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees Linda Shapiro Winter 2015.
Week 15 – Wednesday.  What did we talk about last time?  Review up to Exam 1.
CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees Linda Shapiro Winter 2015.
CSE373: Data Structures & Algorithms Lecture 5: Dictionary ADTs; Binary Trees Lauren Milne Summer 2015.
CSE373: Data Structures & Algorithms Lecture 4: Dictionaries; Binary Search Trees Kevin Quinn Fall 2015.
CSE332: Data Abstractions Lecture 4: Priority Queues Dan Grossman Spring 2012.
BSTs, AVL Trees and Heaps Ezgi Shenqi Bran. What to know about Trees? Height of a tree Length of the longest path from root to a leaf Height of an empty.
CSE373: Data Structures & Algorithms Lecture 8: AVL Trees and Priority Queues Linda Shapiro Spring 2016.
CSE332: Data Abstractions Lecture 7: AVL Trees
CSE373: Data Structures & Algorithms Priority Queues
CSE373: Data Structures & Algorithms Lecture 5: Dictionary ADTs; Binary Trees Linda Shapiro Winter 2015.
CSC317 Selection problem q p r Randomized‐Select(A,p,r,i)
COMP261 Lecture 23 B Trees.
CSE373: Data Structures & Algorithms
Instructor: Lilian de Greef Quarter: Summer 2017
COMP 53 – Week Fourteen Trees.
Week 7 - Friday CS221.
CSE373: Data Structures & Algorithms More Heaps; Dictionaries; Binary Search Trees Riley Porter Winter 2016 Winter 2017.
CSE373: Data Structures & Algorithms Lecture 5: Dictionary ADTs; Binary Trees Linda Shapiro Spring 2016.
Balancing Binary Search Trees
CSE373: Data Structures & Algorithms
CSE373: Data Structures & Algorithms
Binary Search Trees.
CSE373: Data Structures & Algorithms
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees
October 30th – Priority QUeues
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees
Week 11 - Friday CS221.
abstract containers sequence/linear (1 to 1) hierarchical (1 to many)
Cse 373 April 26th – Exam Review.
i206: Lecture 13: Recursion, continued Trees
Binary Search Trees Why this is a useful data structure. Terminology
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees
Binary Trees, Binary Search Trees
Chapter 22 : Binary Trees, AVL Trees, and Priority Queues
Map interface Empty() - return true if the map is empty; else return false Size() - return the number of elements in the map Find(key) - if there is an.
CSE373: Data Structures & Algorithms Lecture 5: Dictionary ADTs; Binary Trees Catie Baker Spring 2015.
CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees
CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees
Instructor: Lilian de Greef Quarter: Summer 2017
Balanced-Trees This presentation shows you the potential problem of unbalanced tree and show two way to fix it This lecture introduces heaps, which are.
CSE332: Data Abstractions Lecture 4: Priority Queues
Heaps and the Heapsort Heaps and priority queues
CSE 332: Data Abstractions Binary Search Trees
CSE373: Data Structures & Algorithms Lecture 5: AVL Trees
Balanced-Trees This presentation shows you the potential problem of unbalanced tree and show two way to fix it This lecture introduces heaps, which are.
CMSC 202 Trees.
CSE 332: Data Abstractions AVL Trees
Binary Trees, Binary Search Trees
BST Insert To insert an element, we essentially do a find( ). When we reach a NULL pointer, we create a new node there. void BST::insert(const Comp &
Binary SearchTrees [CLRS] – Chap 12.
Richard Anderson Spring 2016
Binary Trees, Binary Search Trees
Presentation transcript:

CSE373: Data Structures & Algorithms Lecture 4: Dictionaries; Binary Search Trees Hunter Zahn Summer 2016 Summer 2016

Announcements HW1 due Friday at 11:00pm Summer 2016

Summary of Asymptotic Analysis Analysis can be about: The problem or the algorithm (usually algorithm) Time or space (usually time) Best-, worst-, or average-case (usually worst) Upper-, lower-, or tight-bound (usually upper) The most common thing we will do is give an O upper bound to the worst-case running time of an algorithm. Summer 2016

Addendum: Timing vs. Big-O Summary Examine the algorithm itself, not the implementation Reason about performance as a function of n Keep in mind: for small n, an algorithm with worse asymptotic complexity might be faster n^2 vs 1,000,000n Timing Compare implementations Focus on data sets other than worst case Determine what the constants actually are Summer 2016

Deep breath… So far we’ve covered Coming up…. Simple ADTs: stacks, queues Some math (proof by induction) Algorithm analysis Asymptotic notation (Big-Oh) Coming up…. Many more ADTs! Starting with dictionaries Summer 2016

Where we are Studying the absolutely essential ADTs of computer science and classic data structures for implementing them ADTs so far: Stack: push, pop, isEmpty, … Queue: enqueue, dequeue, isEmpty, … Next: 3. Dictionary (also known as a Map): associate keys with values Extremely common Summer 2016

The Dictionary (a.k.a. Map) ADT 9/12/2018 The Dictionary (a.k.a. Map) ADT Data: set of (key, value) pairs keys must be comparable Operations: insert(key,value) find(key) delete(key) … Stark Arya Lannister Jaime Frey Walder insert(Frey, ….) find(Stark) Arya Will tend to emphasize the keys; don’t forget about the stored values Summer 2016

Comparison: The Set ADT The Set ADT is like a Dictionary without any values A key is present or not (no duplicates) For find, insert, delete, there is little difference In dictionary, values are “just along for the ride” So same data-structure ideas work for dictionaries and sets But if your Set ADT has other important operations this may not hold union, intersection, is_subset Notice these are binary operators on sets binary operation: a rule for combining two objects of a given type, to obtain another object of that type Summer 2016

Dictionary data structures There are many good data structures for (large) dictionaries AVL trees Binary search trees with guaranteed balancing B-Trees Also always balanced, but different and shallower B ≠ Binary; B-Trees generally have large branching factor Hashtables Not tree-like at all Skipping: Other balanced trees (e.g., red-black, splay) But first some applications and less efficient implementations… Summer 2016

A Modest Few Uses Search: inverted indexes, phone directories, … 9/12/2018 A Modest Few Uses Any time you want to store information according to some key and be able to retrieve it efficiently. Lots of programs do that! Search: inverted indexes, phone directories, … Networks: router tables Operating systems: page tables Compilers: symbol tables Databases: dictionaries with other nice properties Biology: genome maps What else? Summer 2016

Simple implementations 9/12/2018 Simple implementations For dictionary with n key/value pairs insert find delete Unsorted linked-list Unsorted array Sorted linked list Sorted array * Unless we need to check for duplicates O(1)* O(n) O(n) O(1)* O(n) O(n) O(n) O(n) O(n) O(n) O(logn) O(n) We’ll see a Binary Search Tree (BST) probably does better, but not in the worst case unless we keep it balanced Summer 2016

Lazy Deletion A general technique for making delete as fast as find: 10 12 24 30 41 42 44 45 50   A general technique for making delete as fast as find: Instead of actually removing the item just mark it deleted Plusses: Simpler Can do removals later in batches If re-added soon thereafter, just unmark the deletion Minuses: Extra space for the “is-it-deleted” flag Data structure full of deleted nodes wastes space find O(log m) time where m is data-structure size (okay) May complicate other operations Summer 2016

Tree Terminology node: an object containing a data value and left/right children root: topmost node of a tree leaf: a node that has no children branch: any internal node (non-root) parent: a node that refers to this one child: a node that this node refers to sibling: a node with a common subtree: the smaller tree of nodes on the left or right of the current node height: length of the longest path from the root to any node (count edges) level or depth: length of the path from a root to a given node 7 6 3 2 1 5 4 root height = 2 Level 0 Level 1 Level 2 Summer 2016

Some tree terms (mostly review) There are many kinds of trees Every binary tree is a tree Every list is kind of a tree (think of “next” as the one child) There are many kinds of binary trees Every binary search tree is a binary tree Later: A binary heap is a different kind of binary tree A tree can be balanced or not A balanced tree with n nodes has a height of O(log n) Different tree data structures have different “balance conditions” to achieve this Summer 2016

Kinds of trees Certain terms define trees with specific structure Binary tree: Each node has at most 2 children (branching factor 2) n-ary tree: Each node has at most n children (branching factor n) Perfect tree: Each row completely full Complete tree: Each row completely full except maybe the bottom row, which is filled from left to right What is the approximate height of a perfect binary tree with n nodes? A complete binary tree? Summer 2016

Tree terms (review?) root(tree) depth(node) leaves(tree) height(tree) B D F C G I H L J M K N root(tree) leaves(tree) children(node) parent(node) siblings(node) ancestors(node) descendents(node) subtree(node) depth(node) height(tree) degree(node) branching factor(tree) Summer 2016

Binary Trees Binary tree is empty or Representation: 9/12/2018 Binary Trees Binary tree is empty or A root (with data) A left subtree (may be empty) A right subtree (may be empty) Representation: A B C D E F Data right pointer left G H For a dictionary, data will include a key and a value I J Summer 2016

Binary Trees: Some Numbers Recall: height of a tree = longest path from root to leaf (count edges) For binary tree of height h: max # of leaves: max # of nodes: min # of leaves: min # of nodes: 2h, for perfect tree 2h+1 – 1, for perfect tree 1, for “line” (?) tree h+1, for “line” (?) tree Summer 2016

Binary Trees: Some Numbers 9/12/2018 Binary Trees: Some Numbers Recall: height of a tree = longest path from root to leaf (count edges) For binary tree of height h: max # of leaves: max # of nodes: min # of leaves: min # of nodes: 2h, for perfect tree 2h 2h+1 – 1, for perfect tree 2(h + 1) - 1 1 1, for “list” tree h + 1 h+1, for “list” tree For n nodes, we cannot do better than O(log n) height, and we want to avoid O(n) height Summer 2016

Calculating height What is the height of a tree with root root? int treeHeight(Node root) { ??? } Summer 2016

Calculating height What is the height of a tree with root root? int treeHeight(Node root) { if(root == null) return -1; return 1 + max(treeHeight(root.left), treeHeight(root.right)); } Running time for tree with n nodes: O(n) – single pass over tree Note: non-recursive is painful – need your own stack of pending nodes; much easier to use recursion’s call stack Summer 2016

9/12/2018 Tree Traversals A traversal is an order for visiting all the nodes of a tree Pre-order: root, left subtree, right subtree In-order: left subtree, root, right subtree Post-order: left subtree, right subtree, root + * 2 4 5 (an expression tree) Summer 2016

9/12/2018 Tree Traversals A traversal is an order for visiting all the nodes of a tree Pre-order: root, left subtree, right subtree + * 2 4 5 In-order: left subtree, root, right subtree 2 * 4 + 5 Post-order: left subtree, right subtree, root 2 4 * 5 + + * 2 4 5 (an expression tree) Summer 2016

More on traversals void inOrderTraversal(Node t){ if(t != null) { 9/12/2018 More on traversals void inOrderTraversal(Node t){ if(t != null) { inOrderTraversal(t.left); process(t.element); inOrderTraversal(t.right); } A B C D E F G A B D E C F G Sometimes order doesn’t matter Example: sum all elements Sometimes order matters Example: print tree with parent above indented children (pre-order) Example: evaluate an expression tree (post-order) Summer 2016

Binary Search Tree Structure property (“binary”) Order property 9/12/2018 Binary Search Tree Structure property (“binary”) Each node has  2 children Result: keeps operations simple Order property All keys in left subtree smaller than node’s key All keys in right subtree larger than node’s key Result: easy to find any given key 4 12 10 6 2 11 5 8 14 13 7 9 Summer 2016

All children must obey order 9/12/2018 Are these BSTs? 5 8 4 8 5 11 1 7 11 2 7 6 10 18 3 4 All children must obey order 15 20 21 Summer 2016

All children must obey order 9/12/2018 Are these BSTs? 5 8 4 8 5 11 1 7 11 2 7 6 10 18 3 4 All children must obey order 15 20 21 Summer 2016

Find in BST, Recursive int find(Key key, Node root){ if(root == null) 9/12/2018 Find in BST, Recursive 12 int find(Key key, Node root){ if(root == null) return null; if(key < root.key) return find(key,root.left); if(key > root.key) return find(key,root.right); return root.data; } 5 15 2 9 20 7 10 17 30 Summer 2016

Find in BST, Iterative 12 int find(Key key, Node root){ 9/12/2018 Find in BST, Iterative 12 int find(Key key, Node root){ while(root != null && root.key != key){ if(key < root.key) root = root.left; else(key > root.key) root = root.right; } if(root == null) return null; return root.data; 5 15 2 9 20 7 10 17 30 Summer 2016

Other “Finding” Operations 9/12/2018 Other “Finding” Operations Find minimum node Find maximum node Find predecessor of a non-leaf Find successor of a non-leaf Find predecessor of a leaf Find successor of a leaf 12 5 15 2 9 20 7 10 17 30 Summer 2016

Insert in BST 12 insert(13) insert(8) insert(31) 5 15 2 9 13 20 9/12/2018 Insert in BST 12 insert(13) insert(8) insert(31) 5 15 2 9 13 20 (New) insertions happen only at leaves – easy! 7 10 17 30 8 31 Summer 2016

9/12/2018 Deletion in BST 12 5 15 2 9 20 7 10 17 30 Why might deletion be harder than insertion? Summer 2016

Deletion Removing an item disrupts the tree structure 9/12/2018 Deletion Removing an item disrupts the tree structure Basic idea: find the node to be removed, then “fix” the tree so that it is still a binary search tree Three cases: Node has no children (leaf) Node has one child Node has two children Summer 2016

Deletion – The Leaf Case 9/12/2018 Deletion – The Leaf Case delete(17) 12 5 15 2 9 20 7 10 17 30 Summer 2016

Deletion – The One Child Case 9/12/2018 Deletion – The One Child Case delete(15) 12 5 15 2 9 20 7 10 30 Summer 2016

Deletion – The Two Child Case 9/12/2018 Deletion – The Two Child Case 12 delete(5) 5 20 2 9 30 7 10 A value guaranteed to be between the two subtrees! succ from right subtree - pred from left subtree What can we replace 5 with? Summer 2016

Deletion – The Two Child Case 9/12/2018 Deletion – The Two Child Case Idea: Replace the deleted node with a value guaranteed to be between the two child subtrees Options: successor from right subtree: findMin(node.right) predecessor from left subtree: findMax(node.left) These are the easy cases of predecessor/successor Now delete the original node containing successor or predecessor Leaf or one child case – easy cases of delete! Summer 2016

Lazy Deletion Lazy deletion can work well for a BST But Simpler Can do “real deletions” later as a batch Some inserts can just “undelete” a tree node But Can waste space and slow down find operations Make some operations more complicated: How would you change findMin and findMax? Summer 2016

BuildTree for BST Let’s consider buildTree 9/12/2018 BuildTree for BST Let’s consider buildTree Insert all, starting from an empty tree Insert keys 1, 2, 3, 4, 5, 6, 7, 8, 9 into an empty BST If inserted in given order, what is the tree? What big-O runtime for this kind of sorted input? Is inserting in the reverse order any better? 1 2 3 Θ(n2) O(n2) Not a happy place Summer 2016 Θ(n2)

O(n log n), definitely better 9/12/2018 BuildTree for BST Insert keys 1, 2, 3, 4, 5, 6, 7, 8, 9 into an empty BST What we if could somehow re-arrange them median first, then left median, right median, etc. 5, 3, 7, 2, 1, 4, 8, 6, 9 What tree does that give us? What big-O runtime? 5 3 7 2 4 6 8 1 9 O(n log n), definitely better 5, 3, 7, 2, 1, 6, 8, 9 better: n log n Summer 2016

9/12/2018 Unbalanced BST Balancing a tree at build time is insufficient, as sequences of operations can eventually transform that carefully balanced tree into the dreaded list At that point, everything is O(n) and nobody is happy find insert delete 1 2 3 Summer 2016

Balanced BST Observation BST: the shallower the better! 9/12/2018 Balanced BST Observation BST: the shallower the better! For a BST with n nodes inserted in arbitrary order Average height is O(log n) – see text for proof Worst case height is O(n) Simple cases, such as inserting in key order, lead to the worst-case scenario Solution: Require a Balance Condition that Ensures depth is always O(log n) – strong enough! Is efficient to maintain – not too strong! Summer 2016

Potential Balance Conditions 9/12/2018 Potential Balance Conditions Left and right subtrees of the root have equal number of nodes 2. Left and right subtrees of the root have equal height Too weak! Height mismatch example: Too weak! Double chain example: Summer 2016

Potential Balance Conditions 9/12/2018 Potential Balance Conditions Left and right subtrees of every node have equal number of nodes Left and right subtrees of every node have equal height Too strong! Only perfect trees (2n – 1 nodes) Too strong! Only perfect trees (2n – 1 nodes) Summer 2016

The AVL Balance Condition Adelson-Velskii and Landis The AVL Balance Condition Left and right subtrees of every node have heights differing by at most 1 Definition: balance(node) = height(node.left) – height(node.right) AVL property: for every node x, –1  balance(x)  1 Ensures small depth Will prove this by showing that an AVL tree of height h must have a number of nodes exponential in h Efficient to maintain Using single and double rotations Summer 2016