Beruflich Dokumente
Kultur Dokumente
Recommended Reading
Chapter 2 from the textbook Introduction to Algorithms
MergeSort
MergeSort: Merge
Assuming L and R are sorted already, merge the two to create a single sorted array
Merge
L: 1 3 5 8 R: 2 4 6 7
Merge
L: 1 3 5 8 B: R: 2 4 6 7
Merge
L: 1 3 5 8 B: R: 2 4 6 7
Merge
L: 1 3 5 8 B: R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 4 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 4 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 4 5 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 4 5 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 4 5 6 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 4 5 6 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 4 5 6 7 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 4 5 6 7 R: 2 4 6 7
Merge
L: 1 3 5 8 B: 1 2 3 4 5 6 7 8 R: 2 4 6 7
Merge
Does the algorithm terminate?
Merge
Is it correct? Loop invariant: At the end of each iteration of the for loop of lines 4-10 the subarray B[1..k] contains the smallest k elements from L and R in sorted order.
Merge
Is it correct? Loop invariant: At the end of each iteration of the for loop of lines 4-10 the subarray B[1..k] contains the smallest k elements from L and R in sorted order.
Merge
Running time?
Merge
Running time? (n) - linear
Merge-Sort: Divide
8 5 1 3 6 2 7 4
8 5 1 3
6 2 7 4
Merge-Sort: Divide
8 5 1 3 6 2 7 4
8 5 1 3
6 2 7 4
8 5
1 3
Merge-Sort: Divide
8 5 1 3 6 2 7 4
8 5 1 3
6 2 7 4
8 5
1 3
Merge-Sort: Conquer
8 5 1 3 6 2 7 4
8 5 1 3
6 2 7 4
8 5
1 3
Merge-Sort: Combine
8 5 1 3 6 2 7 4
8 5 1 3
6 2 7 4
5 8
1 3
Merge-Sort: Divide
8 5 1 3 6 2 7 4
8 5 1 3
6 2 7 4
5 8
1 3
Merge-Sort: Divide
8 5 1 3 6 2 7 4
8 5 1 3
6 2 7 4
5 8
1 3
Merge-Sort: Merge
8 5 1 3 6 2 7 4
8 5 1 3
6 2 7 4
5 8
1 3
Merge-Sort: Merge
8 5 1 3 6 2 7 4
1 3 5 8
6 2 7 4
5 8
1 3
Merge-Sort
8 5 1 3 6 2 7 4
1 3 5 8
6 2 7 4
Merge-Sort
8 5 1 3 6 2 7 4
1 3 5 8
2 4 6 7
Merge-Sort: Merge
1 2 3 4 5 6 7 8
1 3 5 8
2467
Done!
MergeSort
Running time?
D(n): cost of splitting (dividing) the data C(n): cost of merging/combining the data
MergeSort
Running time?
D(n): cost of splitting (dividing) the data - linear (n) C(n): cost of merging/combining the data linear (n)
MergeSort
Running time?
Which is?
MergeSort
c if n is small T (n) 2T (n / 2) cn otherwise
cn
T(n/2)
T(n/2)
MergeSort
cn
cn/2
T(n/4) T(n/4)
cn/2
T(n/4) T(n/4)
MergeSort
c if n is small T (n) 2T (n / 2) cn otherwise
cn
cn/2
cn/4 cn/4 cn/4
cn/2
cn/4
MergeSort
c if n is small T (n) 2T (n / 2) cn otherwise
cn
cn/2
cn/4
cn/8 cn/8
cn/2
cn/4
cn/8 cn/8
cn/4
cn/8
cn/4
cn/8 cn/8 cn/8
c c c c c c c c c c c
MergeSort
c if n is small T (n) 2T (n / 2) cn otherwise
cn
cn
cn/2
cn/4
cn/8 cn/8
cn/2
cn/4
cn/8 cn/8
cn
cn
cn/8 cn/8
cn/4
cn/8
cn/4
cn/8
cn
c c c c c c c c c c c cn
MergeSort
c if n is small T (n) 2T (n / 2) cn otherwise
cn
cn
cn/2
cn/4
cn/8 cn/8
cn/2
cn/4
cn/8 cn/8
cn
cn
cn/8 cn/8
cn/4
cn/8
cn/4
cn/8
cn
c c c c c c c c c c c cn
Depth?
MergeSort
We can calculate the depth, by determining when the recursion is c At each level, we divide by 2
n 1 d 2
2d n
log 2 d log n
d log 2 log n
d log 2 n
MergeSort
Running time? Each level costs cn log n levels cn log n = (n log n )
c if n is small T (n) 2T (n / 2) cn otherwise