|
CS 3343/3341 Analysis of Algorithms Spring 2012 Recitation 5 Heapsort, Median, Etc. Partial Answers |
| ^ | 0 1 2 3 4 5 6 7 8 9 10 11 12 -----------|------------------------------------------------------------------ Array | 16 19 9 5 13 8 7 4 21 2 6 11 18 | Partition 1| 16 9 5 13 8 7 4 2 6 11 18 19 21 | Subarray 1 | 16 9 5 13 8 7 4 2 6 11 (18) (19) (21) | Partition 2| 9 5 8 7 4 2 6 11 16 13 (18) (19) (21) | Subarray 2 | 9 5 8 7 4 2 6 (11) (16) (13) (18) (19) (21) | Partition 3| 5 4 2 6 9 8 7 (11) (16) (13) (18) (19) (21) | Subarray 3 | (5) (4) (2) (6) 9 8 7 (11) (16) (13) (18) (19) (21) | Partition 4| (5) (4) (2) (6) 7 8 9 (11) (16) (13) (18) (19) (21) | Subarray 4 | (5) (4) (2) (6) (7) 8 9 (11) (16) (13) (18) (19) (21) | Partition 5| (5) (4) (2) (6) (7) 8 9 (11) (16) (13) (18) (19) (21) | |
Tree Cost ^ n ----> c n | | | (3/4) n ----> c (3/4) n log4/3(n) = | | (3/4)^2 n ----> c (3/4)2 n log2(n) / log2(4/3) = | | (3/4)^3 n ----> c (3/4)3 n 3.47606 log2(n) | | ... 1 ----> c | v |
// Median.java: finds median value public class Median { public int median(int[] A, int p, int r, int mid) { printa(A, p, r); int pivot = partition(A, p, r); printa(A, p, r); if (mid == pivot) return A[mid]; else if (mid < pivot) return median(A, p, pivot-1, mid); else return median(A, pivot+1, r, mid); } public int partition(int[] A, int p, int r) { int x = A[r]; int i = p - 1; for (int j = p; j < r; j++) { if (A[j] <= x) { i++; exchange(A,i, j); } } exchange(A, i+1, r); return i + 1; } private void exchange(int[] A, int i, int j) { int temp = A[i]; A[i] = A[j]; A[j] = temp; } | private void printa(int[] A, int p, int r) { int i = 0; while (i < p) printn2(A[i++]); for (i = p; i <= r; i++) printn1(A[i]); i = r+1; while (i <= A.length - 1) printn2(A[i++]); System.out.println(); } void printn1(int i) { if (i < 10) System.out.print(" " + i + " "); else System.out.print(" " + i + " "); } void printn2(int i) { if (i < 10) System.out.print(" (" + i + ")"); else System.out.print(" (" + i + ")"); } public static void main(String[] args) { int[] A = {43,22,51,19,11,67,13,36,32,49,28,15,38}; Median med = new Median(); System.out.println("Median:" + med.median(A,0,A.length-1,(A.length-1)/2)); } } |
0 | 0 1 2 3 4 5 6 7 8 9 10 11 12 -----------|------------------------------------------------------------------ Array | 43 22 51 19 11 67 13 36 32 49 28 15 38 | Partition 1| 22 19 11 13 36 32 28 15 38 49 43 51 67 | Subarray 1 | 22 19 11 13 36 32 28 15 (38) (49) (43) (51) (67) | Partition 2| 11 13 15 19 36 32 28 22 (38) (49) (43) (51) (67) | Subarray 2 | (11) (13) (15) 19 36 32 28 22 (38) (49) (43) (51) (67) | Partition 3| (11) (13) (15) 19 22 32 28 36 (38) (49) (43) (51) (67) | Subarray 3 | (11) (13) (15) (19) (22) 32 28 36 (38) (49) (43) (51) (67) | Partition 4| (11) (13) (15) (19) (22) 32 28 36 (38) (49) (43) (51) (67) | Subarray 4 | (11) (13) (15) (19) (22) 32 28 (36) (38) (49) (43) (51) (67) | Partition 5| (11) (13) (15) (19) (22) 28 32 (36) (38) (49) (43) (51) (67) | Subarray 5 | (11) (13) (15) (19) (22) (28) 32 (36) (38) (49) (43) (51) (67) | Partition 5| (11) (13) (15) (19) (22) (28) 32 (36) (38) (49) (43) (51) (67) | Median: 32 |
public void maxHeapify2(int[] A, int i) { while(true) { printheap(A); int l = left(i); int r = right(i); int largest; if (l <= heapsize && A[l] > A[i]) largest = l; else largest = i; if (r <= heapsize && A[r] > A[largest]) largest = r; if (largest == i) return; exchange(A, i, largest); i = largest; } } |
buildMaxHeap,i: 5;heapsize:10, heap: 26, 5, 77, 1, 85, 11, 59, 15, 48, 19 buildMaxHeap,i: 4;heapsize:10, heap: 26, 5, 77, 48, 85, 11, 59, 15, 1, 19 buildMaxHeap,i: 3;heapsize:10, heap: 26, 5, 77, 48, 85, 11, 59, 15, 1, 19 buildMaxHeap,i: 2;heapsize:10, heap: 26, 85, 77, 48, 19, 11, 59, 15, 1, 5 buildMaxHeap,i: 1;heapsize:10, heap: 85, 48, 77, 26, 19, 11, 59, 15, 1, 5 |
after buildMaxHeap: heapsize:8, heap: 25, 17, 20, 7, 2, 13, 8, 4, heapsort,after step 8:heapsize:7, heap: 20, 17, 13, 7, 2, 4, 8, 25, heapsort,after step 7:heapsize:6, heap: 17, 8, 13, 7, 2, 4, 20, 25, heapsort,after step 6:heapsize:5, heap: 13, 8, 4, 7, 2, 17, 20, 25, heapsort,after step 5:heapsize:4, heap: 8, 7, 4, 2, 13, 17, 20, 25, heapsort,after step 4:heapsize:3, heap: 7, 2, 4, 8, 13, 17, 20, 25, heapsort,after step 3:heapsize:2, heap: 4, 2, 7, 8, 13, 17, 20, 25, heapsort,after step 2:heapsize:1, heap: 2, 4, 7, 8, 13, 17, 20, 25, heapsize:1, heap: 2, 4, 7, 8, 13, 17, 20, 25, |