슬라이드 1 - Pusan

Download Report

Transcript 슬라이드 1 - Pusan

Basic Concepts
2014, Fall
Pusan National University
Ki-Joune Li
PNU
STEM
Data Structures ?

Refrigerator Problem




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
2
PNU
STEM
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
3
PNU
STEM
Two viewpoints and Abstract Data Types

Example: Suppose we have 1,000,000 integer values,
then what the difference between


Array and
Stack ?
We need a clear separation
Interface for each function

ADT
getElement(i)
putElement(i,v)
number()
Implementation

Data Structure +
Algorithm
4
PNU
STEM
Abstract Data Type

Object-Oriented Programming


Object ?
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
5
PNU
STEM
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
6
PNU
STEM
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
7
PNU
STEM
Space Complexity

Notation

Space complexity, f (n) : function of input size n
int sumAB(int a, int b)
{
int sum;
sum=a+b;
return sum;
}
f (n) = c1
c1 : constant


int sumArray(int n, int *a)
{
int sum=0;
for(int i=0;i<n;i++)
sum += a[i];
return sum;
}
f (n) = c2
a[n] ?
int sumArray(int n, int *a)
{
if(n<=0) return 0;
return a[n-1]+sumArrary(n-1,a);
}
f (n) = c3 n
why ?
How should the constants be determined ?
Is it meaningful to count the number of bytes ?
8
PNU
STEM
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;
}
f (n) = 2 + 
int sumArray(int n, int *a)
{
int sum=0;
for(int i=0;i<n;i++)
sum += a[i];
return sum;
}
f (n) = 3 n +1 + 
int sumArray(int n, int *a)
{
if(n<=0) return 0;
return a[n-1]+sumArrary(n-1,a);
}
f (n) = (2+  ) n
Is it really meaningful to determine these constants ?
9
PNU
STEM
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.
10
PNU
STEM
Big-O notation

Definition ( f of n is big-O of g of n)


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);
}
11
PNU
STEM
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.
12
PNU
STEM
Omega-O notation

Definition ( f of n is Omega-O of g of n)


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)
int sumArray(int n, int *a)
{
if(n<=0) return 0;
return a[n-1]+sumArrary(n-1,a);
}

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
13
PNU
STEM
Theta-O notation

Definition ( f of n is theta-O of g of n)


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)
int sumArray(int n, int *a)
{
if(n<=0) return 0;
return a[n-1]+sumArrary(n-1,a);
}

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)
14
PNU
STEM
Complexity Analysis

Worst-Case Analysis


Time complexity for the worst case
Example


Average Analysis





Linear Search : f (n) = n
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 ?
15
PNU
STEM
Example :
Worst-Case Time complexity of Binary Search

Binary Search
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
}



Big-O : O(n2), O(log n)
Omega O : (1), (log n)
Theta O : (log n)
16
PNU
STEM
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

17