1 / 35

Chapter 3 - 1

Chapter 3 - 1. Construction Techniques. Section 3.1 Inductively Defined Sets. To define a set S inductively is to do three things: Basis: Specify one or more elements of S. Induction: Specify one or more rules to construct elements of S from existing elements of S.

milly
Download Presentation

Chapter 3 - 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 3 - 1 Construction Techniques

  2. Section 3.1 Inductively Defined Sets • To define a set S inductively is to do three things: • Basis: Specify one or more elements of S. • Induction: Specify one or more rules to construct elements of S from existing elements of S. • Closure: Specify that no other elements are in S (always assumed). • Note: The basis elements and the induction rules are called constructors.

  3. Example 1 • Find an inductive definition for S = {3, 16, 29, 42, …}. • Solution: Basis: 3 ∈ S. Induction: If x ∈ S then x + 13 ∈ S. • The constructors are 3 and the operation of adding 13. • Also, without closure, many sets would satisfy the basis and induction rule. e.g., 3 ∈ Z and x ∈ Z implies x + 13 ∈ Z.

  4. Example 2 • Find an inductive definition for S = {3, 4, 5, 8, 9, 12, 16, 17, 20, 24, 33,…}. • Solution: To simplify things we might try to “divide and conquer” by writing S as the union of more familiar sets as follows: S = {3, 5, 9, 17, 33, …} ⋃ {4, 8, 12, 16, 20, 24, …}. • Basis: 3, 4 ∈ S. • Induction: If x ∈ S then (if x is odd then 2x – 1 ∈ S else x + 4 ∈ S).

  5. Example 3 • Describe the set S defined inductively as follows: • Basis: 2 ∈ S; • Induction: x ∈ S implies x ± 3 ∈ S. • Solution: S = {2, 5, 8, 11, … } ⋃ {–1, –4, –7, –10, … }.

  6. Example 4 • Find an inductive definition for S = {٨, ac, aacc, aaaccc, …} = {ancn | n ∈ N}. • Solution: Basis: ٨∈ S. Induction: If x ∈ S then axc ∈ S.

  7. Example 5 • Find an inductive definition for S = {an+1bcn | n ∈ N}. • Solution: Basis: ab ∈ S. • Induction: If x ∈ S then axc ∈ S.

  8. Example 6 • Describe the set S defined by: • Basis: a, b ∈ S • Induction: x ∈ S implies ƒ(x) ∈ S. • Solution: S = {a, ƒ(a), ƒ(ƒ(a)), …} ⋃ {b, ƒ(b), ƒ(ƒ(b)), …}, which could also be written as S = {ƒn(a) | n ∈ N} ⋃ {ƒn(b) | n ∈ N} = {ƒn(x) | x ∈ {a, b} and n ∈ N}.

  9. Example 7 • Describe the set S defined by: • Basis: < 0 > ∈ S • Induction: x ∈ S implies cons(1, x) ∈ S. • Solution: S = {< 0 >, < 1, 0 >, <1, 1, 0 >, …}.

  10. Infix notation • cons(h, t) = h :: t. Associate to the right. e.g., x :: y :: z = x :: (y :: z). • Example 8. Find an inductive definition for S = {<>, <a, b >, <a, b, a, b >, …}. • Solution: • Basis: <> ∈ S. • Induction: x ∈ S implies a :: b :: x ∈ S.

  11. Example 9 • Find an inductive definition for S = {<>, <<>>, <<<>>>, …}. • Solution: Basis: <> ∈ S. Induction: x ∈ S implies x :: <> ∈ S.

  12. Notation for Binary Trees • Let t(L, x, R) denote the tree with root x, left subtree L, and right subtree R. Let <> denote the empty binary tree. If T = t(L, x, R), then root(T) = x, left(T) = L, and right(T) = R.

  13. Example 10 • Describe the set S defined inductively as follows: • Basis: t(<>, •, <>) ∈ S. • Induction: T ∈ S implies t(T, •, t(<>, •, <>)) ∈ S. • Solution (picture): The first few trees constructed from the definition are pictured as follows: and so on.

  14. Example 11 • Find an inductive definition for the set S of binary trees indicated by the following picture. and so on. • Solution: Basis: t(<>, •, <>) ∈ S. Induction: T ∈ S implies t(t(left(T), •, <>), •, t(<>, •, right(T))) ∈ S.

  15. Example 12 • Find an inductive definition for the set S = {a}* × N. • Solution: Basis: (٨, 0) ∈ S. Induction: (s, n) ∈ S implies (as, n), (s, n + 1) ∈ S.

  16. Example 13 • Find an inductive definition for the set S = {(x, –y) | x, y ∈ N and x ≥ y}. • Solution: To get an idea about S we can write out a few tuples: (0, 0), (1, 0), (1, –1), (2, 0), (2, –1), (2, –2), and so on. We can also get an idea about S by graphing a few points, as indicated in the picture. One solution can be written as follows: • Basis: (0, 0) ∈ S. • Induction: (x, y) ∈ S implies (x + 1, y), (x + 1, y – 1) ∈ S. Notice that this definition constructs some repeated points. For example, (2, –1) is constructed twice.

  17. Quiz (2 minutes) • Try to find a solution that does not construct repeated elements. • Solution: We might use two separate rules. One rule to construct the diagonal points and one rule to construct horizontal lines that start at the diagonal points. • Basis: (0, 0) ∈ S. • Induction: 1. (x, y) ∈ S implies (x + 1, y) ∈ S. 2. (x, –x) ∈ S implies (x + 1, – (x + 1)) ∈ S.

  18. Section 3.2 Recursively Defined Functions and Procedures • A function f is recursively defined if at least one value f(x) is defined in terms of another value f(y), where x ≠ y. Similarly, a procedure P is recursively defined if the action of P(x) is defined in terms of another action P(y), where x ≠ y.

  19. Technique for recursive definitions • Technique for recursive definitions when the argument domain is inductively defined. 1. Specify a value f(x), or action P(x), for each basis element x of S. 2. Specify rules that, for each inductively defined element x in S, define the value f(x), or action P(x), in terms of previously defined values of f or actions of P.

  20. Example 1 • Find a recursive definition for the function f: N → N defined by f(n) = 0 + 3 + 6 + … + 3n. • Solution: Notice that N is an inductively defined set: 0 ∈ N; n ∈ N implies n + 1 ∈ N. So we need to give f(0) a value in N and we need to define f(n + 1) in terms of f(n). The given definition of f tells us to set f(0) = 0. To discover a definition for f(n + 1) we can write f(n + 1) = (0 + 3 + 6 + … + 3n) + 3(n + 1) = f(n) + 3(n + 1). So we have a recursive definition for f • f(0) = 0 • f(n + 1) = f(n) + 3(n + 1).

  21. Two alternative definitions • f(0) = 0 f(n) = f(n - 1) + 3n (n > 0). • (if-then-else form): f(n) = if n = 0 then 0 else f(n - 1) + 3n.

  22. Example 2 • Find a recursive definition for cat : A* × A* → A* defined by cat(s, t) = st. • Solution: Notice that A* is inductively defined: ٨∈ A*; a ∈ A and x ∈ A* imply ax ∈ A*, where ax denotes the string version of cons. We can define cat recursively using the first argument. The definition of cat gives cat(٨, t) = ٨t = t. For the recursive part we can write cat(ax, t) = axt = a(xt) = acat(x, t). So we have a definition: • cat(٨, t) = t • cat(ax, t) = acat(x, t). • If-then-else form using head and tail for strings: cat(s, t) = if s = ٨ then t else head(s)cat(tail(s), t).

  23. Example 3 • Find a definition for f: lists(Q) → Q defined by f(<x1, …, xn>) = x1 + … + xn. • Solution: The set lists(Q) is inductively defined: <> ∈ lists(Q); h ∈ Q and t ∈ lists(Q) imply h :: t ∈ lists(Q). To discover a recursive definition, we can use the definition of f as follows: f(<x1, …, xn>) = x1 + … + xn = x1 + (x2 + … + xn) = x1 + f(<x2, … , xn>) = head(<x1, …, xn>) + f(tail(<x1, …, xn>). So if we let f(<>) = 0, we have a recursive definition: • f(<>) = 0 • f(h :: t) = h + f(t). • If-then-else form: f(L) = if L = <> then 0 else head(L) + f(tail(L)).

  24. Example 4 • Given f: N → N defined recursively by • f(0) = 0 • f(1) = 0 • f(x + 2) = 1 + f(x). The if-then-else form for f can be written as follows: f(x) = if x = 0 or x = 1 then 0 else 1 + f(x - 2). What does f do? • Answer: List a few values to get the idea. For example, map(f, <0, 1, 2, 3, 4, 5, 6, 7, 8, 9>) = <0, 0, 1, 1, 2, 2, 3, 3, 4, 4>. So f(x) returns the floor of x/2. i.e., f(x) = ⌊x/2⌋.

  25. Example 5 • Find a recursive definition for f: lists(Q) → Q defined by f(<x1, …, xn>) = x1x2 + x2x3 + … + xn-1xn. • Solution: Let f(<>) = 0 and f(<x>) = 0. Then for n ≥ 2 we can write f(<x1, …, xn>) = x1x2 + (x2x3 + … + xn-1xn) = x1x2 + f(<x2, …, xn>). So we have the following recursive definition. • f(<>) = 0 • f(<x>) = 0 • f(h :: t) = h • head(t) + f(t). • If-then-else form: f(L) = if L = <> or tail(L) = <> then 0 else head(L) • head(tail(L)) + f(tail(L)).

  26. Example 6 • Find a recursive definition for isin : A × lists(A) → {true, false} where isin(x, L) means that x is in the list L. • Solution: isin(x, <>) = false isin(x, x :: t) = true isin(x, h :: t) = isin(x, t). • If-then-else form: isin(x, L) = if L = <> then false else if x = head(L) then true else isin(x, tail(L)).

  27. Example 7 • Find a recursive definition for sub : lists(A) × lists(A) → {true, false} where sub(L, M) means the elements of L are elements of M. • Solution: sub(<>, M) = true sub(h :: t, M) = if isin(h, M) then sub(t, M) else false. • If-then-else form: sub(L, M) = if L = <> then true else if isin(head(L), M) then sub(tail(L), M) else false.

  28. Example 8 • Find a recursive definition for intree : Q × binSearchTrees(Q) → {true, false} where intree(x, T) means x is in the binary search tree T. • Solution: intree(x, <>) = false intree(x, tree(L, x, R)) = true intree(x, tree(L, y, R)) = if x < y then intree(x, L) else intree(x, R). • If-then-else form: intree(x, T) = if T = <> then false else if x = root(T) then true else if x < root(T) then intree(x, left(T)) else intree(x, right(T)).

  29. Traversing Binary Trees • The three standard procedures to traverse a binary tree are defined recursively as follows: • preorder(T): if T ≠ <> then visit root(T); preorder(left(T)); preorder(right(T)) fi. • inorder(T): if T ≠ <> then inorder(left(T)); visit root(T); inorder(right(T)) fi • postorder(T): if T ≠ <> then postorder(left(T)); postorder(right(T)); visit root(T) fi.

  30. Example 9 • Traverse the following tree in each of the three orders. • Solution: • Preorder: a b c d e • Inorder: b a d c e • Postorder: b d e c a a c b d e

  31. Example 10 • Find a recursive definition for post : binaryTrees(A) → lists(A) where post(T) is the list of nodes from a postorder traversal of T. • Solution: post(<>) = <> post(tree(L, x, R)) = cat(post(L), cat(post(R), <x >)) where cat concatenates two lists and can be defined by, • cat(<>, L) = L • cat(h :: t, L) = h :: cat(t, L).

  32. Example 11 • Find a recursive definition for ƒ : binaryTrees(Q) → Q where ƒ(T) is the sum of the nodes in T. • Solution: ƒ( <>) = 0 ƒ(tree(L, x, R)) = x + ƒ(L) + ƒ(R).

  33. Infinite Sequences • We can construct recursive definitions for infinite sequences by defining a value ƒ(x) in terms of x and ƒ(y) for some value y in the sequence. • Example 12. Suppose we want to represent the infinite sequence ƒ(x) = <x, x2, x4, x8, … >. • Solution: Use the definition to discover a solution as follows: ƒ(x) = <x, x2, x4, x8, …> = x :: <x2, x4, x8, …> = x :: ƒ(x2). So define ƒ(x) = x :: ƒ(x2).

  34. More examples • Example 13. What sequence is defined by g(x, k) = xk :: g(x, k + 1)? • Answer: g(x, k) = xk :: g(x, k + 1) = xk :: xk+1 :: g(x, k + 2) =… = < xk, xk+1, xk+2, … >. • Example 14. How do we obtain the sequence <x, x3, x5, x7, … >? • A Solution. Define ƒ(x) = h(x, 1), where h(x, k) = xk :: h(x, k + 2). • Example 15. How do we obtain the sequence <1, x2, x4, x6, x8, … >? • A Solution: Use h(x, 0) from Example 14.

  35. The End of Chapter 3 - 1

More Related