Você está na página 1de 46

Analysis of Algorithms

Day 1

Objectives of the course


To introduce the concept of Analysis of Algorithms. To learn the various factors that affect the performance of an algorithm. To learn Code Tuning Techniques. To Analyze well known Algorithms. To introduce Intractable problems.

Copyright 2004, Infosys Technologies Ltd

ER/CORP/CRS/SE15/003 Version No: 2.0

References
1. Weiss M, W. (1993) Data Structures and Algorithm Analysis in C, Benjamin Cummings. 2. McConnell, S. (1993) Code complete, Microsoft Press 3. Alfred V Aho, John E Hopcraft, Jeffrey D Ullman, Design & Analysis of Computer Algorithms, Addison Wesley Publishing Company. 4. Ellis Horowitz, Sartaj Sahni, Sanguthevar, (1998)Fundamentals of Computer Algorithms, Galgotia Publications private limited, New Delhi. 5. Donald E Knuth (1938)The Art of Computer Programming, Fundamental Algorithms, Volume 1, Third Edition, Addison Wesley

Copyright 2004, Infosys Technologies Ltd

ER/CORP/CRS/SE15/003 Version No: 2.0

Course Plan Day 1


Introduction to Analysis of algorithms
What is an Algorithm? Properties of an Algorithm Life cycle of an Algorithm

Code Tuning Techniques SQL Tuning Techniques

Copyright 2004, Infosys Technologies Ltd

ER/CORP/CRS/SE15/003 Version No: 2.0

Course Plan (cont.) Day 2


Analyzing Algorithms
Basic Mathematical principles Order of magnitude Introduction to Asymptotic notations Best case Worst case Average case

Analysis of well known algorithms


Algorithm design techniques ( Brute force, Greedy, Divide & Conquer, Decrease & Conquer) Analysis of some well known algorithms

Copyright 2004, Infosys Technologies Ltd

ER/CORP/CRS/SE15/003 Version No: 2.0

Course plan (cont.) Day 3


Algorithm Design techniques (contd.) (Dynamic Programming) Intractable problems
Deterministic Vs Non-Deterministic machines P Vs NP NP Complete NP Hard

Case Study

Copyright 2004, Infosys Technologies Ltd

ER/CORP/CRS/SE15/003 Version No: 2.0

Plan for Day-1


Introduction to Analysis of algorithms
What is an Algorithm? Properties of an Algorithm Life cycle of an Algorithm

Code Tuning Techniques SQL Tuning Techniques

Copyright 2004, Infosys Technologies Ltd

ER/CORP/CRS/SE15/003 Version No: 2.0

Analysis of Algorithms
Unit 1 - Introduction

Introduction to Analysis of Algorithms


Where does the word algorithm came from? King Algor of Castile ? Algiros + Arithmos meaning Painful + Numbers ? NO The etymology of the word Algorithm dates back to the 8th Century AD. The word Algorithm is derived from the name of the Persian author Abu Jafar Mohammad ibn Musa al Khowarizmi

Muhammad al-Khowarizmi, from a 1983 USSR commemorative stamp scanned by Donald Knuth Reference: ACM Trans - Algorithms

Copyright 2004, Infosys Technologies Ltd

ER/CORP/CRS/SE15/003 Version No: 2.0

What is an Algorithm?
Finite set of instructions to accomplish a task. The properties of an algorithm are as follows:

Finiteness

Effectiveness

Algorithm

Definiteness

Output

Input

Copyright 2004, Infosys Technologies Ltd

10

ER/CORP/CRS/SE15/003 Version No: 2.0

Pseudo Code
An algorithm is independent of any language or machine whereas a program is dependent on a language and machine. To fill the gap between these two, we need pseudo codes. Psuedo-code is a way to represent the step by step methods in finding the solution to the given problem. Example: Algorithm arrayMax (A,n) Input array A of n integers Output maximum element of A CurrentMax A[0] for I = 1 to n-1 do if A[i] > currentMax then currentMax A[i] return currentMax

Copyright 2004, Infosys Technologies Ltd

11

ER/CORP/CRS/SE15/003 Version No: 2.0

Pseudo Code
An Algorithm should be independent of any programming language. Psuedo-code is a way to represent the step by step methods in finding the solution to the given problem. Example:

Algorithm arrayMax (A, n) Input array A of n integers Output maximum element of A currentMax for I A[0]

1 to n-1 do if A [i] > currentMax then currentMax A [i]

return currentMax

Copyright 2004, Infosys Technologies Ltd

12

ER/CORP/CRS/SE15/003 Version No: 2.0

Life Cycle of an Algorithm


Design the Algorithm Write (Implementation of the Algorithm) Test the Algorithm Analyze the Algorithm

Copyright 2004, Infosys Technologies Ltd

13

ER/CORP/CRS/SE15/003 Version No: 2.0

Life Cycle of an Algorithm (Contd)

Copyright 2004, Infosys Technologies Ltd

14

ER/CORP/CRS/SE15/003 Version No: 2.0

Resources available in a computer

Copyright 2004, Infosys Technologies Ltd

15

ER/CORP/CRS/SE15/003 Version No: 2.0

Analysis of Algorithms
An algorithm when implemented, uses the computers primary memory and Central Processing Unit. Analyzing the amount of resources (time &/ space) needed for solving the problem). The Analysis is done at two stages:
Priori Analysis:

Analysis done before implementation.


Posteriori Analysis:

Analysis done after implementation.

Copyright 2004, Infosys Technologies Ltd

16

ER/CORP/CRS/SE15/003 Version No: 2.0

Efficiency Measures
Performance of a solution
Most of the software problems do not have a single best solution. Then how do we judge these solutions? The solutions are chosen based on performance measures.

Performance Measures
Time Quality

Simplicity

Copyright 2004, Infosys Technologies Ltd

17

ER/CORP/CRS/SE15/003 Version No: 2.0

Efficiency Measures (Contd)


Space Time Tradeoff

Example 1: Consider a personnel management product that an organization can purchase and use to maintain information about its employees. If employee details were to be stored in an array, the array would have to be declared large enough to be able to hold the maximum number of records the system was rated to handle. This would always take up a large amount of memory. With a linked list implementation on the other hand, there would be better utilization of memory. Which implementation would provide faster access to an employee with a given employee number? Which implementation would be easier to code? Which implementation would be easier to test?

Copyright 2004, Infosys Technologies Ltd

18

ER/CORP/CRS/SE15/003 Version No: 2.0

Efficiency Measures (Contd )


Example 2: Think of a GUI drop-down list box that displays a list of employees whose names begin with a specified sequence of characters. If the employee database is on a different machine, then there are two options: Option a: fire a SQL and retrieve the relevant employee names each time the list is dropped down. Option b: keep the complete list of employees in memory and refer to it each time the list is dropped down. In your opinion which is the preferred option and why?

Copyright 2004, Infosys Technologies Ltd

19

ER/CORP/CRS/SE15/003 Version No: 2.0

Efficiency Measures (Contd )


Example 3: Which of the following programs is more complicated? Design a computer program which produces an output 1, if the word is of length 3n (n=0,1,2,) and 0, otherwise. example: If the input is aabcef the output is 1 If the input is aabc then the output is 0 Design a computer program that sorts ( in Ascending order ) and outputs the result for any input sequence a1,a2,an of numbers, where n is any natural number. Hint: consider the RAM size required in both the programs

Copyright 2004, Infosys Technologies Ltd

20

ER/CORP/CRS/SE15/003 Version No: 2.0

Summary of Unit-1
What is an Algorithm? Properties of an Algorithm. Life Cycle of an Algorithm Performance Measures

Copyright 2004, Infosys Technologies Ltd

21

ER/CORP/CRS/SE15/003 Version No: 2.0

Analysis of Algorithms
Unit 2 - Code Tuning Techniques

Code Tuning Techniques

Code Tuning refers to modifying the implementation of a specific design rather than modifying the design itself Related to how to code better How to review a given code with performance as a concern

Copyright 2004, Infosys Technologies Ltd

23

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT - Loops
Looping constructs in a program are executed many times. There are quite a few of code tuning techniques which can be applied to looping constructs in order to improve the performance of the code. Jamming of loops: Jamming of loops is an outcome of combining loops which operate over the same range of values.

for (k = 1 to n) { initialize T[k] }; for (m = 1 to n) { Max[m] = m * Max[m] }; for (k = 1 to n) { initialize T[k]; Max[k] = k * Max[k] };
Copyright 2004, Infosys Technologies Ltd 24

Before Jamming, 2n Loop Checks

After Jamming, n Loop Checks

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Loops (Contd)


Unswitching of Loops:

Unswitch loops that contain if tests, if the results of these tests do not change inside the loop
Let 10,000 employees of a company got loan in a bank. At the start of every month, the bank has to deduct the monthly installment of the loan from each employee if salary is credited in their account. for (i=0;i<noofemployees;i++){ If (salary_credited = YES) { if (salary_credited = YES) { for (i=0; i<noofemployees;i++){ ........ ........ ........ ........ } } }}

Move the if condition outside the loop


Copyright 2004, Infosys Technologies Ltd 25 ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Loops (Contd)


Unrolling of Loops:

i = 1; while(i < num) { a( i ) = i; i = i + 1; }

Before unrolling, n loop checks

i = 1; while(i < num) { a( i ) = i; a( i + 1 ) = i + 1; i = i + 2; }

After unrolling, n/2 loop checks

Copyright 2004, Infosys Technologies Ltd

26

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Loops (Contd)


Minimize work performed inside loops:

For (i = 1 to n/2) { Fprimes(i * i); Fprimes(i * i * i); }

n_2 = n/2; For (i = 1 to n_2) { m=i * i; Fprimes(m); Fprimes(m * i); }

Need to compute n/2 in every iteration is removed. Load of the loop is reduced.

Copyright 2004, Infosys Technologies Ltd

27

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Loops (Contd)


Use of Sentinel Values:

In a character string in C language, the \0 is the sentinal

While (i< n) and (x< >a[i]) { i= i+1; }

a[n+1] = x; While (x< >a[i]) { i = i+1; }

One boundary check is reduced, as it is achieved by the sentinel


ER/CORP/CRS/SE15/003 Version No: 2.0

Copyright 2004, Infosys Technologies Ltd

28

CTT Loops (Contd)


Reduce the strength of operations performed inside loops:

All operations which do not depend on loop variant may be moved outside loops and the operations are converted into cheaper ones. for (i = 1 to Num ) { commission ( i ) = i * Revenue * BaseCommission * Discount }

comm = Revenue * BaseCommission * Discount sum = comm for ( i = 1 to Num ) { commission ( i ) = sum sum = sum + comm }
ER/CORP/CRS/SE15/003 Version No: 2.0

Copyright 2004, Infosys Technologies Ltd

29

CTT Logic
Order tests in case statements by frequency:

read (empNo) case Grade(empNo) of 1: {.} 2: {.} 3: {.} . 7: {.} endcase

read (empNo) case Grade(empNo) of 7: { .} 5: {.} 6: {.} . 1: {.} endcase

Every time, the more frequent, Grade 7 is encountered, the code executes faster

Copyright 2004, Infosys Technologies Ltd

30

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Logic (Contd)


Stop testing when you know the result:

if(a < 10 ) and (b < 20) then { . }

if(a < 10) then { if(b < 20) then { . } }

While doing linear search come out as soon as the element is found.

Copyright 2004, Infosys Technologies Ltd

31

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Data Transformations


Minimize array references:

If the same array element is repeatedly referred to inside a loop, then move it outside the loop

for (a=0; a < 5; a++) { for (b =0; b < 10; b++) { total[b] = total[b] * sum[a]; }

for (a=0; a < 5; a++) { sum_now = sum[a]; for (b =0; b < 10; b++) { total[b] = total[b] * sum_now; }

Copyright 2004, Infosys Technologies Ltd

32

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Data Transformations (Contd)


Augment data structures with indexes:

For example we can add an index to the linear linked list data structure. This index helps in speeding up the search operation in a linked list which is other wise strictly linear.

In a character array, the length can be augmented at the start, so that finding the length of the string can be done easily without actually calculating it every time.
If a linked list is having 1000 elements, then searching the list on an average will cost 500 operations. If the same linked list is augmented with another small list of pointers each pointing to every 10th element in the original list, then the number of searches is reduced to an average of 55.
Copyright 2004, Infosys Technologies Ltd 33 ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Expressions
Use constants of the correct type:

float x; x = 5;

Convert 5 to 5.0 store into x

int i; i = 3.14;

Convert 3.14 to 3 store into i

Converting to a desired type is an overhead

Copyright 2004, Infosys Technologies Ltd

34

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Expressions (Contd)


Precompute results:

y = log(x) / log(2) b = log(a) / log(2) instead have LOG2 = log(2) y = log(x) / LOG2 b = log(a) / LOG2

Four Function Calls

Three Function Calls

Copyright 2004, Infosys Technologies Ltd

35

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Expressions (Contd)


Exploit Algebraic Identities: Algebraic identities can be used to replace costlier operations by cheaper ones

< y, we can use the algebraic identity which says x < y only when x < y. So it is enough to check if x < y
in this case.

Whenever we need to find whether x

not (A or B) is cheaper than not A and not B

Copyright 2004, Infosys Technologies Ltd

36

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Expressions (Contd)


Strength Reduction in Expressions: Strength reduction refers to replacing costlier operations by cheaper ones. This can be achieved by:
Replacing multiplication with addition Replacing exponentiation with multiplication

Ax3 + Bx2 + Cx + D is better computed as ((Ax + B)x + C)x + D

Copyright 2004, Infosys Technologies Ltd

37

ER/CORP/CRS/SE15/003 Version No: 2.0

CTT Expressions (Contd)


Be Wary of System Routines: System Routines, like the math routines, provided accuracy which is more often wasted. If we do not need the level of accuracy as provided by the math routines then it makes sense for us to write the piece of code for the same. For example the math routine which computes log(x) provides the result in a floating point number whereas most of the times we might be interested only in the integral part.

Copyright 2004, Infosys Technologies Ltd

38

ER/CORP/CRS/SE15/003 Version No: 2.0

SQL Query Tuning


Concatenation of different data types in SQL queries An SQL query involving concatenation of different data types takes more time to execute. Ex: SELECT * FROM dwtable2 WHERE empno||ename='1234name1234'; Instead, we can re write the above query as: SELECT * FROM dwtable2 WHERE empno=1234 AND ename='name1234';

Copyright 2004, Infosys Technologies Ltd

39

ER/CORP/CRS/SE15/003 Version No: 2.0

SQL Query Tuning (Contd)


Position of table with fewer rows in the selectfrom query It is advisable to put the table that returns the fewest rows at the end of from list. Ex: Assume you have table1 with 10000000 records and table 2 with 1000 records. It is advisable to write the query as follows: Select count(*) from table1, table2 where rownum < 500;

Copyright 2004, Infosys Technologies Ltd

40

ER/CORP/CRS/SE15/003 Version No: 2.0

SQL Query Tuning (Contd)


Usage of Table Aliases If more than one table is used in a query, then it is advisable to use table aliases, as it would enhance the speed of parse phase of the query. Ex: SELECT idno, empno FROM emp1, emp2 WHERE emp1.idno = emp2.empno AND emp2.empno<=100; The same query can be written more efficiently as: SELECT idno,empno FROM emp1 e1, emp2 e2 WHERE e1.idno=e2.empno AND e2.empno<=100;

Copyright 2004, Infosys Technologies Ltd

41

ER/CORP/CRS/SE15/003 Version No: 2.0

SQL Query Tuning (Contd)


Usage of NOT or != operators Unless it is absolutely necessary, one should avoid the usage of NOT or != operator in SQL queries. Reason: Whenever these operators are used, a FTS (Full Table Scan) is done and will degrade the performance of the transactions.

Copyright 2004, Infosys Technologies Ltd

42

ER/CORP/CRS/SE15/003 Version No: 2.0

SQL Query Tuning (Contd)


Usage of Index/Indexes Index enables faster retrieval of data, but is an overhead when insertion, updation and deletion processes are involved.

Copyright 2004, Infosys Technologies Ltd

43

ER/CORP/CRS/SE15/003 Version No: 2.0

Summary of Unit-2
Code Tuning Techniques for Loops Code Tuning Techniques for logic Code Tuning Techniques for Data Transformations Code Tuning Techniques for Expressions SQL Query Tuning

Copyright 2004, Infosys Technologies Ltd

44

ER/CORP/CRS/SE15/003 Version No: 2.0

Summary of Day-1
Introduction to Analysis of algorithms
What is an Algorithm? Properties of an Algorithm Life cycle of an Algorithm

Code Tuning Techniques SQL Tuning Techniques

Copyright 2004, Infosys Technologies Ltd

45

ER/CORP/CRS/SE15/003 Version No: 2.0

Thank You!
Copyright 2004, Infosys Technologies Ltd 46 ER/CORP/CRS/SE15/003 Version No: 2.0

Você também pode gostar