Sorting in Linear Time Comp 550, Spring 2015. Linear-time Sorting Depends on a key assumption: numbers to be sorted are integers in {0, 1, 2, …, k}. Input:

Slides:



Advertisements
Similar presentations
Sorting in Linear Time Introduction to Algorithms Sorting in Linear Time CSE 680 Prof. Roger Crawfis.
Advertisements

Analysis of Algorithms
Sorting in linear time (for students to read) Comparison sort: –Lower bound:  (nlgn). Non comparison sort: –Bucket sort, counting sort, radix sort –They.
Analysis of Algorithms CS 477/677 Linear Sorting Instructor: George Bebis ( Chapter 8 )
Non-Comparison Based Sorting
CSE 3101: Introduction to the Design and Analysis of Algorithms
MS 101: Algorithms Instructor Neelima Gupta
1 Sorting in Linear Time How can we do better?  CountingSort  RadixSort  BucketSort.
Sorting in linear time Comparison sort: –Lower bound:  (nlgn). Non comparison sort: –Bucket sort, counting sort, radix sort –They are possible in linear.
Mudasser Naseer 1 5/1/2015 CSC 201: Design and Analysis of Algorithms Lecture # 9 Linear-Time Sorting Continued.
Counting Sort Non-comparison sort. Precondition: n numbers in the range 1..k. Key ideas: For each x count the number C(x) of elements ≤ x Insert x at output.
On RAM PRIORITY QUEUES MIKKEL THORUP. Objective Sorting is a basic technique for a lot of algorithms. e.g. find the minimum edge of the graph, scheduling,
Lower bound for sorting, radix sort COMP171 Fall 2005.
CSCE 3110 Data Structures & Algorithm Analysis
Lower bound for sorting, radix sort COMP171 Fall 2006.
Lecture 5: Linear Time Sorting Shang-Hua Teng. Sorting Input: Array A[1...n], of elements in arbitrary order; array size n Output: Array A[1...n] of the.
CS 253: Algorithms Chapter 8 Sorting in Linear Time Credit: Dr. George Bebis.
Comp 122, Spring 2004 Keys into Buckets: Lower bounds, Linear-time sort, & Hashing.
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu.
Comp 122, Spring 2004 Lower Bounds & Sorting in Linear Time.
Tirgul 4 Subjects of this Tirgul: Counting Sort Radix Sort Bucket Sort.
Analysis of Algorithms CS 477/677 Midterm Exam Review Instructor: George Bebis.
Lecture 5: Master Theorem and Linear Time Sorting
Analysis of Algorithms CS 477/677
Data Structures, Spring 2004 © L. Joskowicz 1 Data Structures – LECTURE 5 Linear-time sorting Can we do better than comparison sorting? Linear-time sorting.
David Luebke 1 7/2/2015 Linear-Time Sorting Algorithms.
Lower Bounds for Comparison-Based Sorting Algorithms (Ch. 8)
David Luebke 1 8/17/2015 CS 332: Algorithms Linear-Time Sorting Continued Medians and Order Statistics.
Computer Algorithms Lecture 11 Sorting in Linear Time Ch. 8
Sorting in Linear Time Lower bound for comparison-based sorting
CSE 373 Data Structures Lecture 15
1 Sorting in O(N) time CS302 Data Structures Section 10.4.
Linear Sorts Chapter 12.3, Last Updated: :39 AM CSE 2011 Prof. J. Elder Linear Sorts?
David Luebke 1 10/13/2015 CS 332: Algorithms Linear-Time Sorting Algorithms.
CSC 41/513: Intro to Algorithms Linear-Time Sorting Algorithms.
Analysis of Algorithms CS 477/677
Fall 2015 Lecture 4: Sorting in linear time
Data Structures and Algorithms (AT70.02) Comp. Sc. and Inf. Mgmt. Asian Institute of Technology Instructor: Prof. Sumanta Guha Slide Sources: CLRS “Intro.
Mudasser Naseer 1 11/5/2015 CSC 201: Design and Analysis of Algorithms Lecture # 8 Some Examples of Recursion Linear-Time Sorting Algorithms.
Searching and Sorting Recursion, Merge-sort, Divide & Conquer, Bucket sort, Radix sort Lecture 5.
COSC 3101A - Design and Analysis of Algorithms 6 Lower Bounds for Sorting Counting / Radix / Bucket Sort Many of these slides are taken from Monica Nicolescu,
1 Algorithms CSCI 235, Fall 2015 Lecture 17 Linear Sorting.
Analysis of Algorithms CS 477/677 Lecture 8 Instructor: Monica Nicolescu.
Linear Sorting. Comparison based sorting Any sorting algorithm which is based on comparing the input elements has a lower bound of Proof, since there.
Lecture 5 Algorithm Analysis Arne Kutzner Hanyang University / Seoul Korea.
CS6045: Advanced Algorithms Sorting Algorithms. Sorting So Far Insertion sort: –Easy to code –Fast on small inputs (less than ~50 elements) –Fast on nearly-sorted.
David Luebke 1 7/2/2016 CS 332: Algorithms Linear-Time Sorting: Review + Bucket Sort Medians and Order Statistics.
Lower Bounds & Sorting in Linear Time
Sorting.
Linear-Time Sorting Continued Medians and Order Statistics
MCA 301: Design and Analysis of Algorithms
Introduction to Algorithms
Lecture 5 Algorithm Analysis
Linear Sorting Sections 10.4
Keys into Buckets: Lower bounds, Linear-time sort, & Hashing
Ch8: Sorting in Linear Time Ming-Te Chi
Lecture 5 Algorithm Analysis
Sorting in linear time (for students to read)
Linear Sort "Our intuition about the future is linear. But the reality of information technology is exponential, and that makes a profound difference.
Linear Sorting Sorting in O(n) Jeff Chastine.
Linear Sort "Our intuition about the future is linear. But the reality of information technology is exponential, and that makes a profound difference.
Lower Bounds & Sorting in Linear Time
Linear Sorting Section 10.4
Linear-Time Sorting Algorithms
Lecture 5 Algorithm Analysis
Algorithms CSCI 235, Spring 2019 Lecture 18 Linear Sorting
The Selection Problem.
Linear Time Sorting.
Lecture 5 Algorithm Analysis
Presentation transcript:

Sorting in Linear Time Comp 550, Spring 2015

Linear-time Sorting Depends on a key assumption: numbers to be sorted are integers in {0, 1, 2, …, k}. Input: A[1..n], where A[j]  {0, 1, 2, …, k} for j = 1, 2, …, n. Array A and values n and k are given as parameters. Output: B[1..n] sorted. B is assumed to be already allocated and is given as a parameter. Auxiliary Storage: S[0..k] Runs in linear time if k = O(n). Example: On board. Comp 550, Spring 2015

Counting-Sort (A, B, k) CountingSort(A, B, k) 1. for i  0 to k 2. do S[i]  0 3. for j  1 to length[A] 4. do S[A[j]]  S[A[j]] for i  1 to k 6. do S[i]  S[i] + S[i –1] 7. for j  length[A] downto 1 8. do B[S[A[ j ]]]  A[j] 9. S[A[j]]  S[A[j]]–1 CountingSort(A, B, k) 1. for i  0 to k 2. do S[i]  0 3. for j  1 to length[A] 4. do S[A[j]]  S[A[j]] for i  1 to k 6. do S[i]  S[i] + S[i –1] 7. for j  length[A] downto 1 8. do B[S[A[ j ]]]  A[j] 9. S[A[j]]  S[A[j]]–1 Comp 550, Spring 2015 O(k)O(k) O(k)O(k) O(n)O(n) O(n)O(n) The overall time is O(n+k). When we have k=O(n), the worst case is O(n). No comparisons made: it uses actual values of the elements to index into an array.

Stableness Stable sorting algorithms maintain the relative order of records with equal keys (i.e. values). That is, a sorting algorithm is stable if whenever there are two records R and S with the same key and with R appearing before S in the original list, R will appear before S in the sorted list. Comp 550, Spring 2015

Radix Sort It is the algorithm for using the machine that extends the technique to multi-column sorting. Key idea: sort on the “least significant digit” first and on the remaining digits in sequential order. The sorting method used to sort each digit must be “stable”. Comp 550, Spring 2015

An Example  495  446     Comp 550, Spring 2015 Input After sorting on LSD After sorting on middle digit After sorting on MSD

Radix-Sort(A, d) Correctness of Radix Sort By induction on the number of digits sorted. Assume that radix sort works for d – 1 digits. Show that it works for d digits. Radix sort of d digits  radix sort of the low-order d – 1 digits followed by a sort on digit d. Comp 550, Spring 2015 RadixSort(A, d) 1. for i  1 to d 2. do use a stable sort to sort array A on digit i RadixSort(A, d) 1. for i  1 to d 2. do use a stable sort to sort array A on digit i

Correctness of Radix Sort By induction hypothesis, the sort of the low-order d – 1 digits works, so just before the sort on digit d, the elements are in order according to their low-order d – 1 digits. The sort on digit d will order the elements by their d th digit. Consider two elements, a and b, with d th digits a d and b d : If a d < b d, the sort will place a before b, since a < b regardless of the low-order digits. If a d > b d, the sort will place a after b, since a > b regardless of the low-order digits. If a d = b d, the sort will leave a and b in the same order, since the sort is stable. But that order is already correct, since the correct order of is determined by the low-order digits when their d th digits are equal. Comp 550, Spring 2015

Algorithm Analysis Each pass over n d-digit numbers then takes time  (n+k). (Assuming counting sort is used for each pass.) There are d passes, so the total time for radix sort is  (d (n+k)). When d is a constant and k = O(n), radix sort runs in linear time. Comp 550, Spring 2015

Bucket Sort Assumes input is generated by a random process that distributes the elements uniformly over [0, 1). Idea: – Divide [0, 1) into n equal-sized buckets. – Distribute the n input values into the buckets. – Sort each bucket. – Then go through the buckets in order, listing elements in each one. Comp 550, Spring 2015

An Example Comp 550, Spring 2015

Bucket-Sort (A) BucketSort(A) 1. n  length[A] 2. for i  1 to n 3. do insert A[i] into list B[  nA[i]  ] 4. for i  0 to n – 1 5. do sort list B[i] with insertion sort 6.concatenate the lists B[i]s together in order 7.return the concatenated lists BucketSort(A) 1. n  length[A] 2. for i  1 to n 3. do insert A[i] into list B[  nA[i]  ] 4. for i  0 to n – 1 5. do sort list B[i] with insertion sort 6.concatenate the lists B[i]s together in order 7.return the concatenated lists Comp 550, Spring 2015 Input: A[1..n], where 0  A[i] < 1 for all i. Auxiliary array: B[0..n – 1] of linked lists, each list initially empty.

Correctness of BucketSort Consider A[i], A[j]. Assume w.o.l.o.g, A[i]  A[j]. Then,  n  A[i]    n  A[j] . So, A[i] is placed into the same bucket as A[j] or into a bucket with a lower index. – If same bucket, insertion sort fixes up. – If earlier bucket, concatenation of lists fixes up. Comp 550, Spring 2015

Analysis Relies on no bucket getting too many values. All lines except insertion sorting in line 5 take O(n) altogether. Intuitively, if each bucket gets a constant number of elements, it takes O(1) time to sort each bucket  O(n) sort time for all buckets. We “expect” each bucket to have few elements, since the average is 1 element per bucket. But we need to do a careful analysis. Comp 550, Spring 2015

Analysis – Contd. RV n i = no. of elements placed in bucket B[i]. Insertion sort runs in quadratic time. Hence, time for bucket sort is: Comp 550, Spring 2015 (8.1)

Analysis – Contd. Claim: E[n i 2 ] = 2 – 1/n. Proof: Define indicator random variables. – X ij = I{A[j] falls in bucket i} – Pr{A[j] falls in bucket i} = 1/n. – n i = Comp 550, Spring 2015 (8.2)

Analysis – Contd. Comp 550, Spring 2015 (8.3)

Analysis – Contd. Comp 550, Spring 2015

Analysis – Contd. Comp 550, Spring 2015 Substituting (8.2) in (8.1), we have, (8.3) is hence,