Chapter 1: Introduction

Download Report

Transcript Chapter 1: Introduction

What is an algorithm?
An algorithm is a sequence of unambiguous instructions
for solving a problem, i.e., for obtaining a required
output for any legitimate input in a finite amount of
time.
problem
algorithm
input
“computer”
output
1
What is an algorithm?
• is any well-defined computational procedure
that takes some value, or set of values, as input
and produces some value, or set of values, as
output.
• is thus a sequence of computational steps that
transform the input into the output.
• is a tool for solving a well - specified
computational problem.
• Any special method of solving a certain kind of
problem (Webster Dictionary)
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
Problem: Find gcd(m,n), the greatest common divisor of two
nonnegative, not both zero integers m and n
Examples: gcd(60,24) = 12, gcd(60,0) = 60, gcd(0,0) = ?
Euclid’s algorithm is based on repeated application of equality
gcd(m,n) = gcd(n, m mod n)
until the second number becomes 0, which makes the problem
trivial.
Example: gcd(60,24) = gcd(24,12) = gcd(12,0) = 12
7
Two descriptions of Euclid’s algorithm
Step 1 If n = 0, return m and stop; otherwise go to Step 2
Step 2 Divide m by n and assign the value fo the remainder to r
Step 3 Assign the value of n to m and the value of r to n. Go to
Step 1.
while n ≠ 0 do
r ← m mod n
m← n
n←r
return m
8
Other methods for computing gcd(m,n)
Consecutive integer checking algorithm
Step 1 Assign the value of min{m,n} to t
Step 2 Divide m by t. If the remainder is 0, go to Step 3;
otherwise, go to Step 4
Step 3 Divide n by t. If the remainder is 0, return t and stop;
otherwise, go to Step 4
Step 4 Decrease t by 1 and go to Step 2
9
Other methods for gcd(m,n) [cont.]
Middle-school procedure
Step 1
Step 2
Step 3
Step 4
Find the prime factorization of m
Find the prime factorization of n
Find all the common prime factors
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

How to analyze algorithm efficiency
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

Brute force

Greedy approach

Divide and conquer

Dynamic programming

Decrease and conquer

Iterative improvement

Transform and conquer

Backtracking

Space and time tradeoffs

Branch and bound
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

Does there exist a better algorithm?
• lower bounds
• optimality
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

string processing: Eg, string matching

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.

Geometric problems: deal with geometric objects such as
points, lines, and polygons.

Numerical problems: involve mathematical objects of
continuous nature:
 solving equations and systems of equations,
 computing definite integrals,
 evaluating functions, and
 ….. so on.
21
Fundamental data structures

list
• array
• linked list
22
Fundamental data structures

stack

queue

priority queue
23
Fundamental data structures

Graph
Adjacency matrix
Adjacency list
24
Fundamental data structures

Tree: is a connected acyclic graph
• Rooted Trees: for every two vertices in a tree, there always exists
exactly one simple path from one of these vertices to the other.

Set and dictionary: an unordered collection (possibly
empty) of distinct items called elements of the set.
• The operations we need to perform for a set often are searching
for a given item, adding a new item, and deleting an item from the
collection.
• A data structure that implements these three operations is called
the dictionary.
25