Running times continued some running times are more
- Slides: 22
Running times continued - some running times are more difficult to analyze Merging two sorted lists Input: Two arrays A = {a 1, a 2, …, am}, B = {b 1, b 2, …, bn}, in increasing order Output: Array C containing A [ B, in increasing order
Running times continued Merging two sorted lists Input: Two arrays A = {a 1, a 2, …, am}, B = {b 1, b 2, …, bn}, in increasing order Output: Array C containing A [ B, in increasing order MERGE (A, B) 1. i=1; j=1; k=1; 2. am+1=1; bn+1=1; 3. while (k < m+n) do 4. if (ai < bj) then 5. ck=ai; i++; 6. else 7. ck=bj; j++; 8. k++; 9. RETURN C={c 1, c 2, …, cm+n}
Running times continued Sorting Input: An array X = {x 1, x 2, …, xn} Output: X sorted in increasing order
Running times continued Sorting Input: An array X = {x 1, x 2, …, xn} Output: X sorted in increasing order An O(n 2) algorithm ?
Running times continued Sorting Input: An array X = {x 1, x 2, …, xn} Output: X sorted in increasing order Merge. Sort – a divide-and-conquer algorithm MERGESORT (X, n) 1. if (n = 1) RETURN X 2. middle = n/2 (round down) 3. A = {x 1, x 2, …, xmiddle} 4. B = {xmiddle+1, xmiddle+2, …, xn} 5. As = MERGESORT (A, middle) 6. Bs = MERGESORT (B, n-middle) 7. RETURN MERGE (As, Bs)
Running times continued Sorting Input: An array X = {x 1, x 2, …, xn} Output: X sorted in increasing order Merge. Sort MERGESORT (X, n) 1. if (n = 1) RETURN X 2. middle = n/2 (round down) 3. A = {x 1, x 2, …, xmiddle} 4. B = {xmiddle+1, xmiddle+2, …, xn} 5. As = MERGESORT (A, middle) 6. Bs = MERGESORT (B, n-middle) 7. RETURN MERGE (As, Bs) Running time ?
A recurrence Running time of Merge. Sort: How to bound T(n) ? T(n)
A recurrence Running time of Merge. Sort: How to bound T(n) ? T(n)
More on sorting Other O(n log n) sorts ? Can do better than O(n log n) ?
More on sorting Heap. Sort - underlying datastructure: heap Def: A heap is a balanced binary tree, with nodes storing keys, and the property that for every parent and child: key(parent) · key(child).
More on sorting Heap. Sort - underlying datastructure: heap Use: priority queue – a datastructure that supports: - extract-min - add key - change key value
More on sorting Heap Parent - stored in an array – how to compute: Left child Right child - how to add a key ?
More on sorting Heap Parent(i) = i/2 - stored in an array – how to compute: Left. Child(i) = 2 i Right. Child(i) = 2 i+1 - how to add a key ? HEAPIFY-UP (H, i) 1. while (i > 1) and (H[i] < H[Parent(i)]) do 2. swap entries H[i] and H[Parent(i)] 3. i = Parent(i) ADD (H, key) 1. H. lenth++ 2. H[H. length] = key 3. HEAPIFY-UP (H, H. length)
More on sorting Heap Parent(i) = i/2 - stored in an array – how to compute: Left. Child(i) = 2 i Right. Child(i) = 2 i+1 - what if we change the value of a key (at position i) ? - if key decreased, call HEAPIFY-UP (H, i) - otherwise ?
More on sorting Heap Parent(i) = i/2 - stored in an array – how to compute: Left. Child(i) = 2 i Right. Child(i) = 2 i+1 - what if we change the value of a key (at position i) ? HEAPIFY-DOWN (H, i) 1. n = H. length 2. while (Left. Child(i) · n) and (H[i] > H[Left. Child(i)]) or (Right. Child(i) · n) and (H[i] > H[Right. Child(i)]) 3. if (H[Left. Child(i)] < H[Right. Child(i)]) then 4. j = Left. Child(i) 5. else 6. j = Right. Child(i) 7. swap entries H[i] and H[j] 8. i = j
More on sorting Heap - running times: Use: priority queue – a datastructure that supports: - extract-min - add key - change key value
More on sorting Heap. Sort HEAPSORT (A) 1. H = BUILD_HEAP (A) 2. n = A. length 3. for i=1 to n do 4. A[i] = EXTRACT_MIN (H) BUILD_HEAP (A) 1. initially H = ; 2. n = A. length 3. for i=1 to n do 4. ADD (H, A[i]) EXTRACT_MIN (H) 1. min = H[1] 2. H[1] = H[H. length] 3. H. length-4. HEAPIFY_DOWN (H, 1) 5. RETURN min Note (more efficient BUILD_HEAP): A different implementation of BUILD_HEAP runs in time O(n).
More on sorting Heap. Sort HEAPSORT (A) 1. H = BUILD_HEAP (A) 2. n = A. length 3. for i=1 to n do 4. A[i] = EXTRACT_MIN (H) BUILD_HEAP (A) 1. initially H = ; 2. n = A. length 3. for i=1 to n do 4. ADD (H, A[i]) Running time : EXTRACT_MIN (H) 1. min = H[1] 2. H[1] = H[H. length] 3. H. length-4. HEAPIFY_DOWN (H, 1) 5. RETURN min
Related datastructures
Sorting faster than O(n log n) ? Recall that every comparison-based sort needs at least (n log n) comparisons, thus it’s running time is (n log n). Can we possibly sort faster than O(n log n) ?
Sorting faster than O(n log n) ? Radix. Sort – a non-comparison based sort. Idea: First sort the input by the last digit.
Sorting faster than O(n log n) ? Radix. Sort – a non-comparison based sort. RADIXSORT (A) 1. d = length of the longest element in A 2. for j=1 to d do 3. COUNTSORT(A, j) // a stable sort to sort A // by the j-th last digit COUNTSORT (A, j) 1. let B[1. . 10] be an array of (empty) linked-lists 2. n = A. length 3. for i=1 to n do 4. let x be the j-th last digit of A[i] 5. add A[i] at the end of the linked-list B[x] 6. copy B[1] followed by B[2], then B[3], etc. to A Running time ?
- More more more i want more more more more we praise you
- Lirik lagu more more more we praise you
- Mikael ferm
- Running running running
- Once upon a time there was a house with a man,
- Mat0022
- Countable and uncountable cake
- Some trust in horses
- Force and motion
- They say sometimes you win some
- Fire and ice diamante poem
- Sometimes you win some
- Some say the world will end in fire some say in ice
- Why some earthquakes cause more damage than others
- Gurpreet sangha accident
- The more you study the more you learn
- The more i give to thee the more i have
- Aspire not to
- More choices more chances
- When dishes remain on a table when you yank
- Human history becomes more and more a race
- The more you take the more you leave behind
- Knowing more remembering more