2. Objectives
Design algorithms using different
algorithms design techniques i.e. Divide
and Conquer, Dynamic Programming,
Greedy Algorithms & Backtracking etc for
different problem areas (sorting, pattern
matching, graphs, compression, encryption
etc.)
Analyse Algorithms (estimate upper &
lower bounds without coding and running
the algorithms) and compare the efficiency
of more than one algorithm for a problem.
Logically think and develop problem
solving skills
Read and understand research papers in
this area
3. What is an Algorithm?
Although there is no universally
agreed-on wording to describe this
notion, there is general agreement
about what the concept means:
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.
5. What is an Algorithm?
The reference to "instructions" in the
definition implies that there is something
or someone capable of understanding and
following the instructions given.
We call this a "computer," keeping in mind
that before the electronic computer was
invented, the word "computer" meant a
human being involved in performing
numeric calculations.
Nowadays, of course, "computers" are
those ubiquitous electronic devices that
have become indispensable in almost
everything we do.
6. illustrate several important points
As examples illustrating the notion of
algorithm, we consider three methods
for solving the same problem (detail
in Lecture 02):
Computing the greatest common
divisor of two integers.
These examples will help us to
illustrate several important points:
The non-ambiguity requirement for
each step of an algorithm cannot be
compromised.
7. illustrate several important points
The range of inputs for which an
algorithm works has to be specified
carefully.
The same algorithm can be
represented in several different ways.
Several algorithms for solving the
same problem may exist.
Algorithms for the same problem can
be based on very different ideas and
can solve the problem with
dramatically different speeds.
8. Process to Solve a Problem
Understand the problem
Formulate a solution / algorithm
Design a program
Implement the program
Execute the code
Measure the performance
See if the solution is ok
9. Sorting Problem
Consider the problem of sorting
numbers.
INPUT: Sequence of n numbers
<a1,a2,a3, ….an>
OUTPUT: Permutation (reordering)
<a1`,a2`,a3`,….an`> of the input
sequence such that
a1`<a2`<a3`<…..<an`
Many algorithms are available.
10. Selection Sort
1. Get a list of unsorted numbers
2. Set a marker for the unsorted section at
the front of the list
3. Repeat steps 4 - 6 until one number
remains in the unsorted section
4. Compare all unsorted numbers in order to
select the smallest one
5. Swap this number with the first number in
the unsorted section
6. Advance the marker to the right one
position
7. Stop
11. Merge Sort
Algorithm
Divide sequence of m elements into two
sequences of m/2 elements
Conquer both sub-sequences using Merge
Sort (recursively)
Combine two sorted sub-sequences using
merge
13. Sorting Problem…..
Sorting Analysis, processor speed 500MHz
Data Size
Selection Sort Merge Sort
10 K 1 0
20 K 4 0
30 K 11 0
50 K 31 0
75 K 72 0
1 Lac 132 0
2 Lac 586 1
1 Million 10
2 Million 21
3 Million 33
5 Million 60
7.5 Million 90
10 Million 136
Execution Time in Seconds
15. Process to Solve a Problem
Understand the problem
Formulate a solution / algorithm
Analyze the algorithm
Design a program
Implement the program
Execute the code
Measure the performance
See if the solution is ok
16. Algorithm Analysis
How to analyze an algorithm?
Predict the resources that the
algorithm requires
Memory
Communications Bandwidth
Logic gates etc
Most important is Computational Time
17. Algorithm Analysis
Important thing before analysis
Model of the machine upon which the
algorithms is executed.
Random Access Machine (RAM)
(Sequential)
Running Time:
No. of primitive operations or “steps
executed”.
18. Algorithm Analysis
How do we write algorithms?
Pseudo Code:
Similar construct / keywords as in a
high level programming languages, e.g.
in C, Pascal etc.
Structured semantics of the high level
languages without caring about the
syntactic errors / grammatical rules
19. Algorithm Analysis
How much time each construct /
keyword of a pseudo code takes to
execute. Assume it takes ti (the ith
construct)
Sum / Add up the execution time of
all the constructs / keywords. if there
are m constructs then
m
i
i
t
T
1
20. Algorithm Analysis
That will be the execution time for a
given input size (say n)
m
i
i
n t
T
1
Running time as the function of the input size
T(n)
21. Algorithm Analysis
What are the constructs / Keywords.
Time for each construct
Total Time
Total time as a function of input size
23. Algorithm Analysis
Sequence Statements: Just add the running time of
the statements
If-Then-Else: if (condition) S1 else S2
Running time of the test plus the larger of the
running times of S1 and S2.
Iteration is at most the running time of the statements
inside the loop, (including tests) times the number
of iterations.
Nested Loops: Analyze these inside out. The total
Running time of a statement inside a group of nested
loops is the running time of the statement multiplied
by the product of the size of all the loops.
Function Calls: Analyzing from inside to out. If
there are function calls, these must be analyzed first.
24. Home Work
Read Mathematics Revision Handouts
available at photocopy shop
Solve Exercises Given at the end
Assignment # 1
Due date Monday (12 September 2022) at
Commencement of Class.