Lecture 5: complexity reading:

Slides:



Advertisements
Similar presentations
Algorithm Analysis Input size Time I1 T1 I2 T2 …
Advertisements

CSE 373: Data Structures and Algorithms Lecture 5: Math Review/Asymptotic Analysis III 1.
CSE 143 Lecture 4: testing and complexity reading:
CISC220 Spring 2010 James Atlas Lecture 06: Linked Lists (2), Big O Notation.
Lecture 4 Sept 4 Goals: chapter 1 (completion) 1-d array examples Selection sorting Insertion sorting Max subsequence sum Algorithm analysis (Chapter 2)
1 Algorithm Efficiency, Big O Notation, and Role of Data Structures/ADTs Algorithm Efficiency Big O Notation Role of Data Structures Abstract Data Types.
Analysis of Algorithm.
Abstract Data Types (ADTs) Data Structures The Java Collections API
Algorithm Analysis Dr. Bernard Chen Ph.D. University of Central Arkansas.
CSE 143 Lecture 5 Binary search; complexity reading: slides created by Marty Stepp and Hélène Martin
Week 2 CS 361: Advanced Data Structures and Algorithms
Analysis of Algorithms
Big Oh Algorithms are compared to each other by expressing their efficiency in big-oh notation Big O notation is used in Computer Science to describe the.
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.
Geoff Holmes and Bernhard Pfahringer COMP206-08S General Programming 2.
CSE 143 Lecture 6 Interfaces; Complexity (Big-Oh) reading: 9.5, 11.1, slides created by Marty Stepp
Binary search and complexity reading:
Algorithm Analysis. What is an algorithm ? A clearly specifiable set of instructions –to solve a problem Given a problem –decide that the algorithm is.
CISC220 Spring 2010 James Atlas Lecture 07: Big O Notation.
1 CSE 373 Algorithm Analysis and Runtime Complexity slides created by Marty Stepp ©
Program Performance 황승원 Fall 2010 CSE, POSTECH. Publishing Hwang’s Algorithm Hwang’s took only 0.1 sec for DATASET1 in her PC while Dijkstra’s took 0.2.
Building Java Programs Chapter 13 Lecture 13-1: binary search and complexity reading:
(Complexity) Analysis of Algorithms Algorithm Input Output 1Analysis of Algorithms.
Algorithm Analysis 1.
Introduction to Analysis of Algorithms
Analysis of Algorithms
COP 3503 FALL 2012 Shayan Javed Lecture 15
Introduction to complexity
Lecture 06: Linked Lists (2), Big O Notation
Introduction to Analysing Costs
Lecture 2: Implementing ADTs
Big-Oh and Execution Time: A Review
Lecture 2: Implementing ADTs
Building Java Programs
Lecture 14: binary search and complexity reading:
CSE 143 Lecture 5 Binary search; complexity reading:
Algorithm design and Analysis
Analysis Algorithms.
Chapter 12: Analysis of Algorithms
CSE 143 Lecture 5 More Stacks and Queues; Complexity (Big-Oh)
GC 211:Data Structures Algorithm Analysis Tools
What is CS 253 about? Contrary to the wide spread belief that the #1 job of computers is to perform calculations (which is why the are called “computers”),
CSE 143 Lecture 6 Interfaces; Complexity (Big-Oh)
Algorithm Efficiency, Big O Notation, and Javadoc
Big O Notation.
Lecture 15: binary search reading:
CS 201 Fundamental Structures of Computer Science
Programming and Data Structure
CSE 143 Lecture 8 More Stacks and Queues; Complexity (Big-Oh)
Programming and Data Structure
Building Java Programs
Searching, Sorting, and Asymptotic Complexity
Building Java Programs
Lecture 8: Complex Linked List Code reading: 16.2 – 16.3
Building Java Programs Chapter 13
CE 221 Data Structures and Algorithms
CSE 143 Lecture 8 More Stacks and Queues; Complexity (Big-Oh)
Analysis of Algorithms
Building Java Programs
Building Java Programs
slides created by Ethan Apter
Sum this up for me Let’s write a method to calculate the sum from 1 to some n public static int sum1(int n) { int sum = 0; for (int i = 1; i
Analysis of Algorithms
Lecture 4: Introduction to Code Analysis
Complexity Based on slides by Ethan Apter
slides created by Ethan Apter
Lecture 2: Stacks and Queues
Algorithms and data structures: basic definitions
CMPT 225 Lecture 6 – Review of Complexity Analysis using the Big O notation + Comparing List ADT class implementations.
Presentation transcript:

Lecture 5: complexity reading: 13.1-13.2 CSE 143 Lecture 5: complexity reading: 13.1-13.2 http://www.alexsweet.co.uk/comics.php?comic=2

Interfaces interface: A list of methods that a class can promise to implement. Inheritance gives you an is-a relationship and code sharing. A Lawyer can be treated as an Employee and inherits its code. Interfaces give you an is-a relationship without code sharing. A Rectangle object can be treated as a Shape but inherits no code. Always declare variables using the interface type. List<String> list = new ArrayList<String>();

Runtime Efficiency (13.2) efficiency: measure of computing resources used by code. can be relative to speed (time), memory (space), etc. most commonly refers to run time Assume the following: Any single Java statement takes same amount of time to run. A method call's runtime is measured by the total of the statements inside the method's body. A loop's runtime, if the loop repeats N times, is N times the runtime of the statements in its body.

Efficiency examples 3 N 4N + 3 3N statement1; statement2; statement3; for (int i = 1; i <= N; i++) { statement4; } statement5; statement6; statement7; N 3N

Efficiency examples 2 N2 N2 + 4N 4N for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { statement1; } statement2; statement3; statement4; statement5; How many statements will execute if N = 10? If N = 1000? N2 4N

Algorithm growth rates (13.2) We measure runtime in proportion to the input data size, N. growth rate: Change in runtime as N changes. Say an algorithm runs 0.4N3 + 25N2 + 8N + 17 statements. Consider the runtime when N is extremely large . We ignore constants like 25 because they are tiny next to N. The highest-order term (N3) dominates the overall runtime. We say that this algorithm runs "on the order of" N3. or O(N3) for short ("Big-Oh of N cubed")

Complexity classes complexity class: A category of algorithm efficiency based on the algorithm's relationship to the input size N. Class Big-Oh If you double N, ... Example constant O(1) unchanged 10ms logarithmic O(log2 N) increases slightly 175ms linear O(N) doubles 3.2 sec log-linear O(N log2 N) slightly more than doubles 6 sec quadratic O(N2) quadruples 1 min 42 sec cubic O(N3) multiplies by 8 55 min ... exponential O(2N) multiplies drastically 5 * 1061 years

Complexity classes http://recursive-design.com/blog/2010/12/07/comp-sci-101-big-o-notation/ - post about a Google interview

Collection efficiency Efficiency of our ArrayIntList or Java's ArrayList: Method ArrayList add O(1) add(index, value) O(N) get remove set size Method ArrayList add add(index, value) get remove set size

Max subsequence sum Write a method maxSum to find the largest sum of any contiguous subsequence in an array of integers. Easy for all positives: include the whole array. What if there are negatives? (Let's define the max to be 0 if the array is entirely negative.) Ideas for algorithms? index 1 2 3 4 5 6 7 8 value -4 10 15 -2 22 -8 index 1 2 3 4 5 6 7 8 value -4 10 15 -2 22 -8 Largest sum: 10 + 15 + -2 + 22 = 45

Algorithm 1 pseudocode maxSum(a): max = 0. for each starting index i: for each ending index j: sum = add the elements from a[i] to a[j]. if sum > max, max = sum. return max. index 1 2 3 4 5 6 7 8 value -4 10 15 -2 22 -8

Algorithm 1 code What complexity class is this algorithm? O(N3). Takes a few seconds to process 2000 elements. public static int maxSum1(int[] a) { int max = 0; for (int i = 0; i < a.length; i++) { for (int j = i; j < a.length; j++) { // sum = add the elements from a[i] to a[j]. int sum = 0; for (int k = i; k <= j; k++) { sum += a[k]; } if (sum > max) { max = sum; return max;

Flaws in algorithm 1 Observation: We are redundantly re-computing sums. For example, we compute the sum between indexes 2 and 5: a[2] + a[3] + a[4] + a[5] Next we compute the sum between indexes 2 and 6: a[2] + a[3] + a[4] + a[5] + a[6] We already had computed the sum of 2-5, but we compute it again as part of the 2-6 computation. Let's write an improved version that avoids this flaw. index 1 2 3 4 5 6 7 8 value -4 10 15 -2 22 -8

Algorithm 2 code What complexity class is this algorithm? O(N2). Can process tens of thousands of elements per second. public static int maxSum2(int[] a) { int max = 0; for (int i = 0; i < a.length; i++) { int sum = 0; for (int j = i; j < a.length; j++) { sum += a[j]; if (sum > max) { max = sum; } return max; index 1 2 3 4 5 6 7 8 value -4 10 15 -2 22 -8

A clever solution Claim 1 : A max range cannot start with a negative-sum range. Claim 2 : If sum(i, j-1) ≥ 0 and sum(i, j) < 0, any max range that ends at j+1 or higher cannot start at any of i through j. Together, these observations lead to a very clever algorithm... i ... j j+1 k < 0 sum(j+1, k) sum(i, k) < sum(j+1, k) i ... j-1 j j+1 k ≥ 0 < 0 sum(j+1, k) sum(?, k) < sum(j+1, k)

Algorithm 3 code What complexity class is this algorithm? O(N). Handles many millions of elements per second! public static int maxSum3(int[] a) { int max = 0; int sum = 0; int i = 0; for (int j = 0; j < a.length; j++) { if (sum < 0) { // if sum becomes negative, max range i = j; // cannot start with any of i - j-1 sum = 0; // (Claim 2) } sum += a[j]; if (sum > max) { max = sum; return max;

Runtime of first 2 versions

Runtime of 3rd version Version 3: