Data Structures and Algorithms in Java Chapter 2 Complexity Analysis.

Slides:



Advertisements
Similar presentations
MATH 224 – Discrete Mathematics
Advertisements

Analysis of Algorithms
 The running time of an algorithm as input size approaches infinity is called the asymptotic running time  We study different notations for asymptotic.
CMPT 225 Sorting Algorithms Algorithm Analysis: Big O Notation.
Chapter 1 – Basic Concepts
the fourth iteration of this loop is shown here
Fall 2006CENG 7071 Algorithm Analysis. Fall 2006CENG 7072 Algorithmic Performance There are two aspects of algorithmic performance: Time Instructions.
CSE332: Data Abstractions Lecture 2: Math Review; Algorithm Analysis Tyler Robison Summer
CSE332: Data Abstractions Lecture 2: Math Review; Algorithm Analysis Dan Grossman Spring 2010.
CSC401 – Analysis of Algorithms Lecture Notes 1 Introduction
1 ICS 353 Design and Analysis of Algorithms Spring Semester (062) King Fahd University of Petroleum & Minerals Information & Computer Science.
Asymptotic Growth Rate
Cutler/HeadGrowth of Functions 1 Asymptotic Growth Rate.
© 2004 Goodrich, Tamassia 1 Lecture 01 Algorithm Analysis Topics Basic concepts Theoretical Analysis Concept of big-oh Choose lower order algorithms Relatives.
Complexity Analysis (Part I)
Analysis of Algorithms (Chapter 4)
Complexity Analysis (Part II)
Analysis of Algorithms1 Estimate the running time Estimate the memory space required. Time and space depend on the input size.
Analysis of Algorithms
25 June 2015Comp 122, Spring 2004 Asymptotic Notation, Review of Functions & Summations.
Data Structures, Spring 2004 © L. Joskowicz 1 Data Structures – LECTURE 2 Elements of complexity analysis Performance and efficiency Motivation: analysis.
DATA STRUCTURES AND ALGORITHMS Lecture Notes 1 Prepared by İnanç TAHRALI.
Algorithm Design and Analysis Liao Minghong School of Computer Science and Technology of HIT July, 2003.
Time Complexity Dr. Jicheng Fu Department of Computer Science University of Central Oklahoma.
Sequences Informally, a sequence is a set of elements written in a row. – This concept is represented in CS using one- dimensional arrays The goal of mathematics.
Chapter 2.6 Comparison of Algorithms modified from Clifford A. Shaffer and George Bebis.
Week 2 CS 361: Advanced Data Structures and Algorithms
C. – C. Yao Data Structure. C. – C. Yao Chap 1 Basic Concepts.
Analysis CS 367 – Introduction to Data Structures.
Lecture 2 Computational Complexity
Algorithm Efficiency CS 110: Data Structures and Algorithms First Semester,
Mathematics Review and Asymptotic Notation
CSC 201 Analysis and Design of Algorithms Lecture 04: CSC 201 Analysis and Design of Algorithms Lecture 04: Time complexity analysis in form of Big-Oh.
CS 3343: Analysis of Algorithms
DISCRETE MATHEMATICS I CHAPTER 11 Dr. Adam Anthony Spring 2011 Some material adapted from lecture notes provided by Dr. Chungsim Han and Dr. Sam Lomonaco.
Complexity Analysis Chapter 1.
Analysis of Algorithms
Math Review Data Structures & File Management Computer Science Dept Va Tech July 2000 ©2000 McQuain WD 1 Summation Formulas Let N > 0, let A, B, and C.
1 COMP3040 Tutorial 1 Analysis of algorithms. 2 Outline Motivation Analysis of algorithms Examples Practice questions.
Asymptotic Analysis-Ch. 3
Program Efficiency & Complexity Analysis. Algorithm Review An algorithm is a definite procedure for solving a problem in finite number of steps Algorithm.
Data Structure Introduction.
Chapter 5 Algorithms (2) Introduction to CS 1 st Semester, 2015 Sanghyun Park.
Introduction to Analysis of Algorithms CS342 S2004.
Algorithmic Analysis Charl du Plessis and Robert Ketteringham.
Analysis of algorithms. What are we going to learn? Need to say that some algorithms are “better” than others Criteria for evaluation Structure of programs.
1/6/20161 CS 3343: Analysis of Algorithms Lecture 2: Asymptotic Notations.
Asymptotic Performance. Review: Asymptotic Performance Asymptotic performance: How does algorithm behave as the problem size gets very large? Running.
E.G.M. PetrakisAlgorithm Analysis1  Algorithms that are equally correct can vary in their utilization of computational resources  time and memory  a.
1 Chapter 2 Algorithm Analysis All sections. 2 Complexity Analysis Measures efficiency (time and memory) of algorithms and programs –Can be used for the.
Computational complexity The same problem can frequently be solved with different algorithms which differ in efficiency. Computational complexity is a.
1 Chapter 2 Algorithm Analysis Reading: Chapter 2.
Ch03-Algorithms 1. Algorithms What is an algorithm? An algorithm is a finite set of precise instructions for performing a computation or for solving a.
Chapter 15 Running Time Analysis. Topics Orders of Magnitude and Big-Oh Notation Running Time Analysis of Algorithms –Counting Statements –Evaluating.
1 COMP9024: Data Structures and Algorithms Week Two: Analysis of Algorithms Hui Wu Session 2, 2014
CSE 3358 NOTE SET 2 Data Structures and Algorithms 1.
Fall 2002CMSC Discrete Structures1 Chapter 3 Sequences Mathematical Induction Recursion Recursion.
Algorithm Analysis 1.
Analysis of Algorithms
Unit 2 Introduction to Complexity Analysis
Introduction to Algorithms
Analysis of Algorithms
Analysis of Algorithms
Mathematical Induction Recursion
Analysis of Algorithms
Analysis of Algorithms
Discrete Mathematics 7th edition, 2009
Estimating Algorithm Performance
Analysis of Algorithms
Presentation transcript:

Data Structures and Algorithms in Java Chapter 2 Complexity Analysis

Data Structures and Algorithms in Java 2 Objectives Discuss the following topics: Computational and Asymptotic Complexity Big-O Notation Properties of Big-O Notation Ω and Θ Notations Examples of Complexities Finding Asymptotic Complexity: Examples Amortized Complexity The Best, Average, and Worst Cases NP-Completeness

Data Structures and Algorithms in Java 3 Computational and Asymptotic Complexity Computational complexity measures the degree of difficulty of an algorithm Indicates how much effort is needed to apply an algorithm or how costly it is To evaluate an algorithm’s efficiency, use logical units that express a relationship such as: –The size n of a file or an array –The amount of time t required to process the data

Data Structures and Algorithms in Java 4 Computational and Asymptotic Complexity (continued) This measure of efficiency is called asymptotic complexity It is used when disregarding certain terms of a function –To express the efficiency of an algorithm –When calculating a function is difficult or impossible and only approximations can be found f (n) = n n + log 10 n + 1,000

Data Structures and Algorithms in Java 5 Computational and Asymptotic Complexity (continued) Figure 2-1 The growth rate of all terms of function f (n) = n n + log 10 n + 1,000

Data Structures and Algorithms in Java 6 Big-O Notation Introduced in 1894, the big-O notation specifies asymptotic complexity, which estimates the rate of function growth Definition 1: f (n) is O(g(n)) if there exist positive numbers c and N such that f (n) ≤ cg(n) for all n ≥ N Figure 2-2 Different values of c and N for function f (n) = 2n 2 + 3n + 1 = O(n 2 ) calculated according to the definition of big-O

Data Structures and Algorithms in Java 7 Big-O Notation (continued) Figure 2-3 Comparison of functions for different values of c and N from Figure 2-2

Data Structures and Algorithms in Java 8 Properties of Big-O Notation Fact 1 (transitivity) If f (n) is O(g(n)) and g(n) is O(h(n)), then f(n) is O(h(n)) Fact 2 If f (n) is O(h(n)) and g(n) is O(h(n)), then f(n) + g(n) is O(h(n)) Fact 3 The function an k is O(n k )

Data Structures and Algorithms in Java 9 Properties of Big-O Notation (continued) Fact 4 The function n k is O(n k+j ) for any positive j Fact 5 If f(n) = cg(n), then f(n) is O(g(n)) Fact 6 The function log a n is O(log b n) for any positive numbers a and b ≠ 1 Fact 7 log a n is O(lg n) for any positive a ≠ 1, where lg n = log 2 n

Data Structures and Algorithms in Java 10 Ω and Θ Notations Big-O notation refers to the upper bounds of functions There is a symmetrical definition for a lower bound in the definition of big-Ω Definition 2: The function f(n) is Ω(g(n)) if there exist positive numbers c and N such that f(n) ≥ cg(n) for all n ≥ N

Data Structures and Algorithms in Java 11 Ω and Θ Notations (continued) The difference between this definition and the definition of big-O notation is the direction of the inequality One definition can be turned into the other by replacing “≥” with “≤” There is an interconnection between these two notations expressed by the equivalence f (n) is Ω(g(n)) iff g(n) is O(f (n)) (prove?)

Data Structures and Algorithms in Java 12 Ω and Θ Notations (continued) Definition 3: f(n) is Θ(g(n)) if there exist positive numbers c 1, c 2, and N such that c 1 g(n) ≤ f(n) ≤ c 2 g(n) for all n ≥ N When applying any of these notations (big-O,Ω, and Θ), remember they are approximations that hide some detail that in many cases may be considered important

Data Structures and Algorithms in Java 13 Examples of Complexities Algorithms can be classified by their time or space complexities An algorithm is called constant if its execution time remains the same for any number of elements It is called quadratic if its execution time is O(n 2 )

Data Structures and Algorithms in Java 14 Examples of Complexities (continued) Figure 2-4 Classes of algorithms and their execution times on a computer executing 1 million operations per second (1 sec = 10 6 μsec = 10 3 msec)

Data Structures and Algorithms in Java 15 Examples of Complexities (continued) Figure 2-4 Classes of algorithms and their execution times on a computer executing 1 million operations per second (1 sec = 10 6 μsec = 10 3 msec) (continued)

Data Structures and Algorithms in Java 16 Examples of Complexities (continued) Figure 2-5 Typical functions applied in big-O estimates

Data Structures and Algorithms in Java 17 Finding Asymptotic Complexity: Examples Asymptotic bounds are used to estimate the efficiency of algorithms by assessing the amount of time and memory needed to accomplish the task for which the algorithms were designed for (i = sum = 0; i < n; i++) sum += a[i] Initialize two variables Execute two assignments –Update sum –Update i Total 2+2n assignments for the complete execution Asymptotic complexity is O(n)

Data Structures and Algorithms in Java 18 Finding Asymptotic Complexity: Examples Printing sums of all the sub-arrays that begins with position 0 for (i = 0; i < n; i++) { for (j = 1, sum = a[0]; j <= i; j++) sum += a[j]; System.out.println ("sum for subarray 0 through "+i+" is" + sum); } 1+3n+ =1+3n+2(1+2+….n-1) =1+3n+n(n-1)=O(n)+ O(n 2 )= O(n 2 )

Data Structures and Algorithms in Java 19 Examples Continued Printing sums of numbers in the last five cells of the sub-arrays starting in position 0 for (i = 4; i < n; i++) { for (j = i-3, sum = a[i-4]; j <= i; j++) sum += a[j]; System.out.println ("sum for subarray "+(i - 4)+" through "+i+" is"+ sum); } n-4 times for outer loop For each i, inner loop executes only four times 1+8.(n-4)= O(n)

Data Structures and Algorithms in Java 20 Finding Asymptotic Complexity: Examples Finding the length of the longest sub-array with the numbers in increasing order For example [1 2 5 ] in [ ] for (i = 0, length = 1; i < n-1; i++) { for (i1 = i2 = k = i; k < n-1 && a[k] < a[k+1]; k++, i2++); if (length < i2 - i1 + 1) length = i2 - i1 + 1; System.out.println ("the length of the longest ordered subarray is" + length); }

Data Structures and Algorithms in Java 21 If all numbers in the array are in decreasing order, the outer loop is executed n-1 times But in each iteration, the inner loop executes just one time. The algorithm is O(n) If the numbers are in increasing order, the outer loop is executed n- 1 times and the inner loop is executed n-1-i times for each i in {0,…, n-2}. The algorithm is O(n 2 )

Data Structures and Algorithms in Java 22 Finding Asymptotic Complexity: Examples int binarySearch(int[] arr, int key) { int lo = 0, mid, hi = arr.length-1; while (lo <= hi) { mid = (lo + hi)/2; if (key < arr[mid]) hi = mid - 1; else if (arr[mid] < key) lo = mid + 1; else return mid; // success } return -1; // failure } O(lg n)

Data Structures and Algorithms in Java 23 The Best, Average, and Worst Cases The worst case is when an algorithm requires a maximum number of steps The best case is when the number of steps is the smallest The average case falls between these extremes C avg = Σ i p(input i )steps(input i )

Data Structures and Algorithms in Java 24 The average complexity is established by considering possible inputs to an algorithm, determining the number of steps performed by the algorithm for each input, adding the number of steps for all the inputs, and dividing by the number of inputs This definition assumes that the probability of occurrence of each input is the same. It is not the case always. The average complexity is defined as the average over the number of steps executed when processing each input weighted by the probability of occurrence of this input

Data Structures and Algorithms in Java 25 Consider searching sequentially an unordered array to find a number The best case is when the number is found in the first cell The worst case is when the number is in the last cell or not in the array at all The average case?

Data Structures and Algorithms in Java 26 Assuming the probability distribution is uniform The probability equals to 1/n for each position To find a number in one try is 1/n To find a number in two tries is 1/n etc… The average steps to find a number is … + n n = n + 1 2

Data Structures and Algorithms in Java 27 If the probabilities differ, the average case gives a different outcome If the probability of finding a number in the first cell is ½, the probability in the second cell is ¼ and the probability is the same for remaining cells = the average steps 1 - ½ - ¼ n (n - 2)

Data Structures and Algorithms in Java 28 Summation Formulas Let N > 0, let A, B, and C be constants, and let f and g be any functions. Then: S1: factor out constantS2: separate summed terms S3: sum of constantS4: sum of kS5: sum of k squaredS6: sum of 2^kS7: sum of k2^(k-1)

Data Structures and Algorithms in Java 29 Logarithms Let b be a real number, b > 0 and b  1. Then, for any real number x > 0, the logarithm of x to base b is the power to which b must be raised to yield x. That is: For example: If the base is omitted, the standard convention in mathematics is that log base 10 is intended; in computer science the standard convention is that log base 2 is intended.

Data Structures and Algorithms in Java 30 Logarithms Let a and b be real numbers, both positive and neither equal to 1. Let x > 0 and y > 0 be real numbers. L1:L2:L3:L4:L7: L8: L9:L5: L6: L10:

Data Structures and Algorithms in Java 31 Limit of a Function Definition: Let f(x) be a function with domain (a, b) and let a < c < b. The limit of f(x) as x approaches c is L if, for every positive real number , there is a positive real number  such that whenever |x-c| <  then |f(x) – L| < . The definition being cumbersome, the following theorems on limits are useful. We assume f(x) is a function with domain as described above and that K is a constant. C1: C2: C3:

Data Structures and Algorithms in Java 32 Limit of a Function Here assume f(x) and g(x) are functions with domain as described above and that K is a constant, and that both the following limits exist (and are finite): C4: C5: Then: C6: C7:

Data Structures and Algorithms in Java 33 Limit as x Approaches Infinity Definition: Let f(x) be a function with domain [0,  ). The limit of f(x) as x approaches  is L if, for every positive real number , there is a positive real number N such that whenever x > N then |f(x) – L| < . The definition being cumbersome, the following theorems on limits are useful. We assume f(x) is a function with domain [0,  ) and that K is a constant. C8: C9: C10:

Data Structures and Algorithms in Java 34 Limit of a Rational Function Given a rational function the last two rules are sufficient if a little algebra is employed: Divide by highest power of x from the denominator. Take limits term by term. Apply theorem C3.

Data Structures and Algorithms in Java 35 Infinite Limits In some cases, the limit may be infinite. Mathematically, this means that the limit does not exist. C11: C13: Example: C12:

Data Structures and Algorithms in Java 36 l'Hôpital's Rule In some cases, the reduction trick shown for rational functions does not apply: In such cases, l'Hôpital's Rule is often useful. If f(x) and g(x) are differentiable functions such that then: This also applies if the limit is 0.

Data Structures and Algorithms in Java 37 l'Hôpital's Rule Examples Applying l'Hôpital's Rule: Another example: Recall that:

Data Structures and Algorithms in Java 38 Mathematical Induction Mathematical induction is a technique for proving that a statement is true for all integers in the range from N 0 to , where N 0 is typically 0 or 1. Let P(N) be a proposition regarding the integer N, and let S be the set of all integers k for which P(k) is true. If 1)N 0 is in S, and 2)whenever N is in S then N+1 is also in S, then S contains all integers in the range [N 0,  ). First (or Weak) Principle of Mathematical Induction To apply the PMI, we must first establish that a specific integer, N 0, is in S (establishing the basis) and then we must establish that if a arbitrary integer, N  N 0, is in S then its successor, N+1, is also in S.

Data Structures and Algorithms in Java 39 Induction Example Theorem: For all integers n  1, n 2 +n is a multiple of 2. proof: Let S be the set of all integers for which n 2 +n is a multiple of 2. If n = 1, then n 2 +n = 2, which is obviously a multiple of 2. This establishes the basis, that 1 is in S. Now suppose that some integer k  1 is an element of S. Then k 2 +k is a multiple of 2. We need to show that k+1 is an element of S; in other words, we must show that (k+1) 2 +(k+1) is a multiple of 2. Performing simple algebra: (k+1) 2 +(k+1) = (k 2 + 2k + 1) + (k + 1) = k 2 + 3k + 2 Now we know k 2 +k is a multiple of 2, and the expression above can be grouped to show: (k+1) 2 +(k+1) = (k 2 + k) + (2k + 2) = (k 2 + k) + 2(k + 1) The last expression is the sum of two multiples of 2, so it's also a multiple of 2. Therefore, k+1 is an element of S. Therefore, by PMI, S contains all integers [1,  ). QED

Data Structures and Algorithms in Java 40 Inadequacy of the First Form of Induction Theorem: Every integer greater than 3 can be written as a sum of 2's and 5's. (That is, if N > 3, then there are nonnegative integers x and y such that N = 2x + 5y.) This is not (easily) provable using the First Principle of Induction. The problem is that the way to write N+1 in terms of 2's and 5's has little to do with the way N is written in terms of 2's and 5's. For example, if we know that N = 2x + 5y we can say that N + 1 = 2x + 5y + 1 = 2x + 5(y – 1) = 2(x + 3) + 5(y – 1) but we have no reason to believe that y – 1 is nonnegative. (Suppose for example that N is 9.)

Data Structures and Algorithms in Java 41 "Strong" Form of Induction Let P(N) be a proposition regarding the integer N, and let S be the set of all integers k for which P(k) is true. If 1)N 0 is in S, and 2)whenever N 0 through N are in S then N+1 is also in S, then S contains all integers in the range [N 0,  ). Second (or Strong) Principle of Mathematical Induction Interestingly, the "strong" form of induction is logically equivalent to the "weak" form stated earlier; so in principle, anything that can be proved using the "strong" form can also be proved using the "weak" form. There is a second statement of induction, sometimes called the "strong" form, that is adequate to prove the result on the preceding slide:

Data Structures and Algorithms in Java 42 Using the Second Form of Induction Theorem: Every integer greater than 3 can be written as a sum of 2's and 5's. proof: Let S be the set of all integers n > 3 for which n = 2x + 5y for some nonnegative integers x and y. If n = 4, then n = 2*2 + 5*0. If n = 5, then n = 2*0 + 5*1. This establishes the basis, that 4 and 5 are in S. Now suppose that all integers from 4 through k are elements of S, where k  5. We need to show that k+1 is an element of S; in other words, we must show that k+1 = 2r + 5s for some nonnegative integers r and s. Now k+1  6, so k-1  4. Therefore by our assumption, k-1 = 2x + 5y for some nonnegative integers x and y. Then, simple algebra yields that: k+1 = k = 2x + 5y + 2 = 2(x+1) + 5y, whence k+1 is an element of S. Therefore, by the Second PMI, S contains all integers [4,  ). QED

Data Structures and Algorithms in Java 43 Amortized Complexity Amortized analysis: –Analyzes sequences of operations –Can be used to find the average complexity of a worst case sequence of operations By analyzing sequences of operations rather than isolated operations, amortized analysis takes into account interdependence between operations and their results

Data Structures and Algorithms in Java 44 Amortized Complexity (continued) Worst case: C(op 1, op 2, op 3,...) = C worst (op 1 ) + C worst (op 2 ) + C worst (op 3 ) +... Average case: C(op 1, op 2, op 3,...) = C avg (op 1 ) + C avg (op 2 ) + C avg (op 3 ) +... Amortized: C(op 1, op 2, op 3,...) = C(op 1 ) + C(op 2 ) + C(op 3 ) +... Where C can be worst, average, or best case complexity

Data Structures and Algorithms in Java 45 Amortized Complexity (continued) Figure 2-6 Estimating the amortized cost

Data Structures and Algorithms in Java 46 NP-Completeness A deterministic algorithm is a uniquely defined (determined) sequence of steps for a particular input –There is only one way to determine the next step that the algorithm can make A nondeterministic algorithm is an algorithm that can use a special operation that makes a guess when a decision is to be made

Data Structures and Algorithms in Java 47 NP-Completeness (continued) A nondeterministic algorithm is considered polynomial: its running time in the worst case is O(n k ) for some k Problems that can be solved with such algorithms are called tractable and the algorithms are considered efficient A problem is called NP-complete if it is NP (it can be solved efficiently by a nondeterministic polynomial algorithm) and every NP problem can be polynomially reduced to this problem

Data Structures and Algorithms in Java 48 NP-Completeness (continued) The satisfiability problem concerns Boolean expressions in conjunctive normal form (CNF)

Data Structures and Algorithms in Java 49 Summary Computational complexity measures the degree of difficulty of an algorithm. This measure of efficiency is called asymptotic complexity. To evaluate an algorithm’s efficiency, use logical units that express a relationship. This measure of efficiency is called asymptotic complexity.

Data Structures and Algorithms in Java 50 Summary (continued) Introduced in 1894, the big-O notation specifies asymptotic complexity, which estimates the rate of function growth. An algorithm is called constant if its execution time remains the same for any number of elements. It is called quadratic if its execution time is O(n 2 ). Amortized analysis analyzes sequences of operations.

Data Structures and Algorithms in Java 51 Summary (continued) A deterministic algorithm is a uniquely defined (determined) sequence of steps for a particular input. A nondeterministic algorithm is an algorithm that can use a special operation that makes a guess when a decision is to be made. A nondeterministic algorithm is considered polynomial.