Sorting and Searching. Tony Wong
|
|
- Ruth Foster
- 5 years ago
- Views:
Transcription
1 Tony Wong
2 Sorting Sorting is the reordering of array elements into a specific order (usually ascending) For example, array a[0..8] consists of the final exam scores of the n = 9 students in a class. After sorting, a[0] contains the lowest score and a[8] contains the highest score. Original a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] Value Sorted a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] Value
3 Sorting "What is the most efficient way to sort 1 million 32-bit integers?" 3
4 Sorting Algorithms There are many ways to sort an array, just like we all use different ways to sort a deck of playing cards Some are faster, and some are slower Some are easier to code, some are harder to code Comparison Based Sorting (Slow) Selection sort Bubble sort Insertion sort Comparison Based Sorting (Fast) Shell Sort Quick Sort Merge Sort Non-comparison Based Sorting Counting Sort Radix Sort 4
5 Selection Sort ( 選擇排序法 ) Selection sort works by repeatedly moving the maximum element in the unsorted part to the front of the sorted part Imagine that you are playing 鋤大 D and is given 13 playing cards, how would you sort them? Find the 2(s) and place it/them at the back Find the Ace(s) and place it/them at the back (before the 2s) and so on 5
6 Selection Sort Let s count i from n 1 down to 1 In the each round, the greatest element needs to go to a[i] Instead of moving, swap the elements a[maxj] and a[i] Round a[0] a[1] a[2] a[3] a[4] a[5] i = i = i = i = i = Result maxj=2 maxj=2 maxj=1 maxj=2 maxj=0 7
7 Selection Sort Find the max element in a[0].. a[i] Swapping the two numbers (place the maximum at a[i]) 8
8 Selection Sort Alternatively, count i = 0.. n - 2 and move the minimum element to a[i] Round a[0] a[1] a[2] a[3] a[4] a[5] i = i = i = i = i = Result
9 Selection Sort Analysis Q: What is the number of comparisons performed? Q: What is the number of swaps performed? 10
10 Properties of Selection Sort Task: It is the algorithm for sorting an array using M1602 Valentine Roses minimum number of pairwise swaps if we do not swap elements that are already in the correct position Max number of swaps required: n 1 e.g. sorting (2, 3, 4, 5, 6, 1) requires 5 pairwise swaps Time complexity: Worst-case = Best-case = Average-case = Number of comparisons performed = n + n 1 + n = n 1 (n) = O n 2 2 Space complexity: O(1) the only extra variables are i, j, maxj/minj and t 11
11 Bubble Sort ( 冒泡排序法 ) There is a class of n students randomly placed in a straight line. Each student can only see the students before and after him Sort the students according to class number Starting from the beginning of the array, compare two adjacent elements: If the left one is greater than the right one, that is, a[i] > a[i + 1], swap them After we process the array for one round ("pass"), the greatest element will be in the correct place (right-most). Repeat this process for a total of n-1 passes 12
12 Bubble Sort Loop i = n Inside the i for-loop, loop j = 0.. j-1 a[j] and a[j + 1] are compared if a[j] > a[j + 1] swap a[j] and a[j + 1] Round a[0] a[1] a[2] a[3] a[4] i = 4, j = i = 4, j = i = 4, j = i = 4, j = i = 3, j = i = 3, j = i = 3, j = i = 2, j = i = 2, j = i = 1, j = Result
13 Bubble Sort If the left one is greater than the right one, Swap the two numbers 14
14 Bubble Sort Analysis Q: What is the number of comparisons performed? Q: What is the actual number of swaps performed? 15
15 Properties of Bubble Sort It is the algorithm for sorting an array using minimum number of adjacent pairwise swaps n 1 (n) Max number of swaps required: 2 e.g. sorting (6, 5, 4, 3, 2, 1) requires 15 pairwise swaps Time complexity: Worst-case = Best-case = Average-case = Number of comparisons performed = n + n 1 + n = Space complexity: O(1) the only extra variables are i, j and t n 1 (n) 2 = O n 2 16
16 Inversions Given an array a[n], the number of inversions is defined as number of pairs (i, j) where i < j but a[i] > a[j] Examples: (1, 2, 3, 4, 5) 0 inversions (1, 2, 3, 5, 4) 1 inversion: (3, 4) (1, 2, 5, 3, 4) 2 inversions: (2, 3), (2, 4) (2, 1, 4, 3, 6, 5) 3 inversions: (0, 1), (2, 3), (4, 5) (5, 4, 3, 2, 1) 10 inversions: (0, 1), (0, 2), (0, 3), (0, 4), (1, 2),..., (3, 4) (4, 3, 1, 2, 4, 1) how many inversions? 17
17 Inversions The number of inversions is also exactly the number of minimum number of adjacent pairwise swaps required to swap an array, i.e. the actual number of swaps performed by Bubble Sort Zero: Sorted Close to zero: almost sorted n 1 (n) 2 : reverse order 18
18 Properties of Bubble Sort Relevant Tasks: D802 Bubble Sort Able to detect whether the array is already sorted The array is already sorted if no swaps is performed in the first pass If we implement this, the best-case time complexity becomes O(n) In practice, Bubble Sort is slower than Selection Sort because of the number of writes to memory 19
19 Insertion Sort ( 插入排序法 ) Initially you are have no cards Cards would be given to you one by one All you need to do is to add the new card to the correct, sorted, position: If the new card is x, move all cards larger than x to the right by 1 position Insert x into the vacated position (5)
20 Insertion Sort In each pass, use a separate variable t tostore a[i] Count j from i-1 down to 0 If a[j] > t, overwrite a[j + 1] Otherwise, break a[j + 1] is the correct position to insert t If t is the smallest element, j will become -1, and therefore t will be inserted into a[0] Round a[0] a[1] a[2] a[3] a[4] a[5] i = i = 1, j = 0 2 t= i = 1, insert i = 2, j = t= i = 2, insert i = 3, j = t=5 1 4 i = 3, j = (6) i = 3, insert i = 4, j = t=1 4 i = 4, j = (6) 6 4 i = 4, j = (5) i = 4, j = (3) i = 4, insert i = 5, j = t=4 i = 5, j = (6) 6 i = 5, j = (5) 5 6 i = 5, insert
21 Insertion Sort Warning: for j := i 1 downto 0 do is WRONG (Please refer to HKOI 2016/17 Heat FITB Q1) t is the new number Place t at a[j + 1] j=1 i=4 t=
22 Insertion Sort Analysis Q: What is the actual number of comparisons performed? 23
23 Properties of Insertion Sort When the array is almost sorted, Insertion Sort will run quite fast The required number of "movements" a[j + 1] = a[j] is exactly the number of inversions For example, (2, 1, 4, 3, 6, 5) only requires 3 movements Therefore, the best-case time complexity is O(n), while the average-case and worst-case time complexity is O(n 2 ) Space complexity: O(1) 24
24 Shell Sort As discussed earlier, each "move" in Bubble Sort and Shell Sort reduces the number of inversions by 1 Shell Sort is a modification to Bubble Sort or Insertion Sort: Reduce a greater number (>=1) of inversions in each step In Bubble Sort and Insertion Sort, we considered adjacent elements In Shell Sort, we have multiple, decreasing "gap" values For example, n = 100, then gaps could be (64, 32, 16, 8, 4, 2, 1) Any gap sequence is ok as long as the last gap value is 1 The original Bubble / Insertion Sort has a single gap value: (1) 25
25 Shell Sort Gap = Inversions Gap = Prove that the number of inversion won't increase with such swappings 26
26 Shell Sort Implementation Gap = n, n,, e.g. n = 100, gap = (50, 25, 12, 6, 3, 1) Performance depends on n, the array and gap 27
27 Counting Sort ( 計數排序法 ) You are playing scrabble and you have n = letter tiles Sort the tiles from A to Z We can create 26 piles: pile A, pile B,, to pile Z Process tiles one by one by placing it to the suitable pile Stack the piles together from pile A to Z C E M A T E A A O A A A C E E M O T frequency array A 3 B 0 C 1 D 0 E 2 28
28 Counting Sort The size of the frequency array has to be at least maxvalue + 1 Print i freq[i] times Example storing instead of printing directly: (j is a counter) 29
29 Counting Sort - Analysis To construct the frequency array, each element has to be considered exactly once n operations Loop over the range ( 範圍 ) of possible values r (range) operations Within the loop, the inner for loop will run for n times The best, average and worst-case time complexity is O n + r Space complexity is O(r) Therefore, Counting Sort is most suitable when r is large and r is small Example: n = , r =
30 Radix Sort Sort n integers. Each integer has w digits For digit i = 0 (least-significant) to w 1 (most significant) Prepare 10 lists, one for each digit 0, 1, 2,..., 9 Loop through the array: If the i-th digit of a number is x, insert it into list x Concatenate the 10 lists to form the new array for the next step 31
31 Radix Sort example Integers to sort: (n = 8, w = 3) Step i = 0 (units digit) Result:
32 Radix Sort example From previous step: Step i = 1 (tens digit) Result:
33 Radix Sort example From previous step: Step i = 2 (hundreds digit) Result:
34 Radix Sort - Analysis Time complexity: O(nw) Space complexity: O(n + m) where m is the number of "buckets" 35
35 Number of ways to arrange numbers If you are given n different numbers, how many ways can you arrange them in different orders? For example, n = 4, there are 24 ways (permutations 排列 ) Answer: n n 1 n = n! ways 36
36 Lower bound for comparison based sorting If there is one thing that has x possibilities and you have to find out which one is it, how many "Yes-No questions" do you need to ask? Ideally, each question should eliminate half of the remaining possibilities Number of questions required = lg x Note: lg is log 2 37
37 Lower bound for comparison based sorting lg n! = lg n n = lg (1 n) 2 (n 1 ) lg n n = lg n n 2 = (n lg n)/2 n/2 terms lg n! = lg n n lg n n = lg n n = n lg n n terms Therefore, (n lg n)/2 lg n! n lg n lg n! = O(n lg n) 38
38 Quick Sort and Merge Sort Divide and conquer approach Divide Conquer Divide the array into 2 parts, and recursively sort each part Combine the two sorted arrays into one large sorted array Base case An array of length 0 or 1 must be sorted 39
39 Quick Sort Using a pivot ( 支點 ) p, separate the array into two smaller arrays One containing all values < p, another > p Original array: Let's choose the first element (6) as pivot Divide: split the array into 2, and sort them smaller than 6 larger than Haskell implementation of Quick Sort Conquer: Combine into one 40
40 Quick Sort Task: D807 Lomuto partition scheme: maintain length of the part <= p <=p >p x unsorted p swap Case 1: x <= p Case 2: x > p Finally: <=p x >p unsorted p <=p >p unsorted p <=p >p p swap <=p p >p Place the pivot at the correct position 41
41 Quick Sort Worst Case Task: D808 Sorted Reverse Sorted Equal Elements Pretty Random > l = 1, r = 8 (8 elements) >> l = 1, r = 7 (7 elements) >>> l = 1, r = 6 (6 elements) >>>> l = 1, r = 5 (5 elements) >>>>> l = 1, r = 4 (4 elements) >>>>>> l = 1, r = 3 (3 elements) >>>>>>> l = 1, r = 2 (2 elements) >>>>>>>> l = 1, r = 1 (1 element) > l = 1, r = 8 (8 elements) >> l = 2, r = 8 (7 elements) >>> l = 2, r = 7 (6 elements) >>>> l = 3, r = 7 (5 elements) >>>>> l = 3, r = 6 (4 elements) >>>>>> l = 4, r = 6 (3 elements) >>>>>>> l = 4, r = 5 (2 elements) >>>>>>>> l = 5, r = 5 (1 element) > l = 1, r = 8 (8 elements) >> l = 1, r = 7 (7 elements) >>> l = 1, r = 6 (6 elements) >>>> l = 1, r = 5 (5 elements) >>>>> l = 1, r = 4 (4 elements) >>>>>> l = 1, r = 3 (3 elements) >>>>>>> l = 1, r = 2 (2 elements) >>>>>>>> l = 1, r = 1 (1 element) > l = 1, r = 8 (8 elements) >> l = 1, r = 3 (3 elements) >>> l = 2, r = 3 (2 elements) >>>> l = 3, r = 3 (1 element) >> l = 5, r = 8 (4 elements) >>> l = 5, r = 5 (1 elements) >>> l = 7, r = 8 (2 elements) >>>> l = 7, r = 7 (1 element)
42 Quick Sort Hoare partition scheme: maintain lengths of both parts p <=p unsorted >=p Step 1: expand p <=p <p >=p unsorted <=p >p p <=p >=p unsorted <=p >=p >=p Step 2: swap p <=p <=p unsorted >=p >=p Repeat until no unsorted part remains p <=p Recursively sort both parts (including p) >=p Advantage: Handle equal elements more efficiently 43
43 Quick Sort Time complexity: Best case: O(n lg n) Average case: O(n lg n) Worst case: O(n 2 ) Ways to lowering the chance of uneven splits Most common: Choose a pivot randomly (pseudo-randomly) e.g. pivot = a[(lo + hi) / 2] or a[lo + rand() % (hi - lo + 1)] Random shuffle the array first Choose the pivot using median of medians Space complexity: O(lg n) worst case: O(n) 44
44 Merge Sort Split an array a[lo.. hi] into two halves and recursively sort them a[lo.. mid], and a[mid hi] Completely avoids uneven splits 45
45 Merge Sort unsorted Split: Recursively sort: Merge: Case 1: x <= y x temporary sorted unsorted sorted temporary y sorted unsorted sorted Compare the smallest (left-most) element of each part Case 2: x > y temporary x sorted y sorted x sorted y sorted Store: temporary sorted 46
46 Merge Sort Time complexity: Best, average and worst case: O(n lg n) Space complexity: O n Worse than most other algorithms 47
47 Sorting using C++ standard template library sort(begin, end); Sorts the range [begin, end) so begin should be the pointer to the first element and end be the pointer to one after the last element 48
48 M0713 Cream Soda Find the median of n numbers Here, it is guaranteed that n is odd a[0] a[1] a[2] a[3] a[4] Before Sorting After Sorting Where is the answer (median)? 49
49 Quick Select We actually only care about the median It is a waste to sort the other elements We modify our Quick Sort algorithm Only recursively sort the part that contains the position we care about position we care about <=p p >p Sort this part No need to sort this part <=q q >q No need to sort this part Sort this part 50
50 Quick Select Time complexity: O(n) Space complexity: O(lg n) 51
51 Stability of Sorting A sorting algorithm is stable if the original order is preserved among elements with the same sorting key Here sorting key is price. A stable sort must retain Banana before Candy and Egg before Pork before Fish Stable sort must return Unstable sort may return Item Price Item Price Item Price Apple 5.5 Apple 5.5 Apple 5.5 Banana 12 Banana 12 Candy 12 Egg 25 sort Candy 12 Banana 12 Rice 70 Egg 25 Egg 25 Pork 25 Pork 25 Fish 25 Fish 25 Fish 25 Pork 25 Candy 12 Rice 70 Rice 70 52
52 Stability of Sorting stable_sort(a, a + n); Stable sort is not useful when the values are distinct Useful when sorting multi key data 53
53 Stability of Sorting Which sorting algorithms discussed so far are stable? Stable Insertion Sort Bubble Sort Counting Sort (LSD) Radix Sort Merge Sort Unstable Selection Sort Shell Sort Quick Sort 54
54 01068 Moliu Sorting So how to perform multi-key sorting? Method 1: Custom comparison function ( 自訂排序 ) with sorter array a Set sorter array a[i] = i sort(a, a + n, cmp) cmp is the name of the comparison function, which should return a bool: true when the first argument should be placed before the second argument, false otherwise bool cmp(const T& a, const T& b) 55
55 01068 Moliu Sorting Method 2: pair with custom comparison function Data in a pair will be moved together 56
56 01068 Moliu Sorting Method 3: Use default comparison for pair: first is compared first, followed by second 57
57 Binary Search Once we have a sorted array, we can use the binary search algorithm to find If an element exists in an array Its position if it exists It is does not exists, the position it should be inserted into The smallest element >= x / > x The largest element <= x / < x 58
58 Binary Search Find the position of 5 in the array (or find the left-most element >= 5) lo mid hi lo mid hi mid hi lo lmh hi 9 is the 10 position of the hi lo right-most Sorting and element Searching < 5 59
59 Binary Search Memorize these correct implementations ; 60
60 Binary Search - Analysis Search for x in the the range [begin, end) so begin should be the pointer to the first element and end be the pointer to one after the last element Time complexity: O(lg n) Space complexity: O(1) binary_search(begin, end, x) returns true / false whether x is present lower_bound(begin, end, x) returns the pointer to left-most element >= x upper_bound(begin, end, x) returns the pointer to left-most element > x equal_range(begin, end, x) returns a pair of pointers: left-most element >= x, left-most element > x When x is larger than every element, the pointer end is returned 61
61 Binary Search on Answer If a tasks asks you to find max possible value such that... Assume that the answer is x, then you can binary search for x if: There is an efficient way to check whether a value v is possible It is possible for all x x; and it is impossible for all x > x possible x impossible Vice versa, you can binary search for minimum possible value if impossible x possible 62
62 M1023 Seating Plan Given an array a[1..n], choose m elements such that the minimum absolute difference is maximized Example: m = 3 Assume that the answer is Able to choose 5 >= 3 elements Possible: the answer could be larger >= 6 >= 6 >= 6 >= 6 Assume that the answer is >= 16 >= 16 >= 6 Unable to choose 3 elements Impossible: the answer must be smaller 63
63 M1023 Seating Plan Determine min and max answer Write check(x) function to determine whether x is possible Adjust lo and hi possible hi lo x impossible Time complexity: O(f(n) lg (hi lo)) 64
64 Ternary Search y = f(x) If you are given a function y = f(x) and you are asked to find a such that y is minimized, then you can use ternary search if: f x 1 f x < f(x) for all lb x < a (to the left of a) < f x + 1 for all a < x ub (to the right of a) Note: lb and ub are the lower bound and upper bound of the answer Note the strictly < condition Exception: f x = f x + 1 = minimum is acceptable minimum point: a 65
65 Ternary Search Note that we are discussing discrete functions Functions that can perform ternary search on: Function that cannot perform ternary search on:
66 Ternary Search Pick two points between lo and hi, there are two variants: Three parts p = (lo * 2 + hi) / 3 q = (lo + hi * 2) / 3 Two parts p = (lo + hi) / 2 q = (lo + hi) / lo p q hi lo p q hi f(p) > f(q): answer is between p and hi f(p) >= f(q): answer is between q and hi f(p) == f(q): answer is between p and q f(p) < f(q): answer is between lo and p f(p) < f(q): answer is between lo and q 67
67 Master Theorem Time complexity analysis of divide and conquer algorithms The time required for a problem size of n = T(n) T(n) = a T( n ) + f(n) b 3 cases: (simplified) f n < O(n log b a ) then T n = O(n log b a ) f n = O(n log b a log k n) then T n = O n log b a log k+1 n f n > O(n log b a ) then T n = O f(n) 68
68 Master Theorem Examples Binary Search: T(n) = T( n 2 ) + O(1) Case 2: O 1 = O n log 2 1 log 0 n Therefore T n = O n log 2 1 log 0+1 n = O(lg n) Merge Sort: T(n) = 2T( n 2 ) + O(n) Case 2: O n = O n log 2 2 log 0 n Therefore T n = O n log 2 2 log 0+1 n = O(n lg n) Quick Select: T(n) = T( n 2 ) + O(n) Case 3: O n > O n log 2 1 Therefore T n = O f n = O n L-Pieces: T(n) = 4T( n 2 ) + O 1 (assume n = side length) Case 1: f n < O(n log b a ) then T n = O(n log b a ) Case 2: f n = O(n log b a log k n) then T n = O n log b a log k+1 n Case 3: f n > O(n log b a ) then T n = O f(n) Case 1: O 1 < O n log 2 4 Therefore T n = O(n log 2 4 ) = O n 2 69
Fast Sorting and Selection. A Lower Bound for Worst Case
Presentation for use with the textbook, Algorithm Design and Applications, by M. T. Goodrich and R. Tamassia, Wiley, 0 Fast Sorting and Selection USGS NEIC. Public domain government image. A Lower Bound
More informationAlgorithms and Data Structures 2016 Week 5 solutions (Tues 9th - Fri 12th February)
Algorithms and Data Structures 016 Week 5 solutions (Tues 9th - Fri 1th February) 1. Draw the decision tree (under the assumption of all-distinct inputs) Quicksort for n = 3. answer: (of course you should
More informationSorting. Chapter 11. CSE 2011 Prof. J. Elder Last Updated: :11 AM
Sorting Chapter 11-1 - Sorting Ø We have seen the advantage of sorted data representations for a number of applications q Sparse vectors q Maps q Dictionaries Ø Here we consider the problem of how to efficiently
More informationSorting Algorithms. We have already seen: Selection-sort Insertion-sort Heap-sort. We will see: Bubble-sort Merge-sort Quick-sort
Sorting Algorithms We have already seen: Selection-sort Insertion-sort Heap-sort We will see: Bubble-sort Merge-sort Quick-sort We will show that: O(n log n) is optimal for comparison based sorting. Bubble-Sort
More informationData Structures and Algorithms
Data Structures and Algorithms Spring 2017-2018 Outline 1 Sorting Algorithms (contd.) Outline Sorting Algorithms (contd.) 1 Sorting Algorithms (contd.) Analysis of Quicksort Time to sort array of length
More informationWelcome to CSE21! Lecture B Miles Jones MWF 9-9:50pm PCYN 109. Lecture D Russell (Impagliazzo) MWF 4-4:50am Center 101
Welcome to CSE21! Lecture B Miles Jones MWF 9-9:50pm PCYN 109 Lecture D Russell (Impagliazzo) MWF 4-4:50am Center 101 http://cseweb.ucsd.edu/classes/sp16/cse21-bd/ March 30, 2016 Sorting (or Ordering)
More informationAlgorithms Test 1. Question 1. (10 points) for (i = 1; i <= n; i++) { j = 1; while (j < n) {
Question 1. (10 points) for (i = 1; i
More informationCMPT 307 : Divide-and-Conqer (Study Guide) Should be read in conjunction with the text June 2, 2015
CMPT 307 : Divide-and-Conqer (Study Guide) Should be read in conjunction with the text June 2, 2015 1 Introduction The divide-and-conquer strategy is a general paradigm for algorithm design. This strategy
More informationReview Of Topics. Review: Induction
Review Of Topics Asymptotic notation Solving recurrences Sorting algorithms Insertion sort Merge sort Heap sort Quick sort Counting sort Radix sort Medians/order statistics Randomized algorithm Worst-case
More informationOutline. 1 Merging. 2 Merge Sort. 3 Complexity of Sorting. 4 Merge Sort and Other Sorts 2 / 10
Merge Sort 1 / 10 Outline 1 Merging 2 Merge Sort 3 Complexity of Sorting 4 Merge Sort and Other Sorts 2 / 10 Merging Merge sort is based on a simple operation known as merging: combining two ordered arrays
More informationLecture 1: Asymptotics, Recurrences, Elementary Sorting
Lecture 1: Asymptotics, Recurrences, Elementary Sorting Instructor: Outline 1 Introduction to Asymptotic Analysis Rate of growth of functions Comparing and bounding functions: O, Θ, Ω Specifying running
More informationDivide and Conquer Algorithms. CSE 101: Design and Analysis of Algorithms Lecture 14
Divide and Conquer Algorithms CSE 101: Design and Analysis of Algorithms Lecture 14 CSE 101: Design and analysis of algorithms Divide and conquer algorithms Reading: Sections 2.3 and 2.4 Homework 6 will
More informationDivide-Conquer-Glue. Divide-Conquer-Glue Algorithm Strategy. Skyline Problem as an Example of Divide-Conquer-Glue
Divide-Conquer-Glue Tyler Moore CSE 3353, SMU, Dallas, TX February 19, 2013 Portions of these slides have been adapted from the slides written by Prof. Steven Skiena at SUNY Stony Brook, author of Algorithm
More informationCentral Algorithmic Techniques. Iterative Algorithms
Central Algorithmic Techniques Iterative Algorithms Code Representation of an Algorithm class InsertionSortAlgorithm extends SortAlgorithm { void sort(int a[]) throws Exception { for (int i = 1; i < a.length;
More informationModule 1: Analyzing the Efficiency of Algorithms
Module 1: Analyzing the Efficiency of Algorithms Dr. Natarajan Meghanathan Professor of Computer Science Jackson State University Jackson, MS 39217 E-mail: natarajan.meghanathan@jsums.edu What is an Algorithm?
More informationDivide-and-conquer: Order Statistics. Curs: Fall 2017
Divide-and-conquer: Order Statistics Curs: Fall 2017 The divide-and-conquer strategy. 1. Break the problem into smaller subproblems, 2. recursively solve each problem, 3. appropriately combine their answers.
More informationWeek 5: Quicksort, Lower bound, Greedy
Week 5: Quicksort, Lower bound, Greedy Agenda: Quicksort: Average case Lower bound for sorting Greedy method 1 Week 5: Quicksort Recall Quicksort: The ideas: Pick one key Compare to others: partition into
More informationSorting algorithms. Sorting algorithms
Properties of sorting algorithms A sorting algorithm is Comparison based If it works by pairwise key comparisons. In place If only a constant number of elements of the input array are ever stored outside
More informationDivide & Conquer. Jordi Cortadella and Jordi Petit Department of Computer Science
Divide & Conquer Jordi Cortadella and Jordi Petit Department of Computer Science Divide-and-conquer algorithms Strategy: Divide the problem into smaller subproblems of the same type of problem Solve the
More informationDivide and conquer. Philip II of Macedon
Divide and conquer Philip II of Macedon Divide and conquer 1) Divide your problem into subproblems 2) Solve the subproblems recursively, that is, run the same algorithm on the subproblems (when the subproblems
More informationAlgorithms. Jordi Planes. Escola Politècnica Superior Universitat de Lleida
Algorithms Jordi Planes Escola Politècnica Superior Universitat de Lleida 2016 Syllabus What s been done Formal specification Computational Cost Transformation recursion iteration Divide and conquer Sorting
More informationDivide & Conquer. Jordi Cortadella and Jordi Petit Department of Computer Science
Divide & Conquer Jordi Cortadella and Jordi Petit Department of Computer Science Divide-and-conquer algorithms Strategy: Divide the problem into smaller subproblems of the same type of problem Solve the
More informationDivide-and-conquer. Curs 2015
Divide-and-conquer Curs 2015 The divide-and-conquer strategy. 1. Break the problem into smaller subproblems, 2. recursively solve each problem, 3. appropriately combine their answers. Known Examples: Binary
More informationFundamental Algorithms
Chapter 2: Sorting, Winter 2018/19 1 Fundamental Algorithms Chapter 2: Sorting Jan Křetínský Winter 2018/19 Chapter 2: Sorting, Winter 2018/19 2 Part I Simple Sorts Chapter 2: Sorting, Winter 2018/19 3
More informationFundamental Algorithms
Fundamental Algorithms Chapter 2: Sorting Harald Räcke Winter 2015/16 Chapter 2: Sorting, Winter 2015/16 1 Part I Simple Sorts Chapter 2: Sorting, Winter 2015/16 2 The Sorting Problem Definition Sorting
More informationb + O(n d ) where a 1, b > 1, then O(n d log n) if a = b d d ) if a < b d O(n log b a ) if a > b d
CS161, Lecture 4 Median, Selection, and the Substitution Method Scribe: Albert Chen and Juliana Cook (2015), Sam Kim (2016), Gregory Valiant (2017) Date: January 23, 2017 1 Introduction Last lecture, we
More information1 Divide and Conquer (September 3)
The control of a large force is the same principle as the control of a few men: it is merely a question of dividing up their numbers. Sun Zi, The Art of War (c. 400 C.E.), translated by Lionel Giles (1910)
More informationLecture 14: Nov. 11 & 13
CIS 2168 Data Structures Fall 2014 Lecturer: Anwar Mamat Lecture 14: Nov. 11 & 13 Disclaimer: These notes may be distributed outside this class only with the permission of the Instructor. 14.1 Sorting
More informationAlgorithms and Data Structures 2014 Exercises week 5
Algorithms and Data Structures 014 Exercises week 5 October, 014 Exercises marked by ( ) are hard, but they might show up on the exam. Exercises marked by ( ) are even harder, but they will not be on the
More informationAnalysis of Algorithms. Randomizing Quicksort
Analysis of Algorithms Randomizing Quicksort Randomizing Quicksort Randomly permute the elements of the input array before sorting OR... modify the PARTITION procedure At each step of the algorithm we
More informationAlgorithms. Algorithms 2.2 MERGESORT. mergesort bottom-up mergesort sorting complexity divide-and-conquer ROBERT SEDGEWICK KEVIN WAYNE
Algorithms ROBERT SEDGEWICK KEVIN WAYNE 2.2 MERGESORT Algorithms F O U R T H E D I T I O N mergesort bottom-up mergesort sorting complexity divide-and-conquer ROBERT SEDGEWICK KEVIN WAYNE http://algs4.cs.princeton.edu
More informationOutline. 1 Introduction. 3 Quicksort. 4 Analysis. 5 References. Idea. 1 Choose an element x and reorder the array as follows:
Outline Computer Science 331 Quicksort Mike Jacobson Department of Computer Science University of Calgary Lecture #28 1 Introduction 2 Randomized 3 Quicksort Deterministic Quicksort Randomized Quicksort
More informationPartition and Select
Divide-Conquer-Glue Algorithms Quicksort, Quickselect and the Master Theorem Quickselect algorithm Tyler Moore CSE 3353, SMU, Dallas, TX Lecture 11 Selection Problem: find the kth smallest number of an
More informationDivide and Conquer. Recurrence Relations
Divide and Conquer Recurrence Relations Divide-and-Conquer Strategy: Break up problem into parts. Solve each part recursively. Combine solutions to sub-problems into overall solution. 2 MergeSort Mergesort.
More informationAlgorithms. Quicksort. Slide credit: David Luebke (Virginia)
1 Algorithms Quicksort Slide credit: David Luebke (Virginia) Sorting revisited We have seen algorithms for sorting: INSERTION-SORT, MERGESORT More generally: given a sequence of items Each item has a characteristic
More informationCSCE 750, Spring 2001 Notes 2 Page 1 4 Chapter 4 Sorting ffl Reasons for studying sorting is a big deal pedagogically useful Λ the application itself
CSCE 750, Spring 2001 Notes 2 Page 1 4 Chapter 4 Sorting ffl Reasons for studying sorting is a big deal pedagogically useful Λ the application itself is easy to understand Λ a complete analysis can often
More informationINDIAN INSTITUTE OF TECHNOLOGY KHARAGPUR Design and Analysis of Algorithms Department of Mathematics MA21007/Assignment-2/Due: 18 Aug.
INDIAN INSTITUTE OF TECHNOLOGY KHARAGPUR Design and Analysis of Algorithms Department of Mathematics MA21007/Assignment-2/Due: 18 Aug. 2015 Problem 1. Computing Fibonacci Numbers The Fibonacci numbers
More informationCSE 421, Spring 2017, W.L.Ruzzo. 8. Average-Case Analysis of Algorithms + Randomized Algorithms
CSE 421, Spring 2017, W.L.Ruzzo 8. Average-Case Analysis of Algorithms + Randomized Algorithms 1 outline and goals 1) Probability tools you've seen allow formal definition of "average case" running time
More informationMidterm Exam. CS 3110: Design and Analysis of Algorithms. June 20, Group 1 Group 2 Group 3
Banner ID: Name: Midterm Exam CS 3110: Design and Analysis of Algorithms June 20, 2006 Group 1 Group 2 Group 3 Question 1.1 Question 2.1 Question 3.1 Question 1.2 Question 2.2 Question 3.2 Question 3.3
More informationIS 709/809: Computational Methods in IS Research Fall Exam Review
IS 709/809: Computational Methods in IS Research Fall 2017 Exam Review Nirmalya Roy Department of Information Systems University of Maryland Baltimore County www.umbc.edu Exam When: Tuesday (11/28) 7:10pm
More informationAlgorithms, Design and Analysis. Order of growth. Table 2.1. Big-oh. Asymptotic growth rate. Types of formulas for basic operation count
Types of formulas for basic operation count Exact formula e.g., C(n) = n(n-1)/2 Algorithms, Design and Analysis Big-Oh analysis, Brute Force, Divide and conquer intro Formula indicating order of growth
More information1 Terminology and setup
15-451/651: Design & Analysis of Algorithms August 31, 2017 Lecture #2 last changed: August 29, 2017 In this lecture, we will examine some simple, concrete models of computation, each with a precise definition
More informationProblem Set 1. CSE 373 Spring Out: February 9, 2016
Problem Set 1 CSE 373 Spring 2016 Out: February 9, 2016 1 Big-O Notation Prove each of the following using the definition of big-o notation (find constants c and n 0 such that f(n) c g(n) for n > n o.
More informationBucket-Sort. Have seen lower bound of Ω(nlog n) for comparisonbased. Some cheating algorithms achieve O(n), given certain assumptions re input
Bucket-Sort Have seen lower bound of Ω(nlog n) for comparisonbased sorting algs Some cheating algorithms achieve O(n), given certain assumptions re input One example: bucket sort Assumption: input numbers
More informationCSE548, AMS542: Analysis of Algorithms, Fall 2017 Date: Oct 26. Homework #2. ( Due: Nov 8 )
CSE548, AMS542: Analysis of Algorithms, Fall 2017 Date: Oct 26 Homework #2 ( Due: Nov 8 ) Task 1. [ 80 Points ] Average Case Analysis of Median-of-3 Quicksort Consider the median-of-3 quicksort algorithm
More informationQuicksort algorithm Average case analysis
Quicksort algorithm Average case analysis After today, you should be able to implement quicksort derive the average case runtime of quick sort and similar algorithms Q1-3 For any recurrence relation in
More informationLecture 4. Quicksort
Lecture 4. Quicksort T. H. Cormen, C. E. Leiserson and R. L. Rivest Introduction to Algorithms, 3rd Edition, MIT Press, 2009 Sungkyunkwan University Hyunseung Choo choo@skku.edu Copyright 2000-2018 Networking
More informationAlgorithms And Programming I. Lecture 5 Quicksort
Algorithms And Programming I Lecture 5 Quicksort Quick Sort Partition set into two using randomly chosen pivot 88 31 25 52 14 98 62 30 23 79 14 31 2530 23 52 88 62 98 79 Quick Sort 14 31 2530 23 52 88
More informationA point p is said to be dominated by point q if p.x=q.x&p.y=q.y 2 true. In RAM computation model, RAM stands for Random Access Model.
In analysis the upper bound means the function grows asymptotically no faster than its largest term. 1 true A point p is said to be dominated by point q if p.x=q.x&p.y=q.y 2 true In RAM computation model,
More informationQuick Sort Notes , Spring 2010
Quick Sort Notes 18.310, Spring 2010 0.1 Randomized Median Finding In a previous lecture, we discussed the problem of finding the median of a list of m elements, or more generally the element of rank m.
More informationTricks of the Trade in Combinatorics and Arithmetic
Tricks of the Trade in Combinatorics and Arithmetic Zachary Friggstad Programming Club Meeting Fast Exponentiation Given integers a, b with b 0, compute a b exactly. Fast Exponentiation Given integers
More informationConcrete models and tight upper/lower bounds
Lecture 3 Concrete models and tight upper/lower bounds 3.1 Overview In this lecture, we will examine some simple, concrete models of computation, each with a precise definition of what counts as a step,
More informationRandomized Sorting Algorithms Quick sort can be converted to a randomized algorithm by picking the pivot element randomly. In this case we can show th
CSE 3500 Algorithms and Complexity Fall 2016 Lecture 10: September 29, 2016 Quick sort: Average Run Time In the last lecture we started analyzing the expected run time of quick sort. Let X = k 1, k 2,...,
More informationSearching. Sorting. Lambdas
.. s Babes-Bolyai University arthur@cs.ubbcluj.ro Overview 1 2 3 Feedback for the course You can write feedback at academicinfo.ubbcluj.ro It is both important as well as anonymous Write both what you
More informationInsertion Sort. We take the first element: 34 is sorted
Insertion Sort Idea: by Ex Given the following sequence to be sorted 34 8 64 51 32 21 When the elements 1, p are sorted, then the next element, p+1 is inserted within these to the right place after some
More informationDivide-and-Conquer Algorithms Part Two
Divide-and-Conquer Algorithms Part Two Recap from Last Time Divide-and-Conquer Algorithms A divide-and-conquer algorithm is one that works as follows: (Divide) Split the input apart into multiple smaller
More informationQuicksort (CLRS 7) We previously saw how the divide-and-conquer technique can be used to design sorting algorithm Merge-sort
Quicksort (CLRS 7) We previously saw how the divide-and-conquer technique can be used to design sorting algorithm Merge-sort Partition n elements array A into two subarrays of n/2 elements each Sort the
More informationChapter 5. Divide and Conquer CLRS 4.3. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.
Chapter 5 Divide and Conquer CLRS 4.3 Slides by Kevin Wayne. Copyright 25 Pearson-Addison Wesley. All rights reserved. Divide-and-Conquer Divide-and-conquer. Break up problem into several parts. Solve
More information1 Quick Sort LECTURE 7. OHSU/OGI (Winter 2009) ANALYSIS AND DESIGN OF ALGORITHMS
OHSU/OGI (Winter 2009) CS532 ANALYSIS AND DESIGN OF ALGORITHMS LECTURE 7 1 Quick Sort QuickSort 1 is a classic example of divide and conquer. The hard work is to rearrange the elements of the array A[1..n]
More information5. DIVIDE AND CONQUER I
5. DIVIDE AND CONQUER I mergesort counting inversions closest pair of points median and selection Lecture slides by Kevin Wayne Copyright 2005 Pearson-Addison Wesley http://www.cs.princeton.edu/~wayne/kleinberg-tardos
More informationData Structures and Algorithms CSE 465
Data Structures and Algorithms CSE 465 LECTURE 8 Analyzing Quick Sort Sofya Raskhodnikova and Adam Smith Reminder: QuickSort Quicksort an n-element array: 1. Divide: Partition the array around a pivot
More informationLinear Selection and Linear Sorting
Analysis of Algorithms Linear Selection and Linear Sorting If more than one question appears correct, choose the more specific answer, unless otherwise instructed. Concept: linear selection 1. Suppose
More informationAnalysis of Algorithms CMPSC 565
Analysis of Algorithms CMPSC 565 LECTURES 38-39 Randomized Algorithms II Quickselect Quicksort Running time Adam Smith L1.1 Types of randomized analysis Average-case analysis : Assume data is distributed
More informationDivide-and-Conquer. a technique for designing algorithms
Divide-and-Conquer a technique for designing algorithms decomposing instance to be solved into subinstances of the same problem solving each subinstance combining subsolutions to obtain the solution to
More informationReductions, Recursion and Divide and Conquer
Chapter 5 Reductions, Recursion and Divide and Conquer CS 473: Fundamental Algorithms, Fall 2011 September 13, 2011 5.1 Reductions and Recursion 5.1.0.1 Reduction Reducing problem A to problem B: (A) Algorithm
More informationFall 2017 November 10, Written Homework 5
CS1800 Discrete Structures Profs. Aslam, Gold, & Pavlu Fall 2017 November 10, 2017 Assigned: Mon Nov 13 2017 Due: Wed Nov 29 2017 Instructions: Written Homework 5 The assignment has to be uploaded to blackboard
More informationCS 161 Summer 2009 Homework #2 Sample Solutions
CS 161 Summer 2009 Homework #2 Sample Solutions Regrade Policy: If you believe an error has been made in the grading of your homework, you may resubmit it for a regrade. If the error consists of more than
More informationDivide and Conquer CPE 349. Theresa Migler-VonDollen
Divide and Conquer CPE 349 Theresa Migler-VonDollen Divide and Conquer Divide and Conquer is a strategy that solves a problem by: 1 Breaking the problem into subproblems that are themselves smaller instances
More informationInteger Sorting on the word-ram
Integer Sorting on the word-rm Uri Zwick Tel viv University May 2015 Last updated: June 30, 2015 Integer sorting Memory is composed of w-bit words. rithmetical, logical and shift operations on w-bit words
More informationDivide and Conquer Algorithms
Divide and Conquer Algorithms T. M. Murali February 19, 2013 Divide and Conquer Break up a problem into several parts. Solve each part recursively. Solve base cases by brute force. Efficiently combine
More informationCSCE 750 Final Exam Answer Key Wednesday December 7, 2005
CSCE 750 Final Exam Answer Key Wednesday December 7, 2005 Do all problems. Put your answers on blank paper or in a test booklet. There are 00 points total in the exam. You have 80 minutes. Please note
More informationChapter 5. Divide and Conquer CLRS 4.3. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.
Chapter 5 Divide and Conquer CLRS 4.3 Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved. 1 Divide-and-Conquer Divide-and-conquer. Break up problem into several parts. Solve
More information5. DIVIDE AND CONQUER I
5. DIVIDE AND CONQUER I mergesort counting inversions closest pair of points randomized quicksort median and selection Lecture slides by Kevin Wayne Copyright 2005 Pearson-Addison Wesley http://www.cs.princeton.edu/~wayne/kleinberg-tardos
More informationCPS 616 DIVIDE-AND-CONQUER 6-1
CPS 616 DIVIDE-AND-CONQUER 6-1 DIVIDE-AND-CONQUER Approach 1. Divide instance of problem into two or more smaller instances 2. Solve smaller instances recursively 3. Obtain solution to original (larger)
More informationDesign and Analysis of Algorithms
CSE 101, Winter 2018 Design and Analysis of Algorithms Lecture 5: Divide and Conquer (Part 2) Class URL: http://vlsicad.ucsd.edu/courses/cse101-w18/ A Lower Bound on Convex Hull Lecture 4 Task: sort the
More informationMA008/MIIZ01 Design and Analysis of Algorithms Lecture Notes 3
MA008 p.1/37 MA008/MIIZ01 Design and Analysis of Algorithms Lecture Notes 3 Dr. Markus Hagenbuchner markus@uow.edu.au. MA008 p.2/37 Exercise 1 (from LN 2) Asymptotic Notation When constants appear in exponents
More informationCSE 312, Winter 2011, W.L.Ruzzo. 8. Average-Case Analysis of Algorithms + Randomized Algorithms
CSE 312, Winter 2011, W.L.Ruzzo 8. Average-Case Analysis of Algorithms + Randomized Algorithms 1 insertion sort Array A[1]..A[n] for i = 1..n-1 { T = A[i] Sorted j swap j = i-1 compare while j >= 0 &&
More information1. Basic Algorithms: Bubble Sort
Sorting Algorithms Sorting Sorting. Given n elements, rearrange in ascending order. Obvious sorting applications. List files in a directory. Organize an MP3 library. List names in a phone book. Display
More informationComp 11 Lectures. Mike Shah. July 26, Tufts University. Mike Shah (Tufts University) Comp 11 Lectures July 26, / 45
Comp 11 Lectures Mike Shah Tufts University July 26, 2017 Mike Shah (Tufts University) Comp 11 Lectures July 26, 2017 1 / 45 Please do not distribute or host these slides without prior permission. Mike
More informationCS 310 Advanced Data Structures and Algorithms
CS 310 Advanced Data Structures and Algorithms Runtime Analysis May 31, 2017 Tong Wang UMass Boston CS 310 May 31, 2017 1 / 37 Topics Weiss chapter 5 What is algorithm analysis Big O, big, big notations
More informationAsymptotic Algorithm Analysis & Sorting
Asymptotic Algorithm Analysis & Sorting (Version of 5th March 2010) (Based on original slides by John Hamer and Yves Deville) We can analyse an algorithm without needing to run it, and in so doing we can
More informationCS361 Homework #3 Solutions
CS6 Homework # Solutions. Suppose I have a hash table with 5 locations. I would like to know how many items I can store in it before it becomes fairly likely that I have a collision, i.e., that two items
More information1 True/False. Math 10B with Professor Stankova Worksheet, Discussion #9; Thursday, 2/15/2018 GSI name: Roy Zhao
Math 10B with Professor Stankova Worksheet, Discussion #9; Thursday, 2/15/2018 GSI name: Roy Zhao 1 True/False 1. True False When we solve a problem one way, it is not useful to try to solve it in a second
More informationElementary Sorts 1 / 18
Elementary Sorts 1 / 18 Outline 1 Rules of the Game 2 Selection Sort 3 Insertion Sort 4 Shell Sort 5 Visualizing Sorting Algorithms 6 Comparing Sorting Algorithms 2 / 18 Rules of the Game Sorting is the
More informationAlgorithms and Their Complexity
CSCE 222 Discrete Structures for Computing David Kebo Houngninou Algorithms and Their Complexity Chapter 3 Algorithm An algorithm is a finite sequence of steps that solves a problem. Computational complexity
More informationCS 4407 Algorithms Lecture 2: Iterative and Divide and Conquer Algorithms
CS 4407 Algorithms Lecture 2: Iterative and Divide and Conquer Algorithms Prof. Gregory Provan Department of Computer Science University College Cork 1 Lecture Outline CS 4407, Algorithms Growth Functions
More informationLongest Common Prefixes
Longest Common Prefixes The standard ordering for strings is the lexicographical order. It is induced by an order over the alphabet. We will use the same symbols (,
More informationClass Note #14. In this class, we studied an algorithm for integer multiplication, which. 2 ) to θ(n
Class Note #14 Date: 03/01/2006 [Overall Information] In this class, we studied an algorithm for integer multiplication, which improved the running time from θ(n 2 ) to θ(n 1.59 ). We then used some of
More informationAlgorithm Design and Analysis
Algorithm Design and Analysis LECTURE 9 Divide and Conquer Merge sort Counting Inversions Binary Search Exponentiation Solving Recurrences Recursion Tree Method Master Theorem Sofya Raskhodnikova S. Raskhodnikova;
More informationComputer Algorithms CISC4080 CIS, Fordham Univ. Outline. Last class. Instructor: X. Zhang Lecture 2
Computer Algorithms CISC4080 CIS, Fordham Univ. Instructor: X. Zhang Lecture 2 Outline Introduction to algorithm analysis: fibonacci seq calculation counting number of computer steps recursive formula
More informationComputer Algorithms CISC4080 CIS, Fordham Univ. Instructor: X. Zhang Lecture 2
Computer Algorithms CISC4080 CIS, Fordham Univ. Instructor: X. Zhang Lecture 2 Outline Introduction to algorithm analysis: fibonacci seq calculation counting number of computer steps recursive formula
More informationMinilecture 2: Sorting Algorithms
Math/CCS 10 Professor: Padraic Bartlett Minilecture 2: Sorting Algorithms Week 1 UCSB 201 On Monday s homework, we looked at an algorithm designed to sort a list! In this class, we will study several such
More informationAnalysis of Algorithm Efficiency. Dr. Yingwu Zhu
Analysis of Algorithm Efficiency Dr. Yingwu Zhu Measure Algorithm Efficiency Time efficiency How fast the algorithm runs; amount of time required to accomplish the task Our focus! Space efficiency Amount
More informationDivide and Conquer Algorithms
Divide and Conquer Algorithms T. M. Murali March 17, 2014 Divide and Conquer Break up a problem into several parts. Solve each part recursively. Solve base cases by brute force. Efficiently combine solutions
More informationProblem 5. Use mathematical induction to show that when n is an exact power of two, the solution of the recurrence
A. V. Gerbessiotis CS 610-102 Spring 2014 PS 1 Jan 27, 2014 No points For the remainder of the course Give an algorithm means: describe an algorithm, show that it works as claimed, analyze its worst-case
More informationCSE548, AMS542: Analysis of Algorithms, Fall 2017 Date: October 11. In-Class Midterm. ( 7:05 PM 8:20 PM : 75 Minutes )
CSE548, AMS542: Analysis of Algorithms, Fall 2017 Date: October 11 In-Class Midterm ( 7:05 PM 8:20 PM : 75 Minutes ) This exam will account for either 15% or 30% of your overall grade depending on your
More informationCS173 Running Time and Big-O. Tandy Warnow
CS173 Running Time and Big-O Tandy Warnow CS 173 Running Times and Big-O analysis Tandy Warnow Today s material We will cover: Running time analysis Review of running time analysis of Bubblesort Review
More information5. DIVIDE AND CONQUER I
5. DIVIDE AND CONQUER I mergesort counting inversions randomized quicksort median and selection closest pair of points Lecture slides by Kevin Wayne Copyright 2005 Pearson-Addison Wesley http://www.cs.princeton.edu/~wayne/kleinberg-tardos
More informationLECTURE NOTES ON DESIGN AND ANALYSIS OF ALGORITHMS
G.PULLAIAH COLLEGE OF ENGINEERING AND TECHNOLOGY LECTURE NOTES ON DESIGN AND ANALYSIS OF ALGORITHMS Department of Computer Science and Engineering 1 UNIT 1 Basic Concepts Algorithm An Algorithm is a finite
More informationCSCE 222 Discrete Structures for Computing
CSCE 222 Discrete Structures for Computing Algorithms Dr. Philip C. Ritchey Introduction An algorithm is a finite sequence of precise instructions for performing a computation or for solving a problem.
More information