Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan [email protected]...
Transcript of Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan [email protected]...
![Page 1: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/1.jpg)
Compsci 201Binary Trees
Recurrence Relations
Owen Astrachan [email protected] 24, 2018
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1
![Page 2: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/2.jpg)
O is for …
• Object Oriented• Programming with inheritance and classes
• Open Source• Copyright meets the Creative Commons
• O-Notation• Measuring in the limit
10/24/2018Compsci 201, Fall 2018, Trees +
Recurrences2
![Page 3: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/3.jpg)
Plan for Today
• Binary Trees, Binary Search Trees• APTs, Recursion• Trees in Context: TreeSet
• Comparable: from trees to sorting• How to compare one thing to another
• Recurrence Relations• Measuring recursive algorithms/functions
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 3
![Page 4: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/4.jpg)
Motivation for Trees• HashSet and HashMap are O(1) average• Astonishing! Search, insert, delete• No order for keys, sometimes order matters• Worst-case? Everything in same locker/bucket
• Just in case? Use a tree in that locker/bucket
• Search Trees: TreeSet and TreeMap• O(log N) no matter what, average and worst• "Alphabetical" order and range queries
• Find all keys in range [low,high] efficiently
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 4
![Page 5: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/5.jpg)
Why Trees are O(log N)
• With each query: eliminate half of tree• 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1
• Can ensure trees are balanced: TreeSet/TreeMap• Re-balance on add or delete
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 5
![Page 6: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/6.jpg)
Java-isms for comparing
• We can compare int, double, char• Using ==, and !=, and <, <=, >, >=• Can write true != false, but not true > false
• Cannot write "apple" < "zebra"• Must compare objects using specific method• Objects must be comparable, that is they must
implement the Comparable interface
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 6
![Page 7: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/7.jpg)
Strings are Comparable
• Compare strings lexicographically, natural ordering, dictionary order
• “zebra” > “aardvark” but “Zebra” < “aardvark”
• Conceptual, cannot use < or > or ==
• "yak".compareTo(s) returns < 0, == 0, > 0
• s is “zebra”, “yak”, and “toad”, respectively
• The int convention also used in C++, C, others
9/20/17Compsci 201, Fall 2017,
Compare+Analysis7
![Page 8: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/8.jpg)
Not Everything is Comparable
9/20/17Compsci 201, Fall 2017,
Compare+Analysis8
![Page 9: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/9.jpg)
Comparable in Java?
• String implements Comparable<String>"hello".compareTo("goodbye")
• Integer implements Comparable<Integer>new Integer(5).compareTo(new Integer(6))
• Cannot compare ArrayLists or arrays
• Note: .equals works for ArrayList, not arrays
10/24/2018Compsci 201, Fall 2018, Trees +
Recurrences9
![Page 10: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/10.jpg)
Don't do this at home: (x,y) < (z,w)
• Can we compare Point objects?
• http://stackoverflow.com/questions/5178092/sorting-a-list-of-points-with-java
• Let's look at the Java code that makes a Point comparable to another Point
• Point implements Comparable<Point>• public int compareTo(Point other)
9/20/17Compsci 201, Fall 2017,
Compare+Analysis10
![Page 11: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/11.jpg)
Build on What You Know
• How does .equals work?• Make sure you have the correct type• Cast, compare
9/20/17 Compsci 201, Fall 2017, Compare+Analysis 11
public boolean equals(Object o) {if (o == null || ! (o instanceof Point)) {
return false;}Point p = (Point) o;return p.x == x && p.y == y;
}
![Page 12: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/12.jpg)
Extend what you know
• This is method in Point class
Point implements Comparable<Point>
9/20/17Compsci 201, Fall 2017,
Compare+Analysis12
public int compareTo(Point p) {if (this.x < p.x) return -1;if (this.x > p.x) return 1;// what must be true here?if (this.y < p.y) return -1;if (this.y > p.y) return 1return 0;
}
![Page 13: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/13.jpg)
Useful math trick: Faster? Care?
●Use subtraction to help with return valueshttp://stackoverflow.com/questions/2654839/rounding-a-double-to-turn-it-into-
an-int-java
public int compareTo(Point p) {int deltaX = (int) Math.round(x – p.x);int deltaY = (int) Math.round(y – p.y);if (deltaX == 0) return deltaY;return deltaX;
}
![Page 14: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/14.jpg)
Comparable Elements
• TreeSet<String>, TreeMap<String,Anything>• Tree elements must be comparable• Must implement Comparable<..>
• It's possible to supply a Comparator, later
• Arrays.sort, Collections.sort• What algorithm is used in sorting?
• Can change order of sort: Comparator, later
9/20/17Compsci 201, Fall 2017,
Compare+Analysis14
![Page 15: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/15.jpg)
Jan Cuny
11/3/17Compsci 201, Fall 2017, Tree and
Tradoffs15
Program officer at National Science Foundation (NSF) Leading #CSforAll initiatives.
2009 ABI Woman of Vision Award for Social Impact, 2016 Distinguished Educator Award
“All of today’s kids will need – along with reading, writing, and arithmetic – a basic understanding of computation and the role it plays across a wide range of disciplines.”
![Page 16: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/16.jpg)
From Recursion to Recurrence
• Base case for trees: empty tree and maybe leaf
• if (t == null) or• if (t.left == null && t.right == null)
• Make recursive calls on subtrees
• Use results to create return value
• Solve for one node, recursion does the rest
10/24/2018Compsci 201, Fall 2018, Trees +
Recurrences16
![Page 17: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/17.jpg)
Tree function: Tree height
• Compute tree height (longest root-to-leaf path)
int height(Tree root) {if (root == null) return 0;else {return 1 + Math.max(height(root.left),
height(root.right));}
}
• Find height of left subtree, height of right subtree
• Use results to determine height of tree
10/24/2018Compsci 201, Fall 2018, Trees +
Recurrences17
![Page 18: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/18.jpg)
Complexity/Efficiency• Intuitively: visit every node once for height: O(N)• How can we analyze this mathematically?
• Write a recurrence relation describing runtime• Eventually we will solve, but for now? Write
• Let T(n) be time for height to run on n-node tree• Then T(0) = O(1)• Then T(n) = O(1) + 2*T(n/2)balanced tree
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 18
![Page 19: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/19.jpg)
Balanced Trees and Complexity• A tree is height-balanced if
• Left and right subtrees are height-balanced
• Left and right heights differ by at most one
• Which trees are balanced?
![Page 20: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/20.jpg)
Balanced Trees and Complexity• A tree is height-balanced if
• Left and right subtrees are height-balanced
• Left and right heights differ by at most one
public boolean isBalanced(Tree root){if (root == null) return true;int lh = height(root.left);int rh = height(root.right);
return isBalanced(root.left) && isBalanced(root.right) &&Math.abs(lh - rh) <= 1;
}
![Page 21: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/21.jpg)
Complexity of isBalanced
• We know that height(root) is O(N) for N-node tree• Recurrence is T(N) = 2T(N/2) + O(1)
• Recurrence for isBalanced (average case)• T(N) is time for isBalanced on N-node tree• Call height twice: O(N), each tree N/2 nodes• Make two recursive calls 2T(N/2)
• Recurrence: T(N) = 2T(N/2) + O(N)
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 21
![Page 22: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/22.jpg)
Solve recurrence• T(n) is time for isBalanced to run on n-node tree• T(n) = 2T(n/2) + n• = 2 [2(T(n/4) + n/2] + n• = 4T(n/4) + n + n = 4T(n/4) + 2n• = 4 [2T(n/8) + n/4] + 2n• = 8T(n/8) + 3n• = 2kT(n/2k) + kn Eureka!
• Holds n = 1, 2, … Let n = 2k, so k=log2 n• = nT(1) + n log(n)
• We now have solution to recurrence!• O(n log n) -- base 2, but base doesn't matter
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 22
![Page 23: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/23.jpg)
Recurrence Relations
Recurrence Algorithm SolutionT(n) = T(n/2) + O(1) binary search O(log n)
T(n) = T(n-1) + O(1) sequential search O(n)
T(n) = 2T(n/2) + O(1) tree traversal O(n)
T(n) = T(n/2) + O(n) quicksort partition O(n)
T(n) = 2T(n/2) + O(n) mergesort, quicksort O(n log n)
T(n) = T(n-1) + O(n) selection or bubble sort O(n2)
10/24/2018Compsci 201, Fall 2018, Trees +
Recurrences23
No need to derive, remember or look up
![Page 24: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/24.jpg)
WOTO
http://bit.ly/201fall18-oct24-recur
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 24
![Page 25: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/25.jpg)
Tree APTs
• Must include TreeNode class in project src• Similar to ListNode, not submitted as code
• Helper method often useful: add a parameter• Can be ArrayList<.> or String or …
• For running/testing outside of APT system?• Create tree using code in class folder• https://github.com/astrachano/classcode201fall18/
blob/master/src/TreeDemo.java
10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 25
![Page 26: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/26.jpg)
LeafSum:
• https://www2.cs.duke.edu/csed/newapt/leafsum.html• Sum all the values in leaves of tree• Base cases?• Recursive calls?
• What should big-Oh be?• N-node tree?• Visit each node ….• Balanced or stringy …• Similar to tree height
![Page 27: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/27.jpg)
LeafSum correct?
• What do we do with null tree? Why?
• From base-case to combining recursive calls
• Recurrence expression?
11/3/17Compsci 201, Fall 2017, Tree and
Tradoffs27
public class LeafSum {public int sum(TreeNode t) {
if (t == null) return 0;// something is missing here!return sum(t.left) + sum(t.right);
}}
![Page 28: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/28.jpg)
LeafSum Now Correct!
• What do we do with a leaf, why?• Why else isn’t needed, but ok• Why this is still O(n) for ALL TREES!
11/3/17 Compsci 201, Fall 2017, Tree and Tradoffs 28
public class LeafSum {public int sum(TreeNode t) {
if (t == null) return 0;if (t.left == null &&
t.right == null) return t.info;
return sum(t.left) + sum(t.right);}
}
![Page 29: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/29.jpg)
AllPaths
• https://www2.cs.duke.edu/csed/newapt/allpaths.html
• Use instance variable or parameter to helper
• Path is parameter to helper method
• Invariant: path from root to current node
10/24/2018Compsci 201, Fall 2018, Trees +
Recurrences29
![Page 30: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/30.jpg)
Administrivia
• Looking at calendar: what's coming
• Assignments, APTs, APT quizzes
• APT Quiz1 Redux (system or performance issues)
• Saturday-Monday
• Final exam reminder
• Changes not happening
10/24/2018Compsci 201, Fall 2018, Trees +
Recurrences30
![Page 31: Compsci201 Binary Trees Recurrence Relations · Recurrence Relations Owen Astrachan ola@cs.duke.edu October 24, 2018 10/24/2018 Compsci 201, Fall 2018, Trees + Recurrences 1. ...](https://reader034.fdocuments.us/reader034/viewer/2022042612/5f5e40c20eca6058c5082b0d/html5/thumbnails/31.jpg)
Using TreeNode internally
• LinkedList class used doubly-linked list
• TreeSet and TreeMap use balanced tree
• https://github.com/astrachano/diyad-treestuff
• Source code: Balanced Red/Black tree where nodes have left, right, parent pointer
• http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/TreeMap.java
10/24/2018Compsci 201, Fall 2018, Trees +
Recurrences31