You are on page 1of 25

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 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

 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

You might also like