The document describes various sorting algorithms and their time complexities, including counting sort, radix sort, bucket sort, and lower bounds for comparison-based sorting. Counting sort works by counting the number of occurrences of each key value and using that to place elements in the output array. Radix sort extends this idea by sorting keys digit-by-digit. Bucket sort places elements in lists based on their hashed values and sorts each list. The time complexity of these algorithms depends on the number of elements and range of keys. Any comparison-based sorting requires at least Ω(n log n) time in the worst case.
Original Description:
On this website people get all information of schools
The document describes various sorting algorithms and their time complexities, including counting sort, radix sort, bucket sort, and lower bounds for comparison-based sorting. Counting sort works by counting the number of occurrences of each key value and using that to place elements in the output array. Radix sort extends this idea by sorting keys digit-by-digit. Bucket sort places elements in lists based on their hashed values and sorts each list. The time complexity of these algorithms depends on the number of elements and range of keys. Any comparison-based sorting requires at least Ω(n log n) time in the worst case.
The document describes various sorting algorithms and their time complexities, including counting sort, radix sort, bucket sort, and lower bounds for comparison-based sorting. Counting sort works by counting the number of occurrences of each key value and using that to place elements in the output array. Radix sort extends this idea by sorting keys digit-by-digit. Bucket sort places elements in lists based on their hashed values and sorts each list. The time complexity of these algorithms depends on the number of elements and range of keys. Any comparison-based sorting requires at least Ω(n log n) time in the worst case.
let H be the number of those in which exactly one person gets his/her card back
output H/M Lower bounds number from {1,2,3,,9} 3 yes/no questions Can you always figure out the number? number from {1,2,3,,8} 3 yes/no questions Lower bounds Can you always figure out the number? number from {1,2,3,,8} 3 yes/no questions Lower bounds in {1,2,3,4} ? in {1,2} ? in {5,6} ? =1 ? =3 ? =5 ? =7 ? 1 2 3 4 5 6 7 8 Y N Y Y Y Y Y Y N N N N N N number from {1,2,3,,n} k yes/no questions Lower bounds number from {1,2,3,,n} k yes/no questions Lower bounds k = log 2 n ( number from {1,2,3,,n} k yes/no questions Lower bounds k = log 2 n ( INFORMATION THEORETIC LOWER BOUND: k> log 2 n n animals = {dog,cat,fish,eagle,snake, } yes/no questions Lower bounds INFORMATION THEORETIC LOWER BOUND: k> log 2 n sorting by comparisons yes/no questions: is A[i]>A[j] ? Lower bounds for sorting A[1..n] data are not used to control computation in any other way 1 2 3 1 3 2 2 1 3 3 1 3 1 2 3 2 1 sorting by comparisons yes/no questions: is A[i]>A[j] ? Lower bounds for sorting A[1..n] k > log 2 n! > log 2 n + log 2 (n-1) + log 2 1 > (n/2) log 2 (n/2) = O(n log n) log a*b = log a + log b Theorem: Any comparison based sorting algorithm requires O(n ln n) comparisons in the worst-case. Lower bounds for sorting Lower bounds for search in sorted array INPUT: array A[1..n], element x OUTPUT: a position of x in A if x is in A otherwise Lower bounds for search in sorted array INPUT: array A[1..n], element x OUTPUT: a position of x in A if x is in A otherwise Theorem: Any comparison based algorithm for searching an element in a sorted array requires O(ln n) comparisons in the worst-case. Lower bounds for minimum INPUT: array A[1..n] OUTPUT: the smallest element of A Lower bounds for minimum INPUT: array A[1..n] OUTPUT: the smallest element of A INFORMATION THEORETIC LOWER BOUND: at least O(ln n) comparisons ADVERSARY LOWER BOUND: at least O(n) comparisons Counting sort array A[1..n] containing numbers from {1,,k} 1 st pass: count how many times ie {1,,k} occurs 2 nd pass: put the elements in B Counting sort array A[1..n] containing numbers from {1,,k} for i 1 to k do C[i] 0 for j 1 to n do C[A[j]]++ D[1]=0 for I 1 to k+1 do D[i+1] D[i]+C[i]
for j 1 to n do D[A[j]]++ B[ D[A[j]] ] A[j] Counting sort for i 1 to k do C[i] 0 for j 1 to n do C[A[j]]++ D[1]=1 for I 1 to k-1 do D[i+1] D[i]+C[i]
for j 1 to n do B[ D[A[j]] ] A[j] D[A[j]]++
1 2 3 2 2 4 2 1 1 2 3 3 2 1 2 4 C 4 7 3 2 D 1 5 12 15 Counting sort for i 1 to k do C[i] 0 for j 1 to n do C[A[j]]++ D[1]=1 for I 1 to k-1 do D[i+1] D[i]+C[i]
for j 1 to n do B[ D[A[j]] ] A[j] D[A[j]]++
1 2 3 2 2 4 2 1 1 2 3 3 2 1 2 4 C 4 7 3 2 D 2 5 12 15 1 Counting sort for i 1 to k do C[i] 0 for j 1 to n do C[A[j]]++ D[1]=1 for I 1 to k-1 do D[i+1] D[i]+C[i]
for j 1 to n do B[ D[A[j]] ] A[j] D[A[j]]++
1 2 3 2 2 4 2 1 1 2 3 3 2 1 2 4 C 4 7 3 2 D 2 6 12 15 1 2 Counting sort for i 1 to k do C[i] 0 for j 1 to n do C[A[j]]++ D[1]=1 for I 1 to k-1 do D[i+1] D[i]+C[i]
for j 1 to n do B[ D[A[j]] ] A[j] D[A[j]]++
1 2 3 2 2 4 2 1 1 2 3 3 2 1 2 4 C 4 7 3 2 D 2 6 13 15 1 2 3 Counting sort for i 1 to k do C[i] 0 for j 1 to n do C[A[j]]++ D[1]=1 for I 1 to k-1 do D[i+1] D[i]+C[i]
for j 1 to n do B[ D[A[j]] ] A[j] D[A[j]]++
1 2 3 2 2 4 2 1 1 2 3 3 2 1 2 4 C 4 7 3 2 D 2 7 13 15 1 2 3 2 Counting sort for i 1 to k do C[i] 0 for j 1 to n do C[A[j]]++ D[1]=1 for I 1 to k-1 do D[i+1] D[i]+C[i]
for j 1 to n do B[ D[A[j]] ] A[j] D[A[j]]++
1 2 3 2 2 4 2 1 1 2 3 3 2 1 2 4 C 4 7 3 2 D 5 12 15 17 1 2 3 2 1 1 1 2 2 2 2 2 3 3 4 4 Counting sort for i 1 to k do C[i] 0 for j 1 to n do C[A[j]]++ D[1]=1 for I 1 to k-1 do D[i+1] D[i]+C[i]
for j 1 to n do B[ D[A[j]] ] A[j] D[A[j]]++
stable sort = after sorting the items with the same key dont switch order running time = O(n+k) Counting sort for i 1 to k do C[i] 0 for j 1 to n do C[A[j]]++ D[1]=1 for I 1 to k-1 do D[i+1] D[i]+C[i]
for j 1 to n do B[ D[A[j]] ] A[j] D[A[j]]++
stable sort = after sorting the items with the same key dont switch order running time = O(n+k) What if e.g., k = n 2 ? Radix sort array A[1..n] containing numbers from {0,,k 2 - 1} 1) sort using counting sort with key = x mod k 2) sort using counting sort with key = x/k
Running time = ? Radix sort array A[1..n] containing numbers from {0,,k 2 - 1} 1) sort using counting sort with key = x mod k 2) sort using counting sort with key = x/k
Running time = O(n + k) Radix sort array A[1..n] containing numbers from {0,,k 2 - 1} example k=10 28 21 42 43 23 32 70 18 29 20 70 20 21 42 32 43 23 28 18 29 Radix sort array A[1..n] containing numbers from {0,,k 2 - 1} example k=10 28 21 42 43 23 32 70 18 29 20 70 20 21 42 32 43 23 28 18 29 Radix sort array A[1..n] containing numbers from {0,,k 2 - 1} example k=10 28 21 42 43 23 32 70 18 29 20 70 20 21 42 32 43 23 28 18 29 18 20 21 23 28 29 32 42 43 70 Radix sort array A[1..n] containing numbers from {0,,k d - 1} 1) sort using counting sort with key = x mod k 2) sort using counting sort with key = x/k mod k 3) sort using counting sort with key = x/k 2 mod k
d) sort using counting sort with key = x/k d-1 mod k Radix sort array A[1..n] containing numbers from {0,,k d - 1} Correctness: after s-th step the numbers are sorted according to x mod k s Proof: By induction. Base case s=1 is trivial. 1) sort using counting sort with key = x mod k Radix sort array A[1..n] containing numbers from {0,,k d - 1} Correctness: after s-th step the numbers are sorted according to x mod k s Proof: Now assume IH and execute s+1 st step. Let x,y be such that x mod k s+1 < y mod k s+1 . Then either x/k s mod k < y/k s mod k or x/k s mod k = y/k s mod k and x mod k s < y mod k s Bucket sort linear time sorting algorithm on average Assume some distribution on input. INPUT: n independently random numbers from the uniform distribution on the interval [0,1]. Bucket sort INPUT: n independently random numbers from the uniform distribution on the interval [0,1]. for i 1 to n do insert A[i] into list B[ A[i]*n ]
for i 0 to n-1 do sort list B[i]
output lists B[0],,B[n-1] Bucket sort INPUT: n independently random numbers from the uniform distribution on the interval [0,1]. for i 1 to n do insert A[i] into list B[ A[i]*n ]
for i 0 to n-1 do sort list B[i]
output lists B[0],,B[n-1] 0.13, 0.23, 0.56, 0.74, 0.18, 0.34, 0.12, 0.82, 0.14, 0.19 Bucket sort INPUT: n independently random numbers from the uniform distribution on the interval [0,1]. for i 1 to n do insert A[i] into list B[ A[i]*n ]
for i 0 to n-1 do sort list B[i]
output lists B[0],,B[n-1] 0.13, 0.23, 0.56, 0.74, 0.18, 0.34, 0.12, 0.52, 0.14, 0.19 1 2 5 7 1 3 1 5 1 1 B[1]: 0.13, 0.18, 0.12, 0.14, 0.19 B[2]: 0.23 B[3]: 0.34 B[5]: 0.56, 0.52 B[7]: 0.74 Bucket sort INPUT: n independently random numbers from the uniform distribution on the interval [0,1]. for i 1 to n do insert A[i] into list B[ A[i]*n ]
for i 0 to n-1 do sort list B[i]
output lists B[0],,B[n-1] 0.13, 0.23, 0.56, 0.74, 0.18, 0.34, 0.12, 0.52, 0.14, 0.19 1 2 5 7 1 3 1 5 1 1 B[1]: 0.12, 0.13, 0.14, 0.18, 0.19 B[2]: 0.23 B[3]: 0.34 B[5]: 0.52, 0.56 B[7]: 0.74 Bucket sort for i 1 to n do insert A[i] into list B[ A[i]*n ]
for i 0 to n-1 do sort list B[i]
output lists B[0],,B[n-1] assume we use insert-sort
worst-case running time? Bucket sort for i 1 to n do insert A[i] into list B[ A[i]*n ]
for i 0 to n-1 do sort list B[i]
output lists B[0],,B[n-1] assume we use insert-sort
average-case running time? X 0 , X 1 , , X n-1 where X i is the number of items that fall inside the i-th bucket Bucket sort X 0 , X 1 , , X n-1 where X i is the number of items that fall inside the i-th bucket X 0 2 + X 1 2 + + X n-1 2 What is E[X 0 2 + X 1 2 + + X n-1 2 ] ? E[X 0 2 + + X n-1 2 ] = E[X 0 2 ] + + E[X n-1 2 ] = n E[X 0 2 ] linearity of expectation symmetry of the problem Bucket sort E[X 0 2 ] What is E[X 0 ] ? 0 (1-p) n
1 n (1-p) n-1
k binomial(n,k) p k (1-p) n-k
n p n value of X 0 p=1/n Bucket sort E[X 0 2 ] E[X 0 ] = 1 0 (1-p) n
1 n (1-p) n-1
k binomial(n,k) p k (1-p) n-k
n p n p=1/n E[X 0 ] = k * binomial(n,k) p k (1-p) n-k
k=0 n Bucket sort E[X 0 2 ] E[X 0 ] = 1 p=1/n E[X 0 ] = k * binomial(n,k) p k (1-p) n-k
k=1 n binomial (n,k) = (n/k) * binomial (n-1,k-1)
binomial(n,k) p k (1-p) n-k = 1 k=0 n Bucket sort E[X 0 2 ] E[X 0 ] = 1 p=1/n E[X 0 ] = n* binomial(n-1,k-1) p k (1-p) n-k
k=1 n
binomial(n,k) p k (1-p) n-k = 1 k=0 n = n*p binomial(n-1,k-1) p k-1 (1-p) n-k
= n*p k=1 n Bucket sort E[X 0 2 ] 0 (1-p) n
1 n (1-p) n-1
k binomial(n,k) p k (1-p) n-k
n p n p=1/n E[X 0 2 ]= k 2 * binomial(n,k) p k (1-p) n-k
k=0 n Bucket sort E[X 0 2 ] p=1/n E[X 0 2 ]= k 2 * binomial(n,k) p k (1-p) n-k
k=0 n = k * binomial(n,k) p k (1-p) n-k
k=0 n + k(k-1) * binomial(n,k) p k (1-p) n-k
k=0 n Bucket sort E[X 0 2 ] p=1/n E[X 0 2 ]= k 2 * binomial(n,k) p k (1-p) n-k
k=0 n = k * binomial(n,k) p k (1-p) n-k
k=0 n + k(k-1) * binomial(n,k) p k (1-p) n-k
k=0 n n*p Bucket sort E[X 0 2 ] p=1/n E[X 0 2 ]= k(k-1) * binomial(n,k) p k (1-p) n-k