Logic Programming Lecture 3: Recursion, lists, and data structures.
Lecture 8 - Recursion II
Transcript of Lecture 8 - Recursion II
![Page 1: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/1.jpg)
Data Structures & Advanced Programming 1Williams College CSCI 136
Lecture 8
● Lists of Strings○ Binary Strings○ Combinations
● Catalan numbers○ Formulae○ Inductive Proof
● Fractals● Lab 2 — Preview
Recursion II
![Page 2: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/2.jpg)
Data Structures & Advanced Programming 2Williams College CSCI 136
Lists of Strings
![Page 3: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/3.jpg)
Data Structures & Advanced Programming 3Williams College CSCI 136
We’ll continue our investigation of recursive functions by printing out lists of strings.● All binary strings of length n. There are 2n such strings.● All (s, t)-combinations, which are binary strings with s copies of 0 and t copies of 1.
We’ll print the strings in numeric order, which is equivalent to alphabetical order (as in a dictionary). It is also known as lexicographic order and it has a simple recursive definition (0s before 1s).
A program for listing binary strings is provided online as Binary.java.Then we’ll write a new file Combo.java for listing combinations.
(s,t)-combinations for s = 2 and t = 3.Binary strings of length n = 3.
Lists of Strings
000001010011100101110111
00111010110110101110100111010110110110011101011100
How many (s,t)-combinations
are there?
![Page 4: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/4.jpg)
Data Structures & Advanced Programming 4Williams College CSCI 136
0
000001010011100101110111
Viewing the lexicographic order of binary strings of length n = 3 as a tree.● The root is the empty string 𝝐 on the left.● Each layer branches in two ways, with 0s coming before 1s.● Paths from the root build up the prefix for the strings that appear in the list.
For example, all of the strings with prefix 10 appear to the right of the highlighted path.
0
1
1
1
0
0
1
1
0
0
1
10
𝝐
![Page 5: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/5.jpg)
Data Structures & Advanced Programming 5Williams College CSCI 136
Printing out all binary strings of length n in lexicographic order using Binary.java. In other words, all the strings starting with 0 come before those starting with 1, recursively.● We’ll consider iterative approaches later in the course.● What is the total for a given value of n? How can we test our code internally?
![Page 6: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/6.jpg)
Data Structures & Advanced Programming 6Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
prefix = 00 prefix = 000
prefix = 001
prefix = 01
![Page 7: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/7.jpg)
Data Structures & Advanced Programming 7Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐
![Page 8: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/8.jpg)
Data Structures & Advanced Programming 8Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
![Page 9: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/9.jpg)
Data Structures & Advanced Programming 9Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
![Page 10: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/10.jpg)
Data Structures & Advanced Programming 10Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
prefix = 00
![Page 11: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/11.jpg)
Data Structures & Advanced Programming 11Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
prefix = 00 prefix = 000
![Page 12: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/12.jpg)
Data Structures & Advanced Programming 12Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
prefix = 00
![Page 13: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/13.jpg)
Data Structures & Advanced Programming 13Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
prefix = 00
prefix = 001
![Page 14: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/14.jpg)
Data Structures & Advanced Programming 14Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
prefix = 00
![Page 15: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/15.jpg)
Data Structures & Advanced Programming 15Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
![Page 16: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/16.jpg)
Data Structures & Advanced Programming 16Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
prefix = 01
![Page 17: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/17.jpg)
Data Structures & Advanced Programming 17Williams College CSCI 136
0
000001010011100101110111
When printAllBinary calls its, the new instance of it is put on the top of the call stack. The evolution of the call stack is shown above, along with the value of the prefix parameter.(Add animations with class participation.)
0
1
1
1
0
0
1
1
0
0
1
10
𝝐 prefix = 𝝐
prefix = 0
prefix = 01 etc
![Page 18: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/18.jpg)
Data Structures & Advanced Programming 18Williams College CSCI 136
Updating Binary.java with an assertion to test the number generated.
![Page 19: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/19.jpg)
Data Structures & Advanced Programming 19Williams College CSCI 136
1
00111010110110101110100111010110110110011101011100
Viewing the lexicographic order of (s,t)-combinations with s = 2 and t = 3 as a tree.Notice that the nodes in this tree don’t always have two branches. Why?
0
1
1
1
0
0
0
1
1
1
1
10
𝝐
00
1110
101
0
1
0
1
0
101
01
![Page 20: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/20.jpg)
Data Structures & Advanced Programming 20Williams College CSCI 136
Using Binary.java as a basis, complete the file Combo.java.
Start by talking with your neighbor. Then we’ll discuss this as a group.Finally, you’ll have time to write your own version.
Activity: Completing Combo.java
Discuss your ideas with a neighbor for 3 minutes.Then you’ll have time to try writing Combo.java.
● What are your base cases?● How many (s,t)-combinations are there?
![Page 21: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/21.jpg)
Data Structures & Advanced Programming 21Williams College CSCI 136
![Page 22: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/22.jpg)
Data Structures & Advanced Programming 22Williams College CSCI 136
Catalan Numbers
![Page 23: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/23.jpg)
Data Structures & Advanced Programming 23Williams College CSCI 136
Number of Triangulations of Convex PolygonsLet C(n) be the nth Catalan number. The Catalan sequence starting with n = 0 is OEIS 108:
1, 1, 2, 5, 14, 42, 132, 429, 1430, … Theorem: The number of different triangulations of a convex polygon with n vertices is C(n-3).
The Catalan numbers come up frequently in computer science.● C(n) is the number of binary trees with n internal nodes.● C(n) is the number of balanced parentheses strings of length 2n.
For example, when n = 3, the five such strings are ( ( ( ) ) ), ( ( ) ( ) ), ( ( ) ) ( ), ( ) ( ( ) ), ( ) ( ) ( ).
The triangulations of a heptagon with n = 7 vertices.There are a total of C(4) = 42 such triangulations.
![Page 24: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/24.jpg)
Data Structures & Advanced Programming 24Williams College CSCI 136
A string of parentheses (e.g. “(“ and “)” is balanced or well-formed or properly nested if the following two properties hold.1. There are n copies of “(“ and n copies of “)”
for some n.2. No prefix contains more “(“ than “)”.
For example, the balanced parentheses with n = 3 pairs are as follows:
((())) ()(()) ()()() (())() (()())
These strings are often represented in binary.111000 101100 101010 110010 110100
Balanced parentheses of length 2n are counted by the Catalan numbers.
These numbers also count hundreds of other important mathematical objects.● Binary trees with n internal nodes.● Diagonalizations of n+3-gons.
Balanced Parentheses
![Page 25: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/25.jpg)
Data Structures & Advanced Programming 25Williams College CSCI 136
Formulae
![Page 26: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/26.jpg)
Data Structures & Advanced Programming 26Williams College CSCI 136
There are several different formulae for Catalan numbers.
The top formulae are closed form
Catalan Formulae
Which formula would you use?● Are there any numeric issues?● What about efficiency?● Which formula is recursive?
![Page 27: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/27.jpg)
Data Structures & Advanced Programming 27Williams College CSCI 136
Inductive Proofs
![Page 28: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/28.jpg)
Data Structures & Advanced Programming 28Williams College CSCI 136
Consider the following situation.● The first person in the line (i.e., the person on the left) is named Oscar.● If the ith person in line is named Oscar, then the (i+1)st person is named Oscar.
What can we conclude? Why?Consider variations of the above points, and what we can conclude.
…
![Page 29: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/29.jpg)
Data Structures & Advanced Programming 29Williams College CSCI 136
Consider the sum of the first n odd numbers starting from 1.● n = 1. The sum is 1.● n = 2. The sum is 1 + 3 = 4.● n = 3. The sum is 1 + 3 + 5 = 9. ● n = 4. The sum is 1 + 3 + 5 + 7 = 16.
Do you notice a pattern?It looks like the sum is n2.
Sum of Odd Numbers
![Page 30: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/30.jpg)
Data Structures & Advanced Programming 30Williams College CSCI 136
Let S(n) be the sum of the first n odd numbers starting from 1. That is, S(n) = 1 + 3 + … + 2n-1.Theorem: S(n) = n2 for all n ≥ 1.Proof: We will prove that the statement is true by mathematical induction on n.Base Case: n = 1. In this case, S(1) = 1 is the sum of the first 1 odd number starting from 1.The statement of the theorem claims S(1) equals 12 = 1. This is true, so the base case is true.Inductive Assumption: Assume that the statement is true for some k where k ≥ 1.Inductive Conclusion: Now we must prove that the statement is true for n = k + 1.The sum of the first k+1 odd numbers starting from 1 is
S(k+1) = 1 + 3 + … + 2(k+1)-1 = S(k) + 2(k+1)-1.By the inductive assumption, S(k) = k2. Therefore, we can substitute in this value and continue.
= k2 + 2(k+1)-1 = k2 + 2k + 2 - 1 = k2 + 2k + 1 = (k+1)2.Therefore, S(k+1) = (k+1)2. This proves that the statement is true for n = k + 1.Therefore, by the principles of mathematical induction, the theorem is true for all n ≥ 1.
Proof by Induction
This is about the level of difficulty for an inductive
proof in this course.
![Page 31: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/31.jpg)
Data Structures & Advanced Programming 31Williams College CSCI 136
Theorem: The number of triangulations of a convex polygon with n vertices is Cn-3 for all n ≥ 3. Counting Triangulations
The idea of the proof is illustrated above.The top line must be part of a triangle (in orange).
Once this triangle is chosen, the problem is broken into two subproblems that are solved independently.
Establishthat we assume
truth for all smaller cases.
Note: The following inductive proof is more difficult than a standard CSCI 136 proof, and
is more in line with CSCI 256.
![Page 32: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/32.jpg)
Data Structures & Advanced Programming 32Williams College CSCI 136
Theorem: The number of triangulations of a convex polygon with n vertices is Cn-2 for all n ≥ 2. Inductive Proof
Proof: We will prove the theorem’s statement is true for all n ≥ 2 by induction on n.● Base Case: n=2. The convex polygon is a line, which we consider to have 1 triangulation. The statement says that
there are C2-2 = C2-2 = C0 = 1 triangulations. Therefore, the statement is true for this base case.Base Case: n=3. The convex polygon is a triangle, so it has 1 triangulation. The statement says that there are Cn-2 = C3-2 = C1 = 1 triangulations. Therefore, the statement is true for this base case.
● Inductive Assumption: Assume that the statement is true for all n satisfying 2 ≤ n ≤ k for a specific k ≥ 3.In other words, we assume that the theorem’s statement is true for n = 3, 4, …, k for some value of k ≥ 3.
● Inductive Conclusion: Consider the statement for n = k + 1 where k ≥ 3. The convex polygon has k+1 sides and k+1 ≥ 4. In each triangulation of this polygon, the top line is included in a triangle in k-1 different ways. The other two lines of this triangle divide the polygon into two convex polygons. If the left polygon has i sides where i ≥ 2, then the right polygon has k - i sides. (Shown above: The k = 7 case. A triangle splits the k+1-sided polygon into left and right in all possible k-1 = 6 ways.) By induction, the left polygon can be triangulated in Ci-2 ways, and the right can be triangulated in Ck+2-i ways. The two triangulations are independent, so this gives a total of Ci-2 · Ck+2-i triangulations when the left has i sides. Summing over all i = 2, 3, …, k-1 gives the recursive formula with the summation shown above. Therefore, the statement is true for n = k+1.
Therefore, by the principles of mathematical induction, the statement is true for all n ≥ 2.
EstablishThis is strong induction meaning
that we assume truth for all
smaller cases.
![Page 33: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/33.jpg)
Data Structures & Advanced Programming 33Williams College CSCI 136
How can you prove that the binary trees with n nodes are enumerated by the Catalan numbers? Activity: The Number of Binary Trees
Discuss your ideas with a neighbor for 3 minutes.Then we’ll discuss it as a group.
● What is the statement of the theorem? ● What are your base cases?● What is your inductive assumption?● How do you handle the inductive conclusion?
Hint: Try to do something similar to the triangulations proof.
![Page 34: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/34.jpg)
Data Structures & Advanced Programming 34Williams College CSCI 136
Fractals
![Page 35: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/35.jpg)
Data Structures & Advanced Programming 35Williams College CSCI 136
Fractals often have recursive definitions.Fractals
![Page 36: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/36.jpg)
Data Structures & Advanced Programming 36Williams College CSCI 136
Provide recursive definitions for each row.
![Page 37: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/37.jpg)
Data Structures & Advanced Programming 37Williams College CSCI 136
Lab 2 — Preview
![Page 38: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/38.jpg)
Data Structures & Advanced Programming 38Williams College CSCI 136
In Lab 2 you will implement a handful (or more) functions recursively.● You will also provide test functions that help ensure that your implementation is correct.
You won’t print out the results, but rather check that no assertions are triggered.
![Page 39: Lecture 8 - Recursion II](https://reader030.fdocuments.net/reader030/viewer/2022012420/61750218ecb3f010f77b702f/html5/thumbnails/39.jpg)
Data Structures & Advanced Programming 39Williams College CSCI 136
A sample question from the lab.