Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "CSE 326: Data Structures Lecture 24 Spring Quarter 2001 Sorting, Part B David Kaplan"— Presentation transcript:

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

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

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) Bins in array key = 11,1,1 key = 22 key = 33,3 key = 44,4 key = 55,5,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 For i = 1..K For Each number x in bins[i] Print x 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. 2 32 ) –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 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. 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 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 0 1 2 3 4 5 6 7 8 9 126 636 416 328 341 131 0 1 2 3 4 5 6 7 8 9 416416 126 328 328 131 636 341341 0 1 2 3 4 5 6 7 8 9 636 126 131 328 328 341 416 126 328 636 341 416 131 328 126 131 328 328 341 416 636

14 Not magic. It provably works. Keys –K-digit numbers –base B Claim: after i th 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 RadixSort Proof 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 X i is i th digit of X (from the right) X i+1 < Y i+1 then i+1 th BinSort will put them in order X i+1 > Y i+1, same thing X i+1 = Y i+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) NameExtra CPU cycles used to access Size L1 (on chip) cache 032 KB L2 cache8512 KB RAM35256 MB Hard Drive500,0008 GB

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 MergeSort Poor Cache Performance Cache Size no temporal locality!

25 Recursive MergeSort Better Cache Performance Cache Size

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

27 Radix Sort Lousy 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. 2 16 ), 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


Download ppt "CSE 326: Data Structures Lecture 24 Spring Quarter 2001 Sorting, Part B David Kaplan"

Similar presentations


Ads by Google