Lec 5
Lec 5
Algorithms-I
Lecture 5
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.3
Decision-tree example
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.6
Decision-tree example
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.10
Sorting in linear
time
Counting sort: No comparisons between elements.
•Input: A[1 . . n], where A[ j]∈{1, 2, …, k} .
•Output: B[1 . . n], sorted.
•Auxiliary storage: C[1 . . k] .
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.11
Counting sort
for i ← 1 to k
do C[i] ← 0
for j ← 1 to n
do C[A[ j]] ← C[A[ j]] + ⊳ C[i] = |{key = i}|
1
⊳ C[i] = |{key ≤ i}|
for i ← 2 to k
do C[i] ← C[i] + C[i–1]
for j ← n downto 1
do B[C[A[ j]]] ← A[ j]
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.12
Counting-sort example
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C:
B:
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.13
Loop 1
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 00 00 00 00
B:
for i ← 1 to k
do C[i] ← 0
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.14
Loop 2
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 00 00 00 11
B:
for j ← 1 to n
do C[A[ j]] ← C[A[ j]] + ⊳ C[i] = |{key = i}|
1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.15
Loop 2
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 00 00 11
B:
for j ← 1 to n
do C[A[ j]] ← C[A[ j]] + ⊳ C[i] = |{key = i}|
1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.16
Loop 2
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 00 11 11
B:
for j ← 1 to n
do C[A[ j]] ← C[A[ j]] + ⊳ C[i] = |{key = i}|
1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.17
Loop 2
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 00 11 22
B:
for j ← 1 to n
do C[A[ j]] ← C[A[ j]] + ⊳ C[i] = |{key = i}|
1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.18
Loop 2
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 00 22 22
B:
for j ← 1 to n
do C[A[ j]] ← C[A[ j]] + ⊳ C[i] = |{key = i}|
1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.19
Loop 3
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 00 22 22
B: C': 11 11 22 22
for i ← 2 to k
do C[i] ← C[i] + C[i–1] ⊳ C[i] = |{key ≤ i}|
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.20
Loop 3
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 00 22 22
B: C': 11 11 33 22
for i ← 2 to k
do C[i] ← C[i] + C[i–1] ⊳ C[i] = |{key ≤ i}|
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.21
Loop 3
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 00 22 22
B: C': 11 11 33 55
for i ← 2 to k
do C[i] ← C[i] + C[i–1] ⊳ C[i] = |{key ≤ i}|
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.22
Loop 4
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 11 33 55
B: C': 33 11 11 22 55
for j ← n downto 1
do B[C[A[ j]]] ← A[ j]
C[A[ j]] ← C[A[ j]] –
September 26, 2005 1 © 2001-5 Erik D. Demaine and Charles E. Leiserson
Copyright L5.23
Loop 4
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 11 22 55
B: C': 33 44 11 11 22 44
for j ← n downto 1
do B[C[A[ j]]] ← A[ j]
C[A[ j]] ← C[A[ j]] – 1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.24
Loop 4
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 11 22 44
B: C': 33 33 44 11 11 11 44
for j ← n downto 1
do B[C[A[ j]]] ← A[ j]
C[A[ j]] ← C[A[ j]] – 1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.25
Loop 4
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 11 11 11 44
B: C':11 33 33 44 00 11 11 44
for j ← n downto 1
do B[C[A[ j]]] ← A[ j]
C[A[ j]] ← C[A[ j]] – 1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.26
Loop 4
1 2 3 4 5 1 2 3 4
A: 44 11 33 44 33 C: 00 11 11 44
B: C':11 33 33 44 44 00 11 11 33
for j ← n downto 1
do B[C[A[ j]]] ← A[ j]
C[A[ j]] ← C[A[ j]] – 1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.27
Analysis
for i ← 1 to k
Θ(k)
do C[i] ← 0
for j ← 1 to n
Θ(n)
do C[A[ j]] ← C[A[ j]] +
1
Θ(k)
for i ← 2 to k
do C[i] ← C[i] + C[i–1]
Θ(n) for j ← n downto 1
do B[C[A[ j]]] ← A[ j]
Θ(n + k) C[A[ j]] ← C[A[ j]] –
1
September 26, 2005 Copyright © 2001-5 Erik D. Demaine and Charles E. Leiserson L5.28
Running time
A: 44 11 33 44 33
11 33 33 44 44
B: