CH 01
CH 01
CH 01
algorithm
1
What is an algorithm?
2
What is a problem?
Definition
• A mapping/relation between a set of input instances
(domain) and an output set (range)
Problem Specification
• Specify what a typical input instance is
• Specify what the output should be in terms of the input
instance
Example: Sorting
• Input: A sequence of N numbers a1…an
• Output: the permutation (reordering) of the input
sequence such that a1 a2 … an .
3
Types of Problems
Search: find X in the input satisfying property Y
Structuring: Transform input X to satisfy property Y
Construction: Build X satisfying Y
Optimization: Find the best X satisfying property Y
Decision: Does X satisfy Y?
4
What do we analyze about algorithms
Correctness
• Does the input/output relation match algorithm requirement?
Amount of work done (aka complexity)
• Basic operations to do task
Amount of space used
• Memory used
5
What do we analyze about algorithms
Simplicity, clarity
• Verification and implementation.
Optimality
• Is it impossible to do better?
6
Euclid’s Algorithm
7
Two descriptions of Euclid’s algorithm
while n ≠ 0 do
r ← m mod n
m← n
n←r
return m
8
Other methods for computing gcd(m,n)
9
Other methods for gcd(m,n) [cont.]
Middle-school procedure
Step 1 Find the prime factorization of m
Step 2 Find the prime factorization of n
Step 3 Find all the common prime factors
Step 4 Compute the product of all the common prime factors
and return it as gcd(m,n)
Is this an algorithm?
10
Sieve of Eratosthenes
Input: Integer n ≥ 2
Output: List of primes less than or equal to n
for p ← 2 to n do A[p] ← p
for p ← 2 to n do
if A[p] 0 //p hasn’t been previously eliminated from the list
j ← p* p
while j ≤ n do
A[j] ← 0 //mark element as eliminated
j←j+p
Example: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
11
Algorithm design and analysis process.
12
Two main issues related to algorithms
How to design algorithms
13
Algorithm design techniques/strategies
An algorithm design technique (or “strategy” or
“paradigm”) is a general approach to solving problems
algorithmically that is applicable to a variety of problems
from different areas of computing.
14
Algorithm design techniques/strategies
15
Algorithm design techniques/strategies
Brute force is a straightforward approach to solving a
problem, usually directly based on the problem statement
and definitions of the concepts involved.
The decrease-and-conquer technique is based on reducing
the size of the input instance.
Divide-and-Conquer
• A problem is divided into several subproblems of the same type,
ideally of about equal size.
• The subproblems are solved separately.
• the solutions to the subproblems are combined to get a solution to
the original problem.
16
Algorithm design techniques/strategies
Transform-and-Conquer: Firstly, the problem instance is
modified to be more Appropriate to solution. Then, in the
second or conquering stage, it is solved.
Dynamic programming is a technique for solving problems
with overlapping subproblems.
The greedy approach suggests constructing a solution
through a sequence of steps until a complete solution to the
problem is reached.
Iterative improvement starts with some feasible solution
and proceeds to improve it by repeated applications of
some simple step.
17
Analysis of algorithms
How good is the algorithm?
• time efficiency
• space efficiency
18
Properties as important as performance
Modularity
Maintainability
Functionality
Robustness and Reliability
User-friendliness
19
Important problem types
Sorting
rearrange the items of a given list in non-decreasing order.
Searching
deals with f inding a given value, called a search key, in a given set
graph problems
graph-traversal algorithms
shortest-path algorithms
20
Important problem types
Combinatorial problems: find a combinatorial object—
such as a permutation, a combination, or a subset—that
satisfies certain constraints.
21
Fundamental data structures
list
• array
• linked list
22
Fundamental data structures
stack
queue
priority queue
23
Fundamental data structures
Graph
25