Insertion SortComplexityComparison CountSlide 4Slide 5Slide 6Slide 7Worst-Case Comparison CountSlide 9Step CountSlide 11Slide 12Slide 13Slide 14Asymptotic Complexity of Insertion SortComplexity of Insertion SortSlide 17Practical ComplexitiesImpractical ComplexitiesFaster Computer Vs Better AlgorithmInsertion Sortfor (int i = 1; i < a.length; i++){// insert a[i] into a[0:i-1] int t = a[i]; int j; for (j = i - 1; j >= 0 && t < a[j]; j--) a[j + 1] = a[j]; a[j + 1] = t;}Complexity Space/MemoryTime–Count a particular operation–Count number of steps–Asymptotic complexityComparison Countfor (int i = 1; i < a.length; i++){// insert a[i] into a[0:i-1] int t = a[i]; int j; for (j = i - 1; j >= 0 && t < a[j]; j--) a[j + 1] = a[j]; a[j + 1] = t;}Comparison CountPick an instance characteristic … n, n = a.length for insertion sortDetermine count as a function of this instance characteristic.Comparison Countfor (j = i - 1; j >= 0 && t < a[j]; j--) a[j + 1] = a[j];How many comparisons are made?Comparison Countfor (j = i - 1; j >= 0 && t < a[j]; j--) a[j + 1] = a[j];number of compares depends on a[]s and t as well as on iComparison CountWorst-case count = maximum countBest-case count = minimum countAverage countWorst-Case Comparison Countfor (j = i - 1; j >= 0 && t < a[j]; j--) a[j + 1] = a[j];a = [1, 2, 3, 4] and t = 0 => 4 comparesa = [1,2,3,…,i] and t = 0 => i comparesWorst-Case Comparison Countfor (int i = 1; i < n; i++) for (j = i - 1; j >= 0 && t < a[j]; j--) a[j + 1] = a[j];total compares = 1 + 2 + 3 + … + (n-1) = (n-1)n/2Step CountA step is an amount of computing that does not depend on the instance characteristic n10 adds, 100 subtracts, 1000 multipliescan all be counted as a single stepn adds cannot be counted as 1 stepStep Countfor (int i = 1; i < a.length; i++){// insert a[i] into a[0:i-1] int t = a[i]; int j; for (j = i - 1; j >= 0 && t < a[j]; j--) a[j + 1] = a[j]; a[j + 1] = t; } for (int i = 1; i < a.length; i++) 1{// insert a[i] into a[0:i-1] 0 int t = a[i]; 1 int j; 0 for (j = i - 1; j >= 0 && t < a[j]; j--) 1 a[j + 1] = a[j]; 1 a[j + 1] = t; 1} 0s/eStep Counts/e isn’t always 0 or 1x = MyMath.sum(a, n);where n is the instance characteristichas a s/e count of nStep Countfor (int i = 1; i < a.length; i++){// insert a[i] into a[0:i-1] int t = a[i]; int j; for (j = i - 1; j >= 0 && t < a[j]; j--) a[j + 1] = a[j]; a[j + 1] = t; } for (int i = 1; i < a.length; i++) 1{// insert a[i] into a[0:i-1] 0 int t = a[i]; 1 int j; 0 for (j = i - 1; j >= 0 && t < a[j]; j--) 1 a[j + 1] = a[j]; 1 a[j + 1] = t; 1} 0s/e stepsii+ 1Step Countfor (int i = 1; i < a.length; i++) { 2i + 3}step count for for (int i = 1; i < a.length; i++) is nstep count for body of for loop is2(1+2+3+…+n-1) + 3(n-1)= (n-1)n + 3(n-1)= (n-1)(n+3)Asymptotic Complexity of Insertion SortO(n2)What does this mean?Complexity of Insertion SortTime or number of operations does not exceed c.n2 on any input of size n (n suitably large).Actually, the worst-case time is Theta(n2) and the best-case is Theta(n)So, the worst-case time is expected to quadruple each time n is doubledComplexity of Insertion SortIs O (n2) too much time?Is the algorithm practical?Practical Complexities109 instructions/secondn n nlogn n2 n3 1000 1mic 10mic 1milli 1sec 10000 10mic 130mic 100milli 17min 106 1milli 20milli 17min 32yearsImpractical Complexities109 instructions/secondn n4 n10 2n 1000 17min 3.2 x 1013 years 3.2 x 10283 years 10000 116 days ??? ??? 106 3 x 107 years ?????? ??????Faster Computer Vs Better AlgorithmAlgorithmic improvement more usefulthan hardware improvement.E.g. 2n to
View Full Document