sequence algorithms continued announcements for this
play

Sequence Algorithms (Continued) Announcements for This Lecture - PowerPoint PPT Presentation

Lecture 26 Sequence Algorithms (Continued) Announcements for This Lecture Lab/Finals Assignments Lab 12 is the final lab A6 is now graded Can use Consulting hours Mean : 89.5 Median : 93 Due next Wednesday 9:30 Std Dev :


  1. Lecture 26 Sequence Algorithms (Continued)

  2. Announcements for This Lecture Lab/Finals Assignments • Lab 12 is the final lab • A6 is now graded § Can use Consulting hours § Mean : 89.5 Median : 93 § Due next Wednesday 9:30 § Std Dev : 12.5 § Mean : 15 hr Median : 15 hr • Final: Dec 17 th 9-11:30am § Std Dev : 7 hr § Study guide is posted § SEVERAL AI hearings § Announce reviews next week. • A7 is due Tuesday Dec. 10 • Conflict with Final time? § Extensions are possible § Submit to conflict to CMS § Contact your lab instructor by next TUESDAY! 12/3/19 Sequences (Continued) 2

  3. Recall: Horizontal Notation 0 k len(b) b <= sorted >= Example of an assertion about an sequence b. It asserts that: 1. b[0..k–1] is sorted (i.e. its values are in ascending order) 2. Everything in b[0..k–1] is ≤ everything in b[k..len(b)–1] 0 h k b h h+1 Given index h of the first element of a segment and index k of the element that follows that segment, the number of values in the segment is k – h. (h+1) – h = 1 b[h .. k – 1] has k – h elements in it. 12/3/19 Sequences (Continued) 3

  4. Partition Algorithm • Given a sequence b[h..k] with some value x in b[h]: h k pre: b x ? • Swap elements of b[h..k] and store in j to truthify post: h i i+1 k post: b <= x x >= x h i j k inv: b <= x x ? >= x • Agrees with precondition when i = h, j = k+1 • Agrees with postcondition when j = i+1 12/3/19 Sequences (Continued) 4

  5. Partition Algorithm Implementation def partition(b, h, k): """Partition list b[h..k] around a pivot x = b[h]""" i = h; j = k+1; x = b[h] # invariant: b[h..i-1] < x, b[i] = x, b[j..k] >= x while i < j-1: if b[i+1] >= x: partition(b,h,k), not partition(b[h:k+1]) # Move to end of block. Remember, slicing always copies the list! swap(b,i+1,j-1) We want to partition the original list j = j - 1 else: # b[i+1] < x swap(b,i,i+1) i = i + 1 # post: b[h..i-1] < x, b[i] is x, and b[i+1..k] >= x return i 12/3/19 Sequences (Continued) 5

  6. Partition Algorithm Implementation def partition(b, h, k): <= x x ? >= x """Partition list b[h..k] around a pivot x = b[h]""" h i i+1 j k i = h; j = k+1; x = b[h] 1 2 3 1 5 0 6 3 8 # invariant: b[h..i-1] < x, b[i] = x, b[j..k] >= x while i < j-1: if b[i+1] >= x: # Move to end of block. swap(b,i+1,j-1) j = j - 1 else: # b[i+1] < x swap(b,i,i+1) i = i + 1 # post: b[h..i-1] < x, b[i] is x, and b[i+1..k] >= x return i 12/3/19 Sequences (Continued) 6

  7. Partition Algorithm Implementation def partition(b, h, k): <= x x ? >= x """Partition list b[h..k] around a pivot x = b[h]""" h i i+1 j k i = h; j = k+1; x = b[h] 1 2 3 1 5 0 6 3 8 # invariant: b[h..i-1] < x, b[i] = x, b[j..k] >= x while i < j-1: h i i+1 j k if b[i+1] >= x: 1 2 1 3 5 0 6 3 8 # Move to end of block. swap(b,i+1,j-1) j = j - 1 else: # b[i+1] < x swap(b,i,i+1) i = i + 1 # post: b[h..i-1] < x, b[i] is x, and b[i+1..k] >= x return i 12/3/19 Sequences (Continued) 7

  8. Partition Algorithm Implementation def partition(b, h, k): <= x x ? >= x """Partition list b[h..k] around a pivot x = b[h]""" h i i+1 j k i = h; j = k+1; x = b[h] 1 2 3 1 5 0 6 3 8 # invariant: b[h..i-1] < x, b[i] = x, b[j..k] >= x while i < j-1: h i i+1 j k if b[i+1] >= x: 1 2 1 3 5 0 6 3 8 # Move to end of block. swap(b,i+1,j-1) h i j k j = j - 1 1 2 1 3 0 5 6 3 8 else: # b[i+1] < x swap(b,i,i+1) i = i + 1 # post: b[h..i-1] < x, b[i] is x, and b[i+1..k] >= x return i 12/3/19 Sequences (Continued) 8

  9. Partition Algorithm Implementation def partition(b, h, k): <= x x ? >= x """Partition list b[h..k] around a pivot x = b[h]""" h i i+1 j k i = h; j = k+1; x = b[h] 1 2 3 1 5 0 6 3 8 # invariant: b[h..i-1] < x, b[i] = x, b[j..k] >= x while i < j-1: h i i+1 j k if b[i+1] >= x: 1 2 1 3 5 0 6 3 8 # Move to end of block. swap(b,i+1,j-1) h i j k j = j - 1 1 2 1 3 0 5 6 3 8 else: # b[i+1] < x swap(b,i,i+1) i = i + 1 h i j k # post: b[h..i-1] < x, b[i] is x, and b[i+1..k] >= x 1 2 1 0 3 5 6 3 8 return i 12/3/19 Sequences (Continued) 9

  10. Dutch National Flag Variant • Sequence of integer values § ‘red’ = negatives, ‘white’ = 0, ‘blues’ = positive § Only rearrange part of the list, not all h k pre: b ? h k post: b < 0 = 0 > 0 h t i j k inv: b < 0 ? = 0 > 0 12/3/19 Sequences (Continued) 10

  11. Dutch National Flag Variant • Sequence of integer values § ‘red’ = negatives, ‘white’ = 0, ‘blues’ = positive § Only rearrange part of the list, not all h k pre: b ? h k post: b < 0 = 0 > 0 pre : t = h, i = k+1, h t i j k j = k post : t = i inv: b < 0 ? = 0 > 0 12/3/19 Sequences (Continued) 11

  12. Dutch National Flag Algorithm def dnf(b, h, k): < 0 ? = 0 > 0 """Returns: partition points as a tuple (i,j)""" h t i j k t = h; i = k+1, j = k; -1 -2 3 -1 0 0 0 6 3 # inv: b[h..t-1] < 0, b[t..i-1] ?, b[i..j] = 0, b[j+1..k] > 0 while t < i: if b[i-1] < 0: swap(b,i-1,t) t = t+1 elif b[i-1] == 0: i = i-1 else: swap(b,i-1,j) i = i-1; j = j-1 # post: b[h..i-1] < 0, b[i..j] = 0, b[j+1..k] > 0 return (i, j) 12/3/19 Sequences (Continued) 12

  13. Dutch National Flag Algorithm def dnf(b, h, k): < 0 ? = 0 > 0 """Returns: partition points as a tuple (i,j)""" h t i j k t = h; i = k+1, j = k; -1 -2 3 -1 0 0 0 6 3 # inv: b[h..t-1] < 0, b[t..i-1] ?, b[i..j] = 0, b[j+1..k] > 0 while t < i: h t i j k if b[i-1] < 0: -1 -2 3 -1 0 0 0 6 3 swap(b,i-1,t) t = t+1 elif b[i-1] == 0: i = i-1 else: swap(b,i-1,j) i = i-1; j = j-1 # post: b[h..i-1] < 0, b[i..j] = 0, b[j+1..k] > 0 return (i, j) 12/3/19 Sequences (Continued) 13

  14. Dutch National Flag Algorithm def dnf(b, h, k): < 0 ? = 0 > 0 """Returns: partition points as a tuple (i,j)""" h t i j k t = h; i = k+1, j = k; -1 -2 3 -1 0 0 0 6 3 # inv: b[h..t-1] < 0, b[t..i-1] ?, b[i..j] = 0, b[j+1..k] > 0 while t < i: h t i j k if b[i-1] < 0: -1 -2 3 -1 0 0 0 6 3 swap(b,i-1,t) t = t+1 h t i j k elif b[i-1] == 0: -1 -2 -1 3 0 0 0 6 3 i = i-1 else: swap(b,i-1,j) i = i-1; j = j-1 # post: b[h..i-1] < 0, b[i..j] = 0, b[j+1..k] > 0 return (i, j) 12/3/19 Sequences (Continued) 14

  15. Dutch National Flag Algorithm def dnf(b, h, k): < 0 ? = 0 > 0 """Returns: partition points as a tuple (i,j)""" h t i j k t = h; i = k+1, j = k; -1 -2 3 -1 0 0 0 6 3 # inv: b[h..t-1] < 0, b[t..i-1] ?, b[i..j] = 0, b[j+1..k] > 0 while t < i: h t i j k if b[i-1] < 0: -1 -2 3 -1 0 0 0 6 3 swap(b,i-1,t) t = t+1 h t i j k elif b[i-1] == 0: -1 -2 -1 3 0 0 0 6 3 i = i-1 else: swap(b,i-1,j) h t j k i = i-1; j = j-1 -1 -2 -1 0 0 0 3 6 3 # post: b[h..i-1] < 0, b[i..j] = 0, b[j+1..k] > 0 return (i, j) 12/3/19 Sequences (Continued) 15

  16. Changing the Invariant • Different invariants = different code § Need to change how we initialize, stop § Also need to change the body of the loop h k pre: b ? h k post: b < 0 = 0 > 0 h t i j k inv: b < 0 = 0 ? > 0 12/3/19 Sequences (Continued) 16

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend