CSC 41/513: Intro to Algorithms Linear-Time Sorting Algorithms.

Slides:



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

Analysis of Algorithms
Analysis of Algorithms CS 477/677 Linear Sorting Instructor: George Bebis ( Chapter 8 )
Sorting in Linear Time Comp 550, Spring Linear-time Sorting Depends on a key assumption: numbers to be sorted are integers in {0, 1, 2, …, k}. Input:
Non-Comparison Based Sorting
Linear Sorts Counting sort Bucket sort Radix sort.
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.
Mudasser Naseer 1 5/1/2015 CSC 201: Design and Analysis of Algorithms Lecture # 9 Linear-Time Sorting Continued.
CSE332: Data Abstractions Lecture 14: Beyond Comparison Sorting Dan Grossman Spring 2010.
CSC 211 Data Structures Lecture 20
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.
CSCE 3110 Data Structures & Algorithm Analysis
1 SORTING Dan Barrish-Flood. 2 heapsort made file “3-Sorting-Intro-Heapsort.ppt”
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.
Comp 122, Spring 2004 Lower Bounds & Sorting in Linear Time.
Lecture 5: Master Theorem and Linear Time Sorting
Analysis of Algorithms CS 477/677
1 Today’s Material Lower Bounds on Comparison-based Sorting Linear-Time Sorting Algorithms –Counting Sort –Radix Sort.
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
Ch. 8 & 9 – Linear Sorting and Order Statistics What do you trade for speed?
1 Sorting in O(N) time CS302 Data Structures Section 10.4.
David Luebke 1 10/13/2015 CS 332: Algorithms Linear-Time Sorting Algorithms.
Introduction to Algorithms Jiafen Liu Sept
The Selection Problem. 2 Median and Order Statistics In this section, we will study algorithms for finding the i th smallest element in a set of n elements.
CSE332: Data Abstractions Lecture 14: Beyond Comparison Sorting Dan Grossman Spring 2012.
Analysis of Algorithms CS 477/677
September 29, Algorithms and Data Structures Lecture V Simonas Šaltenis Aalborg University
Fall 2015 Lecture 4: Sorting in linear time
September 26, 2005Copyright © Erik D. Demaine and Charles E. Leiserson L5.1 Introduction to Algorithms 6.046J/18.401J Prof. Erik Demaine LECTURE5.
Mudasser Naseer 1 11/5/2015 CSC 201: Design and Analysis of Algorithms Lecture # 8 Some Examples of Recursion Linear-Time Sorting Algorithms.
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.
CS6045: Advanced Algorithms Sorting Algorithms. Heap Data Structure A heap (nearly complete binary tree) can be stored as an array A –Root of tree is.
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 6/26/2016 CS 332: Algorithms Linear-Time Sorting Continued Medians and Order Statistics.
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
Algorithm Design and Analysis (ADA)
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
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
Linear Time Sorting.
Lecture 5 Algorithm Analysis
Presentation transcript:

CSC 41/513: Intro to Algorithms Linear-Time Sorting Algorithms

Sorting So Far l Insertion sort: n Easy to code n Fast on small inputs (less than ~100 elements) n Fast on nearly-sorted inputs n O(n 2 ) worst case n O(n 2 ) average (equally-likely inputs) case n O(n 2 ) reverse-sorted case

Sorting So Far l Merge sort: n Divide-and-conquer: u Split array in half u Recursively sort subarrays u Linear-time merge step n O(n lg n) worst case n Doesn’t sort in place

Sorting So Far l Heap sort: n Uses the very useful heap data structure u Complete binary tree u Heap property: parent key > children’s keys n O(n lg n) worst case n Sorts in place n Fair amount of shuffling memory around

Sorting So Far l Quick sort: n Divide-and-conquer: u Partition array into two subarrays, recursively sort u All of first subarray < all of second subarray u No merge step needed! n O(n lg n) average case n Fast in practice n O(n 2 ) worst case u Naïve implementation: worst case on sorted input u Address this with randomized quicksort

How Fast Can We Sort? l We will provide a lower bound, then beat it l First, an observation: all of the sorting algorithms so far are comparison sorts n The only operation used to gain ordering information about a sequence is the pairwise comparison of two elements n Theorem: all comparison sorts are  (n lg n) u A comparison sort must do O(n) comparisons (why?) u What about the gap between O(n) and O(n lg n)

Decision Trees l Decision trees provide an abstraction of comparison sorts n A decision tree represents the comparisons made by a comparison sort. Every thing else ignored l What do the leaves represent? l How many leaves must there be?

Decision Trees l Decision trees can model comparison sorts. For a given algorithm: n One tree for each n n Tree paths are all possible execution traces n What’s the longest path in a decision tree for insertion sort? For merge sort? l What is the asymptotic height of any decision tree for sorting n elements? l Answer:  (n lg n) (now let’s prove it…)

Lower Bound For Comparison Sorting l Thm: Any decision tree that sorts n elements has height  (n lg n) l What’s the minimum # of leaves? l What’s the maximum # of leaves of a binary tree of height h? l Clearly the minimum # of leaves is less than or equal to the maximum # of leaves

Lower Bound For Comparison Sorting l So we have… n!  2 h l Taking logarithms: lg (n!)  h l Stirling’s approximation tells us: l Thus:

Lower Bound For Comparison Sorting l So we have l Thus the minimum height of a decision tree is  (n lg n)

Lower Bound For Comparison Sorts l Thus the time to comparison sort n elements is  (n lg n) l Corollary: Heapsort and Mergesort are asymptotically optimal comparison sorts l But the name of this lecture is “Sorting in linear time”! n How can we do better than  (n lg n)?

Sorting In Linear Time l Counting sort n No comparisons between elements! n But…depends on assumption about the numbers being sorted u We assume numbers are in the range 1.. k n The algorithm: u Input: A[1..n], where A[j]  {1, 2, 3, …, k} u Output: B[1..n], sorted (notice: not sorting in place) u Also: Array C[1..k] for auxiliary storage

Counting Sort 1CountingSort(A, B, k) 2for i=1 to k 3C[i]= 0; 4for j=1 to n 5C[A[j]] += 1; 6for i=2 to k 7C[i] = C[i] + C[i-1]; 8for j=n downto 1 9B[C[A[j]]] = A[j]; 10C[A[j]] -= 1; Work through example: A={ }, k = 4

Counting Sort 1CountingSort(A, B, k) 2for i=1 to k 3C[i]= 0; 4for j=1 to n 5C[A[j]] += 1; 6for i=2 to k 7C[i] = C[i] + C[i-1]; 8for j=n downto 1 9B[C[A[j]]] = A[j]; 10C[A[j]] -= 1; What will be the running time? Takes time O(k) Takes time O(n)

Counting Sort l Total time: O(n + k) n Usually, k = O(n) n Thus counting sort runs in O(n) time l But sorting is  (n lg n)! n No contradiction--this is not a comparison sort (in fact, there are no comparisons at all!) n Notice that this algorithm is stable

Counting Sort l Why don’t we always use counting sort? l Because it depends on range k of elements l Could we use counting sort to sort 32 bit integers? Why or why not? l Answer: no, k too large (2 32 = 4,294,967,296)

Counting Sort l How did IBM get rich originally? l Answer: punched card readers for census tabulation in early 1900’s. n In particular, a card sorter that could sort cards into different bins u Each column can be punched in 12 places u Decimal digits use 10 places n Problem: only one column can be sorted on at a time

Radix Sort l Intuitively, you might sort on the most significant digit, then the second msd, etc. l Problem: lots of intermediate piles of cards (read: scratch arrays) to keep track of l Key idea: sort the least significant digit first RadixSort(A, d) for i=1 to d StableSort(A) on digit i n Example: Fig 8.3 n Another example: 62, 39, 41, 12, 46, 30, 66

Radix Sort l Can we prove it will work? l Sketch of an inductive argument (induction on the number of passes): n Assume lower-order digits {j: j<i}are sorted n Show that sorting next digit i leaves array correctly sorted u If two digits at position i are different, ordering numbers by that digit is correct (lower-order digits irrelevant) u If they are the same, numbers are already sorted on the lower-order digits. Since we use a stable sort, the numbers stay in the right order

Radix Sort l What sort will we use to sort on digits? l Counting sort is obvious choice: n Sort n numbers on digits that range from 0..k-1 (i.e., base k) n Time: O(n + k) l Each pass over n numbers with d digits takes time O(n+k), so total time O(dn+dk) n When d is constant and k=O(n), takes O(n) time l How many bits in a computer word?

Radix Sort l Problem: sort 1 million 64-bit numbers n Treat as four-digit radix 2 16 numbers n Can sort in just four passes with radix sort! l Compares well with typical O(n lg n) comparison sort n Requires approx lg n = 20 operations per number being sorted l So why would we ever use anything but radix sort?

Radix Sort l In general, radix sort based on counting sort is n Fast n Asymptotically fast (i.e., O(n)) n Simple to code n A good choice l To think about: Can radix sort be used on floating-point numbers?

Bucket Sort l Bucket sort n Assumption: input is n reals from [0, 1) n Basic idea: u Create n linked lists (buckets) to divide interval [0,1) into subintervals of size 1/n u Add each input element to appropriate bucket and sort buckets with insertion sort n Uniform input distribution  O(1) bucket size u Therefore the expected total time is O(n) n These ideas will return when we study hash tables

The End