Page 12 Page 9293 Page 97 Page 108

  • Slides: 49
Download presentation

主讲部分 • • • Page 12 Page 92~93 Page 97 Page 108 Page 110

主讲部分 • • • Page 12 Page 92~93 Page 97 Page 108 Page 110 2. 1 -1, 2. 1 -2; (Insertion-Sort) 6. 5 -1, 6. 5 -3, 6. 5 -6, 6 -5 -8; (Priority Queue) 7. 1 -1, 7. 1 -2; (Quick. Sort) 8. 1 -1; (Decision Tree) 8. 2 -1, 8. 2 -4; (Counting-Sort) 2021/9/11 2

Page 12 2. 1 -2 。重写INSERTION-SORT(非升序)。 INSERTION_SORT_R(A) for j = 2 to A. length

Page 12 2. 1 -2 。重写INSERTION-SORT(非升序)。 INSERTION_SORT_R(A) for j = 2 to A. length key = A[j] i = j – 1; while i > 0 and A[i] < key A[i + 1] = A[i] i=i– 1 A[i + 1] = key • 索引的取值范围前后一致 2021/9/11 4

Page 92~93 6. 5 -1 。说明HEAP-EXTRACT-MAX在堆A上的操作过程 A = <15, 13, 9, 5, 12, 8,

Page 92~93 6. 5 -1 。说明HEAP-EXTRACT-MAX在堆A上的操作过程 A = <15, 13, 9, 5, 12, 8, 7, 4, 0, 6, 2, 1> • • Extract操作,必须要有返回值max(max = A[1]) 将A[A. heap-size]赋值给A[1]后,需调整A. heap-size MAX-HEAPIFY 仅需图示/文字说明在给定堆上的一次EXTRACT操作 2021/9/11 5

Page 92~93 6. 5 -3 。用最小堆实现最小优先队列,写出HEAP-MINIMUM、HEAP-EXTRACTMIN、HEAP-DECREASE-KEY、MIN-HEAP-INSERT的伪代码(MIN-HEAPIFY) • HEAP-MINIMUM(A) 直接return A[1] • HEAP-EXTRACT-MIN(A) step 1:

Page 92~93 6. 5 -3 。用最小堆实现最小优先队列,写出HEAP-MINIMUM、HEAP-EXTRACTMIN、HEAP-DECREASE-KEY、MIN-HEAP-INSERT的伪代码(MIN-HEAPIFY) • HEAP-MINIMUM(A) 直接return A[1] • HEAP-EXTRACT-MIN(A) step 1: 判断是否heap underflow 并extract最小值 min = A[1] step 2: A[1] = A[A. heap-size] A. heap-size -step 3: 使用MIN-HEAPIFY(A, 1)重新调整为最小堆 step 4: return min 2021/9/11 6

Page 92~93 6. 5 -3 。用最小堆实现最小优先队列,写出HEAP-MINIMUM、HEAP-EXTRACTMIN、HEAP-DECREASE-KEY、MIN-HEAP-INSERT的伪代码(MIN-HEAPIFY) • HEAP-DECREASE-KEY(A, i, key) if key > A[i]

Page 92~93 6. 5 -3 。用最小堆实现最小优先队列,写出HEAP-MINIMUM、HEAP-EXTRACTMIN、HEAP-DECREASE-KEY、MIN-HEAP-INSERT的伪代码(MIN-HEAPIFY) • HEAP-DECREASE-KEY(A, i, key) if key > A[i] error “new key is larger than current key ” A[i] = key while i > 1 and A[PARENT(i)] > A[i] exchange A[i] with A[PARENT(i)] i = PARENT(i) 2021/9/11 7

Page 92~93 6. 5 -3 。用最小堆实现最小优先队列,写出HEAP-MINIMUM、HEAP-EXTRACT-MIN、 HEAP-DECREASE-KEY、MIN-HEAP-INSERT的伪代码(MIN-HEAPIFY) • MIN-HEAP-INSERT(A, key) A. heap-size = A.

Page 92~93 6. 5 -3 。用最小堆实现最小优先队列,写出HEAP-MINIMUM、HEAP-EXTRACT-MIN、 HEAP-DECREASE-KEY、MIN-HEAP-INSERT的伪代码(MIN-HEAPIFY) • MIN-HEAP-INSERT(A, key) A. heap-size = A. heap-size + 1 A[A. heap-size] = +∞ HEAP-DECREASE-KEY(A, A. heap-size, key) Ans 1: 与MAX-HEAP-INSERT (A, key)相同,初值为负无穷并使用 HEAP_INCREASE-KEY进行调整 Ans 2:初始化为key, 即A[A. heap-size] = key,再使用HEAP-DECREASE-KEY进 行调整 2021/9/11 8

Page 92~93 6. 5 -6 。在HEAP-INCREASE-KEY(A, i, key)的line 5 的交换操作中,一般需要三次赋 值完成。如何修改算法使之只通过一次赋值就完成交换。(利用 INSERTION-SORT内循环部分的思想) line 3

Page 92~93 6. 5 -6 。在HEAP-INCREASE-KEY(A, i, key)的line 5 的交换操作中,一般需要三次赋 值完成。如何修改算法使之只通过一次赋值就完成交换。(利用 INSERTION-SORT内循环部分的思想) line 3 A[i] = key line 4 while i > 1 and A[PARENT(i)] < A[i] line 5 exchange A[i] with A[PARENT(i)] line 6 i = PARENT(i) Ans: while i > 1 and A[PARENT(i)] < key A[i] = A[PARENT(i)] i = PARENT(i); A[i] = key 直观上,修改后的算法是插入排序在最大堆调整过程中的纵向的体现。 2021/9/11 9

Page 97 7. 1 -1 。说明PARTITION在数组A = <13, 19, 9, 5, 12, 8, 7,

Page 97 7. 1 -1 。说明PARTITION在数组A = <13, 19, 9, 5, 12, 8, 7, 4, 21, 26, 11>的操作过程 PARTITION(A, p, r): • PARTITION中最后一步的exchange A[i+1] with A[r]在图示中要有所体现。 2021/9/11 12

Page 110 8. 2 -1 。说明COUNTING-SORT在数组A = <6, 0, 2, 0, 1, 3, 4,

Page 110 8. 2 -1 。说明COUNTING-SORT在数组A = <6, 0, 2, 0, 1, 3, 4, 6, 1, 3, 2>上的操作过程。 • 注意数组下标 C[0. . k], A[1. . n], B[1. . n] • For j = A. length downto 1 B[C[A[j]]] = A[j] C[A[j]] = C[A[j]] - 1 2021/9/11 15

主讲部分 • • Page 16 Page 53 Page 55 Page 112 2. 2 -2,2.

主讲部分 • • Page 16 Page 53 Page 55 Page 112 2. 2 -2,2. 2 -3; 4. 4 -2,4. 4 -3; 4. 5 -1,4. 5 -3; 8. 3 -1,8. 3 -2; 2021/9/11 18

Page 16 2. 2 -2 • 2021/9/11 19

Page 16 2. 2 -2 • 2021/9/11 19

Page 16 2. 2 -3 • 2021/9/11 20

Page 16 2. 2 -3 • 2021/9/11 20

Page 53 4. 4 -2 • 2021/9/11 21

Page 53 4. 4 -2 • 2021/9/11 21

Page 53 4. 4 -2 • 2021/9/11 22

Page 53 4. 4 -2 • 2021/9/11 22

Page 53 4. 4 -2 • 2021/9/11 23

Page 53 4. 4 -2 • 2021/9/11 23

Page 55 4. 5 -1 4. 5 -3 • 2021/9/11 24

Page 55 4. 5 -1 4. 5 -3 • 2021/9/11 24

Page 112 8. 3 -1 • 解: 2021/9/11 25

Page 112 8. 3 -1 • 解: 2021/9/11 25

Page 112 8. 3 -2 • 2021/9/11 26

Page 112 8. 3 -2 • 2021/9/11 26

主讲部分 • • • Page 30 3. 1 -2, 3. 1 -4; Page 87

主讲部分 • • • Page 30 3. 1 -2, 3. 1 -4; Page 87 6. 2 -1, 6. 2 -2; Page 89 6. 3 -1; Page 90 6. 4 -1; Page 99&&100 7. 2 -1 7. 2 -2; Page 103 7. 4 -1; 2021/9/11 28

Page 30 3. 1 -2 • 2021/9/11 29

Page 30 3. 1 -2 • 2021/9/11 29

Page 30 3. 1 -4 • 2021/9/11 30

Page 30 3. 1 -4 • 2021/9/11 30

Page 87 6. 2 -1 p 说明MAX_HEAPIFY(A, 3)的操作过程: 解:最终结果是:<27, 10, 16, 13, 9, 1,

Page 87 6. 2 -1 p 说明MAX_HEAPIFY(A, 3)的操作过程: 解:最终结果是:<27, 10, 16, 13, 9, 1, 5, 7, 12, 4, 8, 3, 0> 27 10 17 5 7 9 13 16 12 4 2021/9/11 8 1 3 0 31

Page 89 6. 3 -1 p 说明BUILD-MAX-HEAP在数组A=<5, 3, 17, 10, 84, 19, 6, 22,

Page 89 6. 3 -1 p 说明BUILD-MAX-HEAP在数组A=<5, 3, 17, 10, 84, 19, 6, 22, 9>上的 操作过程。 解:最终结果:<84, 22, 19, 10, 3, 17, 6, 5, 9> 84 19 22 3 10 5 17 6 9 2021/9/11 33

Page 90 6. 4 -1 p 说明HEAPSORT在数组A=<5, 13, 2, 25, 7, 17, 20, 8,

Page 90 6. 4 -1 p 说明HEAPSORT在数组A=<5, 13, 2, 25, 7, 17, 20, 8, 4>的操作过 程。 2021/9/11 34

Page 99 7. 2 -1 • 2021/9/11 35

Page 99 7. 2 -1 • 2021/9/11 35

Page 100 7. 2 -2 • 2021/9/11 36

Page 100 7. 2 -2 • 2021/9/11 36

Page 103 7. 4 -1 • 2021/9/11 37

Page 103 7. 4 -1 • 2021/9/11 37

主讲部分 • • • Page 22 2. 3 -1, 2. 3 -3; Page 34

主讲部分 • • • Page 22 2. 3 -1, 2. 3 -3; Page 34 3. 2 -1, 3. 2 -2; Page 42 4. 1 -3; Page 50 4. 3 -1 4. 3 -3; Page 114 8. 4 -1; Page 120 9. 1 -1 2021/9/11 39

Page 34 3. 2 -1 2021/9/11 42

Page 34 3. 2 -1 2021/9/11 42

Page 34 3. 2 -2 2021/9/11 43

Page 34 3. 2 -2 2021/9/11 43

Page 42 4. 1 -2 2021/9/11 44

Page 42 4. 1 -2 2021/9/11 44

Page 42 4. 1 -3 2021/9/11 45

Page 42 4. 1 -3 2021/9/11 45

Page 50 4. 3 -1 2021/9/11 46

Page 50 4. 3 -1 2021/9/11 46

Page 50 4. 3 -3 2021/9/11 47

Page 50 4. 3 -3 2021/9/11 47

Page 114 8. 4 -1 2021/9/11 48

Page 114 8. 4 -1 2021/9/11 48

Page 120 9. 1 -1 2021/9/11 49

Page 120 9. 1 -1 2021/9/11 49