2018, Fall Pusan National University Ki-Joune Li

Slides:



Advertisements
Similar presentations
Algorithms Algorithm: what is it ?. Algorithms Algorithm: what is it ? Some representative problems : - Interval Scheduling.
Advertisements

MATH 224 – Discrete Mathematics
Intro to Analysis of Algorithms. Algorithm “A sequence of unambiguous instructions for solving a problem, i.e., for obtaining a required output for any.
Lecture3: Algorithm Analysis Bohyung Han CSE, POSTECH CSED233: Data Structures (2014F)
Analysys & Complexity of Algorithms Big Oh Notation.
Chapter 1 – Basic Concepts
Fall 2006CENG 7071 Algorithm Analysis. Fall 2006CENG 7072 Algorithmic Performance There are two aspects of algorithmic performance: Time Instructions.
1 Data Structures A program solves a problem. A program solves a problem. A solution consists of: A solution consists of:  a way to organize the data.
Data Structures Performance Analysis.
Computer Science 2 Data Structures and Algorithms V section 2 Intro to “big o” Lists Professor: Evan Korth New York University 1.
Computer Science 2 Data Structures and Algorithms V Intro to “big o” Lists Professor: Evan Korth New York University 1.
Algorithm Analysis (Big O)
COMP s1 Computing 2 Complexity
Algorithm analysis and design Introduction to Algorithms week1
Asymptotic Notations Iterative Algorithms and their analysis
Program Performance & Asymptotic Notations CSE, POSTECH.
Week 2 CS 361: Advanced Data Structures and Algorithms
Basic Concepts 2014, Fall Pusan National University Ki-Joune Li.
Lecture 2 Computational Complexity
Unit III : Introduction To Data Structures and Analysis Of Algorithm 10/8/ Objective : 1.To understand primitive storage structures and types 2.To.
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.
Algorithm Analysis CS 400/600 – Data Structures. Algorithm Analysis2 Abstract Data Types Abstract Data Type (ADT): a definition for a data type solely.
Chapter 5 Algorithms (2) Introduction to CS 1 st Semester, 2015 Sanghyun Park.
RUNNING TIME 10.4 – 10.5 (P. 551 – 555). RUNNING TIME analysis of algorithms involves analyzing their effectiveness analysis of algorithms involves analyzing.
Big-O. Algorithm Analysis Exact analysis: produce a function f(n) measuring how many basic steps are needed for a given inputs n On any input of size.
Algorithm Analysis (Big O)
E.G.M. PetrakisAlgorithm Analysis1  Algorithms that are equally correct can vary in their utilization of computational resources  time and memory  a.
Algorithms Lecture #05 Uzair Ishtiaq. Asymptotic Notation.
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.
1 Chapter 2 Algorithm Analysis Reading: Chapter 2.
Basic Concepts 2011, Fall Pusan National University Ki-Joune Li.
Algorithmic Foundations COMP108 COMP108 Algorithmic Foundations Algorithm efficiency Prudence Wong
Introduction To Algorithm and Data Structures Course Teacher: Moona Kanwal -Algorithm Design -Algorithm Analysis -Data structures -Abstract Data Type.
Mathematical Foundations (Growth Functions) Neelima Gupta Department of Computer Science University of Delhi people.du.ac.in/~ngupta.
2017, Fall Pusan National University Ki-Joune Li
Analysis of Algorithms
Chapter 2 Algorithm Analysis
COMP9024: Data Structures and Algorithms
COP 3503 FALL 2012 Shayan Javed Lecture 15
COMP108 Algorithmic Foundations Algorithm efficiency
Introduction to Algorithms
Introduction Algorithms Order Analysis of Algorithm
What is an Algorithm? Algorithm Specification.
Analysis of Algorithms
DATA STRUCTURES Introduction: Basic Concepts and Notations
Analysis of Algorithms
Algorithm An algorithm is a finite set of steps required to solve a problem. An algorithm must have following properties: Input: An algorithm must have.
Objective of This Course
Analysis of Algorithms
Introduction to Algorithms Analysis
Analysis of Algorithms
Analysis of Algorithms
CS 201 Fundamental Structures of Computer Science
Analysys & Complexity of Algorithms
Programming and Data Structure
DS.A.1 Algorithm Analysis Chapter 2 Overview
Analysis of Algorithms
Programming and Data Structure
PAC Intro to “big o” Lists Professor: Evan Korth New York University
CSE 2010: Algorithms and Data Structures Algorithms
Searching, Sorting, and Asymptotic Complexity
Asst. Dr.Surasak Mungsing
Revision of C++.
Discrete Mathematics 7th edition, 2009
CS210- Lecture 2 Jun 2, 2005 Announcements Questions
Estimating Algorithm Performance
Analysis of Algorithms
Analysis of Algorithms
2019, Fall Pusan National University Ki-Joune Li
Presentation transcript:

2018, Fall Pusan National University Ki-Joune Li Basic Concepts 2018, Fall Pusan National University Ki-Joune Li

Data Structures ? Refrigerator Problem Data Structures If we have only one item in my refrigerator, no problem. If we have several items in a refrigerator, it does matter. Some Organization or Structures Data Structures How to place data in memory

What is good data structure? What is good placement in refrigerator ? Easy to cook (and place) What is good data structure ? Easy (and efficient) to use It depends on what you want to do with the data structures Two different aspects Functions and Internal Implementations

Two viewpoints and Abstract Data Types Example: Suppose we have 1,000,000 integer values, then what the difference between Array and Stack ? ADT We need a clear separation Interface for each function Implementation  Data Structure + Algorithm getElement(i) putElement(i,v) number()

Abstract Data Type Object-Oriented Programming Abstraction (or Encapsulation) Hiding the internal details Implementation Internal mechanism and process Only provide Interfaces Abstract Data Type Hiding the internal structures once it has been implemented Provide only the interface to the users

Algorithms Algorithm A sequence of instructions with specifications of Input Output : at least one output Definiteness : Clear instructions Finiteness Effectiveness Abstract description of a program Can be easily converted to a program

Performance Analysis What is a good algorithm ? Correctness Good documentation and readable code Proper structure Effective How to measure the effectiveness of an algorithm ? Space complexity Amount of memory it needs to run Time complexity Amount of time (mostly CPU time) it needs to run

Space Complexity Notation Space complexity, f (n) : function of input size n How should the constants be determined ? Is it meaningful to count the number of bytes ? int sumAB(int a, int b) { int sum; sum=a+b; return sum; } int sumArray(int n, int *a) { int sum=0; for(int i=0;i<n;i++) sum += a[i]; return sum; } { if(n<=0) return 0; return a[n-1]+sumArrary(n-1,a); f (n) = c1 c1 : constant f (n) = c2 a[n] ? f (n) = c3 n why ?

Is it really meaningful to determine these constants ? Time Complexity Notation Time complexity, f (n) : function of input size n int sumAB(int a, int b) { int sum; sum=a+b; return sum; } int sumArray(int n, int *a) { int sum=0; for(int i=0;i<n;i++) sum += a[i]; return sum; } { if(n<=0) return 0; return a[n-1]+sumArrary(n-1,a); f (n) = 2 +  f (n) = 3 n +1 +  f (n) = (2+  ) n Is it really meaningful to determine these constants ?

Asymptotic Notation Exact time (or step count) to run Depends on machines and implementation (program) NOT good measure More general (but inexact) notation : Asymptotic Notation Big-O O(n) : Upper Bound Omega-O (n) : Lower Bound Theta-O (n) : More precise than Big-O and Omega-O Big-O notation is the most popular one.

Big-O notation Definition ( f of n is big-O of g of n) Example f (n)  O(g (n))  there exist c and n0 (c, n0 >0) such that f (n)  c·g(n), for all n ( n0) Example 3n + 2 = O(n), 3n + 2 = O(n2) Time complexity of the following algorithm f (n)= O(n) int sumArray(int n, int *a) { if(n<=0) return 0; return a[n-1]+sumArrary(n-1,a); }

Big-O notation : Some Properties Classification O(1): constant, O(n): Linear, O(n2): Quadratic, O(2n): exponential Polynomial function If f (n) = amnm + am-1nm-1 + … + a1n + a0, then f (n)  O(nm), where ai > 0 Big-O is determined by the highest order Only the term of the highest order is of our concern Big-O : useful for determining the upper bound of time complexity When only an upper bound is known, Big-O notation is useful In most cases, not easy to find the exact f (n) Big-O notation is the most used.

Omega-O notation Definition ( f of n is Omega-O of g of n) Example f (n)  (g (n))  there exist c and n0 (c, n0 >0) such that f (n)  c·g(n), for all n ( n0) Example 3n + 2 = (n), 3n + 2 = (1), 3n2 + 2 = (n), Time complexity of the following algorithm f (n)= (n) If f (n) = amnm + am-1nm-1+…+ a1n+a0, then f (n)  (nm) Omega-O is determined by the highest order Omega-O notation : useful to describe the lower bound int sumArray(int n, int *a) { if(n<=0) return 0; return a[n-1]+sumArrary(n-1,a); }

Theta-O notation Definition ( f of n is theta-O of g of n) Example f (n)  (g (n))  there exist c1, c2 and n0 (c1, c2, and n0 >0) such that c1·g(n)  f (n)  c2·g(n), for all n ( n0) Example 3n + 2 = (n), 3n + 2  (1), 3n2 + 2  (n), Time complexity of the following algorithm f (n)= (n) If f (n) = amnm + am-1nm-1+…+ a1n+a0, then f (n)  (nm) Theta-O is determined by the highest order Theta-O Possible Only if f (n)=(g(n)), and f(n)=(g(n)) Lower bound and Upper bound is the same very exact but not easy to find such a g(n) int sumArray(int n, int *a) { if(n<=0) return 0; return a[n-1]+sumArrary(n-1,a); }

Complexity Analysis Worst-Case Analysis Average Analysis Time complexity for the worst case Example Linear Search : f (n) = n Average Analysis Average time complexity f (n) = p1f1(n) + p2f2(n) + … pkfk(n), where pi is the probability for the i -th case. Not easy to find pi In most cases, only worst-case analysis Why not Best-Case Analysis ?

Example : Worst-Case Time complexity of Binary Search Big-O : O(n2), O(log n) Omega O : (1), (log n) Theta O : (log n) int BinarySearch(int v, int *a, int lower, int upper) // search m among a sorted array a[1ower], a[lower+1], … a[upper] { if(l<=u) { int m=(lower+upper)/2; if(v>a[m]), return BinarySearch(v,a,m+1,upper); else if(v<a[m]) return BinarySearch(v,a,lower,m-1); else /* v==a[m] */ return m; } return -1; // not found

Comparison : O(1), O(log n), O(n), O(n2), O(2n) Graph In general Algorithm of O(1) is almost impossible Algorithms of O(log n) is excellent Algorithms of O(n) is very good Algorithms of O(n2 ) is not bad Algorithms of O(n3 ) is acceptable Algorithms of O(2n ) is not useful