Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

20
Data Structures & AlgorithmsIT 0501 Algorithm Analysis I

Transcript of Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Page 1: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Data Structures & AlgorithmsIT 0501

Algorithm Analysis I

Page 2: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Problem Solving: Main Steps

1. Problem definition2. Algorithm design / Algorithm

specification3. Algorithm analysis4. Implementation (coding/writing

program)5. Testing6. [Maintenance]

Page 3: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

1. Problem Definition

What is the task to be accomplished?Calculate sum of first n natural numbers

What are the time / space / speed / performance requirements ?

Page 4: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

2. Algorithm Design / Specifications

Algorithm: Finite set of instructions that, if followed, accomplishes a particular task.Describe: in natural language / pseudo-code / flow chart / etc. Criteria to follow:

Input: Zero or more quantities (externally produced)Output: One or more quantities Definiteness: Clarity, precision of each instructionFiniteness: The algorithm has to stop after a finite (may be very large) number of stepsEffectiveness: Each instruction has to be basic enough and feasible

Page 5: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Algorithm for finding sum of first n natural numbers

Sum_natural_nos (n)1. sum =0 2 for i=1 to n do3 sum= sum+i4 endfor5 return sum

Page 6: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

4,5,6: Implementation, Testing, Maintainance

ImplementationDecide on the programming language to use

• C, C++, Lisp, Java, Perl, Prolog, assembly, etc. , etc.

Write clean, well documented code

Test, test, test

Integrate feedback from users, fix bugs, ensure compatibility across different versions Maintenance

Page 7: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

3. Algorithm Analysis

Space complexityHow much space is required

Time complexityHow much time does it take to run the algorithm

Often, we deal with estimates!

Page 8: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Space Complexity

Space complexity = The amount of memory required by an algorithm to run to completion

[Core dumps = the most often encountered cause is “memory leaks” – the amount of memory required larger than the memory available on a given system]

Page 9: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Space Complexity (cont’d)

1. Fixed part: The size required to store certain data/variables, that is independent of the size of the problem:- e.g. name of the data collection

1. Variable part: Space needed by variables, whose size is dependent on the size of the problem:- e.g. actual text - load 2GB of text VS. load 1MB of text

Page 10: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Space Complexity (cont’d)

Find the space needed for the Sum_natural_nos algorithm

Page 11: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Time Complexity

Find time complexity for Sum_natural_nos algorithmOften more important than space complexity

space available (for computer programs!) tends to be larger and largertime is still a problem for all of us

3-4GHz processors on the market still … researchers estimate that the computation of various transformations for 1 single DNA chain for one single protein on 1 TerraHZ computer would take about 1 year to run to completion

Algorithms running time is an important issue

Page 12: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Running time

Input

1 ms

2 ms

3 ms

4 ms

5 ms

A B C D E F G

worst-case

best-case}average-case?

Suppose the program includes an if-then statement that may execute or not: variable running timeTypically algorithms are measured by their worst case

Page 13: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Experimental Approach

Write a program that implements the algorithmRun the program with data sets of varying size.Determine the actual running time using a system call to measure time (e.g. system (date) );

Page 14: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Experimental Approach

It is necessary to implement and test the algorithm in order to determine its running time. Experiments can be done only on a limited set of inputs, and may not be indicative of the running time for other inputs. The same hardware and software should be used in order to compare two algorithms. – condition very hard to achieve!

Page 15: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Use a Theoretical Approach

Based on high-level description of the algorithms, rather than language dependent implementationsMakes possible an evaluation of the algorithms that is independent of the hardware and software environments

Generality

Page 16: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Algorithm DescriptionHow to describe algorithms independent of a programming language Pseudo-Code = a description of an algorithm that is

more structured than usual prose but less formal than a programming language

(Or diagrams)Example: find the maximum element of an array.Algorithm arrayMax(A, n):

Input: An array A storing n integers.Output: The maximum element in A.currentMax A[0]for i 1 to n -1 do

if currentMax < A[i] then currentMax A[i]return currentMax

Page 17: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Pseudo CodeExpressions: use standard mathematical symbols

use for assignment ( ? in C/C++)use = for the equality relationship (? in C/C++)

Method Declarations: -Algorithm name(param1, param2) Programming Constructs:

decision structures: if ... then ... [else ..]while-loops while ... do repeat-loops: repeat ... until ... for-loop: for ... do array indexing: A[i]

Methodscalls: object method(args)returns: return value

Use commentsInstructions have to be basic enough and feasible!

Page 18: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Low Level Algorithm Analysis

Based on primitive operations (low-level computations independent from the programming language)E.g.:

Make an addition = 1 operationCalling a method or returning from a method = 1 operationIndex in an array = 1 operationComparison = 1 operation etc.

Method: Inspect the pseudo-code and count the number of primitive operations executed by the algorithm

Page 19: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

ExampleAlgorithm Linear Search(A[1..n], n, key):

Input: An array A storing n integers.Output: position of the key ( i if found,

otherwise NULL)for i 1 to n doif A[i] == key, then

return iEndifEndfor Return NULL

How many operations ?

Page 20: Data Structures & AlgorithmsIT 0501 Algorithm Analysis I.

Problem

Fibonacci numbersF[0] = 0F[1] = 1F[i] = F[i-1] + F[i-2] for i 2

Pseudo-codeNumber of operations