61a lecture 20 announcements sets sets
play

61A Lecture 20 Announcements Sets Sets >>> import re - PowerPoint PPT Presentation

61A Lecture 20 Announcements Sets Sets >>> import re >>> text = \ # list of words ... re.split(r\s+, ... open(shakespeare.txt).read()) >>> W = set(text) >>> { w for w in W


  1. Sets as Unordered Sequences Proposal 1 : A set is represented by a linked list that contains no duplicate items. def empty(s): return s is Link.empty def contains(s, v): """Return whether set s contains value v. >>> s = Link(1, Link(3, Link(2))) >>> contains(s, 2) True """ 7

  2. Sets as Unordered Sequences Proposal 1 : A set is represented by a linked list that contains no duplicate items. def empty(s): return s is Link.empty def contains(s, v): """Return whether set s contains value v. >>> s = Link(1, Link(3, Link(2))) >>> contains(s, 2) True """ (Demo) 7

  3. Sets as Unordered Sequences Proposal 1 : A set is represented by a linked list that contains no duplicate items. Time order of growth def empty(s): return s is Link.empty def contains(s, v): """Return whether set s contains value v. >>> s = Link(1, Link(3, Link(2))) >>> contains(s, 2) True """ (Demo) 7

  4. Sets as Unordered Sequences Proposal 1 : A set is represented by a linked list that contains no duplicate items. Time order of growth def empty(s): Θ (1) return s is Link.empty def contains(s, v): """Return whether set s contains value v. >>> s = Link(1, Link(3, Link(2))) >>> contains(s, 2) True """ (Demo) 7

  5. Sets as Unordered Sequences Proposal 1 : A set is represented by a linked list that contains no duplicate items. Time order of growth def empty(s): Θ (1) return s is Link.empty def contains(s, v): Time depends on whether """Return whether set s contains value v. & where v appears in s. >>> s = Link(1, Link(3, Link(2))) >>> contains(s, 2) True """ (Demo) 7

  6. Sets as Unordered Sequences Proposal 1 : A set is represented by a linked list that contains no duplicate items. Time order of growth def empty(s): Θ (1) return s is Link.empty def contains(s, v): Time depends on whether """Return whether set s contains value v. & where v appears in s. Θ ( n ) >>> s = Link(1, Link(3, Link(2))) >>> contains(s, 2) True """ (Demo) 7

  7. Sets as Unordered Sequences Proposal 1 : A set is represented by a linked list that contains no duplicate items. Time order of growth def empty(s): Θ (1) return s is Link.empty def contains(s, v): Time depends on whether """Return whether set s contains value v. & where v appears in s. Θ ( n ) >>> s = Link(1, Link(3, Link(2))) In the worst case: v 
 >>> contains(s, 2) does not appear in s 
 True or 
 """ In the average case: appears in a uniformly distributed (Demo) random location 7

  8. Sets as Unordered Sequences 8

  9. Sets as Unordered Sequences def adjoin(s, v): if contains(s, v): return s else: return Link(v, s) 8

  10. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): if contains(s, v): return s else: return Link(v, s) 8

  11. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): Θ ( n ) if contains(s, v): return s else: return Link(v, s) 8

  12. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): Θ ( n ) if contains(s, v): return s else: The size of the set return Link(v, s) 8

  13. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): Θ ( n ) if contains(s, v): return s else: The size of the set return Link(v, s) def intersect(set1, set2): in_set2 = lambda v: contains(set2, v) return filter_link(in_set2, set1) 8

  14. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): Θ ( n ) if contains(s, v): return s else: The size of the set return Link(v, s) def intersect(set1, set2): in_set2 = lambda v: contains(set2, v) return filter_link(in_set2, set1) Return elements x for which in_set2(x) returns a true value 8

  15. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): Θ ( n ) if contains(s, v): return s else: The size of the set return Link(v, s) def intersect(set1, set2): in_set2 = lambda v: contains(set2, v) Θ ( n 2 ) return filter_link(in_set2, set1) Return elements x for which in_set2(x) returns a true value 8

  16. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): Θ ( n ) if contains(s, v): return s else: The size of the set return Link(v, s) def intersect(set1, set2): in_set2 = lambda v: contains(set2, v) Θ ( n 2 ) return filter_link(in_set2, set1) Return elements x for which If sets are in_set2(x) returns a true value the same size 8

  17. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): Θ ( n ) if contains(s, v): return s else: The size of the set return Link(v, s) def intersect(set1, set2): in_set2 = lambda v: contains(set2, v) Θ ( n 2 ) return filter_link(in_set2, set1) Return elements x for which If sets are in_set2(x) returns a true value the same size def union(set1, set2): not_in_set2 = lambda v: not contains(set2, v) set1_not_set2 = filter_link(not_in_set2, set1) return extend_link(set1_not_set2, set2) 8

  18. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): Θ ( n ) if contains(s, v): return s else: The size of the set return Link(v, s) def intersect(set1, set2): in_set2 = lambda v: contains(set2, v) Θ ( n 2 ) return filter_link(in_set2, set1) Return elements x for which If sets are in_set2(x) returns a true value the same size def union(set1, set2): not_in_set2 = lambda v: not contains(set2, v) set1_not_set2 = filter_link(not_in_set2, set1) return extend_link(set1_not_set2, set2) Return a linked list containing all elements in set1_not_set2 followed by all elements in set2 8

  19. Sets as Unordered Sequences Time order of worst-case growth def adjoin(s, v): Θ ( n ) if contains(s, v): return s else: The size of the set return Link(v, s) def intersect(set1, set2): in_set2 = lambda v: contains(set2, v) Θ ( n 2 ) return filter_link(in_set2, set1) Return elements x for which If sets are in_set2(x) returns a true value the same size def union(set1, set2): not_in_set2 = lambda v: not contains(set2, v) Θ ( n 2 ) set1_not_set2 = filter_link(not_in_set2, set1) return extend_link(set1_not_set2, set2) Return a linked list containing all elements in set1_not_set2 followed by all elements in set2 8

  20. Sets as Ordered Linked Lists

  21. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest 10

  22. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Parts of the program that... Assume that sets are... Using... 10

  23. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Parts of the program that... Assume that sets are... Using... Use sets to contain values 10

  24. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Parts of the program that... Assume that sets are... Using... Use sets to contain values Unordered collections 10

  25. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Parts of the program that... Assume that sets are... Using... empty, contains, adjoin, 
 Use sets to contain values Unordered collections intersect, union 10

  26. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Parts of the program that... Assume that sets are... Using... empty, contains, adjoin, 
 Use sets to contain values Unordered collections intersect, union Implement set operations 10

  27. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Parts of the program that... Assume that sets are... Using... empty, contains, adjoin, 
 Use sets to contain values Unordered collections intersect, union Implement set operations Ordered linked lists 10

  28. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Parts of the program that... Assume that sets are... Using... empty, contains, adjoin, 
 Use sets to contain values Unordered collections intersect, union Implement set operations Ordered linked lists first, rest, <, >, == 10

  29. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Parts of the program that... Assume that sets are... Using... empty, contains, adjoin, 
 Use sets to contain values Unordered collections intersect, union Implement set operations Ordered linked lists first, rest, <, >, == 10

  30. Sets as Ordered Sequences Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Parts of the program that... Assume that sets are... Using... empty, contains, adjoin, 
 Use sets to contain values Unordered collections intersect, union Implement set operations Ordered linked lists first, rest, <, >, == Different parts of a program may make different assumptions about data 10

  31. Searching an Ordered List 11

  32. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) 11

  33. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  34. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  35. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth contains Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  36. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) contains Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  37. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) True contains Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  38. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) True contains >>> contains(s, 2) Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  39. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) True contains >>> contains(s, 2) False Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  40. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) Θ ( n ) True contains >>> contains(s, 2) False Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  41. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) Θ ( n ) True contains >>> contains(s, 2) False adjoin Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  42. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) Θ ( n ) True contains >>> contains(s, 2) False adjoin >>> t = adjoin(s, 2) Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 11

  43. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) Θ ( n ) True contains >>> contains(s, 2) False adjoin >>> t = adjoin(s, 2) Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: Link instance first: 2 rest: 11

  44. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) Θ ( n ) True contains >>> contains(s, 2) False adjoin >>> t = adjoin(s, 2) Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: Link instance Link instance first: 1 first: 2 rest: rest: 11

  45. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) Θ ( n ) True contains >>> contains(s, 2) False adjoin >>> t = adjoin(s, 2) Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: Link instance Link instance first: 1 first: 2 t: rest: rest: 11

  46. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) Θ ( n ) True contains >>> contains(s, 2) Θ ( n ) False adjoin >>> t = adjoin(s, 2) Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: Link instance Link instance first: 1 first: 2 t: rest: rest: 11

  47. Searching an Ordered List >>> s = Link(1, Link(3, Link(5))) Operation Time order of growth >>> contains(s, 1) Θ ( n ) True contains >>> contains(s, 2) Θ ( n ) False adjoin >>> t = adjoin(s, 2) Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: Link instance Link instance first: 1 first: 2 (Demo) t: rest: rest: 11

  48. Set Operations

  49. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest Let n be max of set1, set2 size 13

  50. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size 13

  51. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size if empty(set1) or empty(set2): return Link.empty 13

  52. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size if empty(set1) or empty(set2): return Link.empty else: 13

  53. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size if empty(set1) or empty(set2): return Link.empty else: e1, e2 = set1.first, set2.first 13

  54. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size if empty(set1) or empty(set2): return Link.empty else: e1, e2 = set1.first, set2.first if e1 == e2: return Link(e1, intersect (set1.rest, set2.rest)) 13

  55. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size if empty(set1) or empty(set2): return Link.empty else: e1, e2 = set1.first, set2.first if e1 == e2: return Link(e1, intersect (set1.rest, set2.rest)) elif e1 < e2: return intersect (set1.rest, set2) 13

  56. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size if empty(set1) or empty(set2): return Link.empty else: e1, e2 = set1.first, set2.first if e1 == e2: return Link(e1, intersect (set1.rest, set2.rest)) elif e1 < e2: return intersect (set1.rest, set2) elif e2 < e1: return intersect (set1, set2.rest) 13

  57. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size if empty(set1) or empty(set2): return Link.empty else: e1, e2 = set1.first, set2.first if e1 == e2: return Link(e1, intersect (set1.rest, set2.rest)) elif e1 < e2: return intersect (set1.rest, set2) elif e2 < e1: return intersect (set1, set2.rest) Order of growth? 13

  58. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size if empty(set1) or empty(set2): return Link.empty else: e1, e2 = set1.first, set2.first if e1 == e2: return Link(e1, intersect (set1.rest, set2.rest)) elif e1 < e2: return intersect (set1.rest, set2) elif e2 < e1: return intersect (set1, set2.rest) Θ ( n ) Order of growth? 13

  59. Intersecting Ordered Linked Lists Proposal 2 : A set is represented by a linked list with unique elements that is 
 ordered from least to greatest def intersect(set1, set2): Let n be max of set1, set2 size if empty(set1) or empty(set2): return Link.empty else: e1, e2 = set1.first, set2.first if e1 == e2: return Link(e1, intersect (set1.rest, set2.rest)) elif e1 < e2: return intersect (set1.rest, set2) elif e2 < e1: return intersect (set1, set2.rest) Θ ( n ) (Demo) Order of growth? 13

  60. Set Mutation

  61. Adding to an Ordered List Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: 15

  62. Adding to an Ordered List Link instance Link instance Link instance first: 1 first: 3 first: 5 s: rest: rest: rest: add(s, 0) Try to return the same object as input 15

  63. Adding to an Ordered List Link instance Link instance Link instance first: 1 0 first: 3 first: 5 s: rest: rest: rest: Link instance first: 1 rest: 16

  64. Adding to an Ordered List Link instance Link instance Link instance first: 1 0 first: 3 first: 5 s: rest: rest: rest: Link instance first: 1 rest: add(s, 3) 16

  65. Adding to an Ordered List Link instance Link instance Link instance first: 1 0 first: 3 first: 5 s: rest: rest: rest: Link instance first: 1 rest: add(s, 3) add(s, 4) 16

  66. Adding to an Ordered List Link instance Link instance Link instance first: 1 0 first: 3 first: 5 4 s: rest: rest: rest: Link instance Link instance first: 1 first: 5 rest: rest: 17

  67. Adding to an Ordered List Link instance Link instance Link instance first: 1 0 first: 3 first: 5 4 s: rest: rest: rest: Link instance Link instance first: 1 first: 5 rest: rest: add(s, 6) 17

  68. Adding to an Ordered List Link instance Link instance Link instance first: 1 0 first: 3 first: 5 4 s: rest: rest: rest: Link instance Link instance first: 1 first: 5 rest: rest: Link instance first: 6 rest: 18

  69. Adding to a Set Represented as an Ordered List s: 19

  70. Adding to a Set Represented as an Ordered List def add(s, v): s: 19

  71. Adding to a Set Represented as an Ordered List def add(s, v): """Add v to a set s, returning modified s.””” s: 19

  72. Adding to a Set Represented as an Ordered List def add(s, v): """Add v to a set s, returning modified s.””” s: >>> s = Link(1, Link(3, Link(5))) 19

Recommend


More recommend