1 / 31

CSE 326: Data Structures Lecture 24 Spring Quarter 2001 Sorting, Part B

Learn about the Bin Sort and Radix Sort algorithms, which can efficiently sort items in linear time. Understand their running times, stability, and how they work.

tnewberry
Download Presentation

CSE 326: Data Structures Lecture 24 Spring Quarter 2001 Sorting, Part B

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSE 326: Data StructuresLecture 24Spring Quarter 2001Sorting, Part B David Kaplan davek@cs

  2. Outline Outline • Sorting: The Problem Space Revisited • Sorting in Linear Time • Bin (aka Bucket) Sort • Radix Sort • Memory Hierarchy • Other performance factors besides running time

  3. Sorting:The Problem Space Revisited • General problem Given a set of N orderable items, put them in order • Without (significant) loss of generality, assume: • Items are integers • Ordering is  Most sorting problems can be mapped to the above in linear time • But what if we have more information available to us?

  4. Sorting in Linear Time • Sorting by Comparison • Only information available to us is the set of N items to be sorted • Only operation available to us is pairwise comparison between 2 items • Best running time under these constraints is O(N lg(N)) • What if we relax the constraints? • Know something in advance about item values

  5. BinSort(a.k.a. BucketSort) • If keys are known to be in {1, …, K} • Have array of size K • Put items into correct bin (cell) of array, based on key

  6. BinSort example K=5 list=(5,1,3,4,3,2,1,1,5,4,5) Sorted list: 1,1,1,2,3,3,4,4,5,5,5

  7. BinSort Pseudocode procedure BinSort (List L,K) LinkedList bins[1..K] // Each element of array bins is linked list. // Could also BinSort with array of arrays. For Each number x in L bins[x].Append(x) End For Fori = 1..K For Each number x in bins[i] Print x End For End For

  8. BinSort Running Time • K is a constant • BinSort is linear time • K is variable • Not simply linear time • K is large (e.g. 232) • Impractical

  9. BinSort is “stable” • Stable Sorting algorithm • Items in input with the same key end up in the same order as when they began. • Important if keys have associated values • Critical for RadixSort

  10. Mr. Radix Herman Hollerith Born February 29, 1860 - Died November 17, 1929 Art of Compiling Statistics; Apparatus for Compiling Statistics Patent Nos. 395,781; 395,782; 395,783 Inducted 1990 Herman Hollerith invented and developed a punch-card tabulation machine system that revolutionized statistical computation. Born in Buffalo, New York, the son of German immigrants, Hollerith enrolled in the City College of New York at age 15 and graduated from the Columbia School of Mines with distinction at the age of 19. His first job was with the U.S. Census effort of 1880. Hollerith successively taught mechanical engineering at the Massachusetts Institute of Technology and worked for the U.S. Patent Office. The young engineer developed an electrically actuated brake system for the railroads, but the Westinghouse steam-actuated brake prevailed. Hollerith began working on the tabulating system during his days at MIT, filing for the first patent in 1884. He developed a hand-fed 'press' that sensed the holes in punched cards; a wire would pass through the holes into a cup of mercury beneath the card closing the electrical circuit. This process triggered mechanical counters and sorter bins and tabulated the appropriate data. Hollerith's system-including punch, tabulator, and sorter-allowed the official 1890 population count to be tallied in six months, and in another two years all the census data was completed and defined; the cost was $5 million below the forecasts and saved more than two years' time. His later machines mechanized the card-feeding process, added numbers, and sorted cards, in addition to merely counting data. In 1896 Hollerith founded the Tabulating Machine Company, forerunner of Computer Tabulating Recording Company (CTR). He served as a consulting engineer with CTR until retiring in 1921. In 1924 CTR changed its name to IBM- the International Business Machines Corporation. Source: National Institute of Standards and Technology (NIST) Virtual Museum - http://museum.nist.gov/panels/conveyor/hollerithbio.htm

  11. RadixSort • Radix = “The base of a number system” (Webster’s dictionary) • alternate terminology: radix is number of bits needed to represent 0 to base-1; can say “base 8” or “radix 3” • Idea: BinSort on each digit, bottom up.

  12. RadixSort – magic! It works. • Input list: 126, 328, 636, 341, 416, 131, 328 • BinSort on lower digit:341, 131, 126, 636, 416, 328, 328 • BinSort result on next-higher digit:416, 126, 328, 328, 131, 636, 341 • BinSort that result on highest digit:126, 131, 328, 328, 341, 416, 636

  13. RadixSort – how it works 126 328 636 341 416 131 328 0 0 0 1 126 131 1 416 1 341 131 2 2 126 328 328 2 3 328 328 341 3 131 636 3 4 416 4 341 4 5 5 5 6 636 6 6 126 636 416 7 7 7 8 8 8 328 328 9 9 9 126 131 328 328 341 416 636

  14. Not magic. It provably works. • Keys • K-digit numbers • base B • Claim: after ith BinSort, least significant i digits are sorted. • e.g. B=10, i=3, keys are 1776 and 8234. 8234 comes before 1776 for last 3 digits.

  15. RadixSortProof by Induction • Base case: • i=0. 0 digits are sorted (that wasn’t hard!) • Induction step • assume for i, prove for i+1. • consider two numbers: X, Y. Say Xi is ith digit of X (from the right) • Xi+1< Yi+1 then i+1th BinSort will put them in order • Xi+1> Yi+1 , same thing • Xi+1= Yi+1 , order depends on last i digits. Induction hypothesis says already sorted for these digits. (Careful about ensuring that your BinSort preserves order aka “stable”…)

  16. What data types can you RadixSort? • Any type T that can be BinSorted • Any type T that can be broken into parts A and B, such that: • You can reconstruct T from A and B • A can be RadixSorted • B can be RadixSorted • A is always more significant than B, in ordering

  17. Example: • 1-digit numbers can be BinSorted • 2 to 5-digit numbers can be BinSorted without using too much memory • 6-digit numbers, broken up into A=first 3 digits, B=last 3 digits. • A and B can reconstruct original 6-digits • A and B each RadixSortable as above • A more significant than B

  18. RadixSorting Strings • 1 Character can be BinSorted • Break strings into characters • Need to know length of biggest string (or calculate this on the fly). • Null-pad shorter strings • Running time: • N is number of strings • L is length of longest string • RadixSort takes O(N*L)

  19. Evaluating Sorting Algorithms • What factors other than asymptotic complexity could affect performance? • Suppose two algorithms perform exactly the same number of instructions. Could one be better than the other?

  20. Memory Hierarchy Stats (made up)

  21. Memory Hierarchy Exploits Locality of Reference • Idea: small amount of fast memory • Keep frequently used data in the fast memory • LRU replacement policy • Keep recently used data in cache • To free space, remove Least Recently Used data

  22. Cache Details (simplified) Main Memory Cache Cache line size (4 adjacent memory cells)

  23. Traversing an Array • One miss for every 4 accesses in a traversal cache misses cache hits

  24. Iterative MergeSortPoor Cache Performance no temporal locality! Cache Size

  25. Recursive MergeSortBetter Cache Performance Cache Size

  26. QuicksortPretty Good Cache Performance • Initial partition causes a lot of cache misses • As subproblems become smaller, they fit into cache • Good cache performance

  27. Radix SortLousy Cache Performance • On each BinSort • Sweep through input list – cache misses along the way (bad!) • Append to output list – indexed by pseudorandom digit (ouch!) • Truly evil for large Radix (e.g. 216), which reduces # of passes

  28. Sorting Instruction Count

  29. Sorting Cache Misses

  30. Sorting Execution Time Note: the “in place” (no extra memory) version of Mergesort used by the Java applet we saw in class is much slower than regular Mergesort!

  31. Summary • Linear-time sorting is possible if we know more about the input (e.g. that all input values fall within a known range) • BinSort • Moderately useful O(n) categorizer • Most useful as building block for RadixSort • RadixSort • O(n), but input must conform to fairly narrow profile • Poor cache performance • Memory Hierarchy and Cache • Cache locality can have major impact on performance of sorting, and other, algorithms

More Related