csci2100 week5 3 - biohpc.github.io · Growth rates and asymptotic notations An additional...

Post on 08-Jul-2020

4 views 0 download

Transcript of csci2100 week5 3 - biohpc.github.io · Growth rates and asymptotic notations An additional...

Week 5: Singly Linked List and Advanced C++

Tae-Hyuk (Ted) AhnDepartment of Computer Science

Program of Bioinformatics and Computational BiologySaint Louis University

CSCI 2100 Data Structures Fall 2019

2CSCI 2100

Student OutcomesAfter this lecture, students are expected to understand

● Constant time, complexity, and

3CSCI 2100

Constant Time Operations● A constant time operation is an operation that, for a given processor, always operates

in the same amount of time, regardless of input values.

4CSCI 2100

Identifying constant time operations

5CSCI 2100

Growth of functions and complexity

Upper and lower bounds

An algorithm with runtime complexity T(N) has a lower bound and an upper bound.

● Lower bound: A function f(N) that is ≤ the best case T(N), for all values of N ≥ 1.

● Upper bound: A function f(N) that is ≥ the worst case T(N), for all values of N ≥ 1.

6CSCI 2100

Growth of functions and complexity

Upper and lower bounds

● Proving an upper bound means you have proven that the algorithm will use no more than some limit on a resource.

● Proving a lower bound means you have proven that the algorithm will use no less than some limit on a resource.

7CSCI 2100

Upper and lower bounds

8CSCI 2100

Growth rates and asymptotic notations

● An additional simplification can factor out the constant from a bounding function, leaving a function that categorizes the algorithm's growth rate. Ex: Instead of saying that an algorithm's runtime function has an upper bound of 30N2, the algorithm could be described as having a worst case growth rate of N2. Asymptotic notation is the classification of runtime complexity that uses functions that indicate only the growth rate of a bounding function. Three asymptotic notations are commonly used in complexity analysis:

● O notation provides a growth rate for an algorithm's upper bound.● ! notation provides a growth rate for an algorithm's lower bound.

● Θ notation provides a growth rate that is both an upper and lower bound.

9CSCI 2100

Growth rates and asymptotic notations

10CSCI 2100

Growth rates and asymptotic notations

11CSCI 2100

Big O notationBig O notation is a mathematical way of describing how a function (running time of an algorithm) generally behaves in relation to the input size. In Big O notation, all functions that have the same growth rate (as determined by the highest order term of the function) are characterized using the same Big O notation. In essence, all functions that have the same growth rate are considered equivalent in Big O notation.Given a function that describes the running time of an algorithm, the Big O notation for that function can be determined using the following rules:● If f(N) is a sum of several terms, the highest order term (the one with the fastest growth

rate) is kept and others are discarded.● If f(N) has a term that is a product of several factors, all constants (those that are not in

terms of N) are omitted.

12CSCI 2100

Big O notation

13CSCI 2100

Big-Oh as an upper bound● The statement f(n) is O( g(n) ) indicates that g(n) is an upper bound for f(n)

● Which means it is also correct to make statements like:§ 3n+5 is O(n2)§ 3n+5 is O(2n)§ 3n+5 is O(5n + log n - 2)§ But the statement 3n+5 is O(n) is the “tightest” statement one can make

14CSCI 2100 14

Function categories revisited

● The constant function: f(n) = 1

● The linear function: f(n) = n

● The quadratic function: f(n) = n2

● The cubic function: f(n) = n3

● The exponential function: f(n) = 2n

● The logarithm function: f(n) = log n

● The n log n function: f(n) = n log n

15CSCI 2100

Runtime growth rate

16CSCI 2100

Worst-case algorithm analysis

● To analyze how runtime of an algorithm scales as the input size increases, we first determine how many operations the algorithm executes for a specific input size, N. Then, the big-O notation for that function is determined.

● Algorithm runtime analysis often focuses on the worst-case runtime complexity. The worst-case runtime of an algorithm is the runtime complexity for an input that results in the longest execution.

● Other runtime analyses include best-case runtime and average-case runtime. Determining the average-case runtime requires knowledge of the statistical properties of the expected data inputs.

17CSCI 2100

Worst-case algorithm analysis