csce 2100: computing foundations 1 analyzing iterative programs

18
CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs Tamara Schneider Summer 2013

Upload: hannah-peck

Post on 01-Jan-2016

43 views

Category:

Documents


0 download

DESCRIPTION

CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs. Tamara Schneider Summer 2013. Running Time of Simple Statements. Primitive operations in O(1) Arithmetic operations (+, %, *, -, ...) Logical operations (&&, ||, ...) Accessing operations (A[ i ], x->y, ...) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

CSCE 2100: Computing Foundations 1

Analyzing Iterative Programs

Tamara SchneiderSummer 2013

Page 2: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

2

Running Time of Simple Statements

Primitive operations in O(1)– Arithmetic operations (+, %, *, -, ...)– Logical operations (&&, ||, ...)– Accessing operations (A[i], x->y, ...)– Simple assignment – Calls to library functions (scanf, printf, ... )

Page 3: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

3

Simple For-Loops [1]

• Constant time for assignment • Neglect checking for loop condition etc

(constant time)• Loop is executed times

executed times ⇒

for(int i=0; i<n; i++) A[i]=0;

Page 4: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

4

Simple For-Loops [2]

• Neglect checking for loop condition etc. (constant time)

• Inner loop: • The inner loop is executed n times

executed times ⇒ O(n2)

for(int i=0; i<n; i++) for(int j=0; j<n; j++)

A[i][j]=0;

Page 5: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

5

Analyzing if statements

• Evaluation of condition takes a constant number of primitive operations ⇒

• Assume if-part has upper bound

• Assume else-part has upper bound ⇒

• Whether or is larger may depend on the input size

if(<condition>) <then part>else <else part>

Page 6: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

6

If-else exampleif(A[1][1] == 0) for(int i=0; i<n; i++) for(int j=0; j<n; j++)

A[i][j]=0; else for(int i=0; i<n; i++) A[i][i] = 0;

• If-part: 2 nested loops executed times each; loop body is O(n) O(n2) total.

• Else-part: 1 loop executed times; loop body is O(n) total

• Safe upper bound: O(n2)

Page 7: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

7

Inner Loop of Selection Sort

• The loop body takes time O(1)• The loop is executed times– The loop starts at – The loop’s condition becomes false for – The loop increment is 1

• ⇒ O(n-i-1)

for(int j=i+1; j<n; j++) if(A[j] <

A[small]) small = j;

Page 8: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

8

Selection Sort [1]for(int i=0; i<n-1; i++){ small = i; for(int j=i+1; j<n; j++)

if(A[j] < A[small])

small = j; int temp = A[small];

A[small] = A[i]; A[i] = temp;

} //for

How often is this block executed?

𝑛−𝑖−1

Page 9: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

9

Selection Sort [2]

Page 10: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

10

Complex Loops

• Some loops do not specify explicitly how many times the loop body is executed

– while, do-while, some for-loops

• Analyze loop to find upper bound on number of iterations

• May need to prove statement by induction

Page 11: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

11

Complex Loop Example

• The loop is at most executed times• The upper bound on the loop is

n = A.size()i = 0;

while(x != A[i] && i < n) i++;

Page 12: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

12

Programs with Function Calls

• If function call is non-recursive– Analyze function separately– Add cost of function to block

• Function calls are a condition of while- or do-while loop– Add cost of function to block

Page 13: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

13

Example [1]

main(){ int a, n; scanf("%d", &n); a = foo(0,n); printf("%d",

bar(a,n));}

int bar(int x, int n){ for(int i=1; i<=n; i+

+) x += i; return x;

}

int foo(int x, int n){ for(int i=1; i<=n; i++) x += bar(i,n); return x;}

Page 14: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

14

Example [2]

1. Check for recursion(direct or indirect)

main

bar

foo

main(){ int a, n; scanf("%d", &n); a = foo(0,n); printf("%d",

bar(a,n));}

int bar(int x, int n){ for(int i=1; i<=n; i+

+) x += i; return x;

}

int foo(int x, int n){ for(int i=1; i<=n; i++) x += bar(i,n); return x;}

Page 15: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

15

Example [3]

2. Running time of bar

main

bar

foo

O(n)

main(){ int a, n; scanf("%d", &n); a = foo(0,n); printf("%d",

bar(a,n));}

int bar(int x, int n){ for(int i=1; i<=n; i+

+) x += i; return x;

}

int foo(int x, int n){ for(int i=1; i<=n; i++) x += bar(i,n); return x;}

Page 16: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

16

Example [4]

3. Running time of foo

main

bar

foo

O(n)

O(n2)

main(){ int a, n; scanf("%d", &n); a = foo(0,n); printf("%d",

bar(a,n));}

int bar(int x, int n){ for(int i=1; i<=n; i+

+) x += i; return x;

}

int foo(int x, int n){ for(int i=1; i<=n; i++) x += bar(i,n); return x;}

Page 17: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

17

Example [5]

4. Running time of main

main

bar

foo

O(n)

O(n2)O(n2)

main(){ int a, n; scanf("%d", &n); a = foo(0,n); printf("%d",

bar(a,n));}

int bar(int x, int n){ for(int i=1; i<=n; i+

+) x += i; return x;

}

int foo(int x, int n){ for(int i=1; i<=n; i++) x += bar(i,n); return x;}

Page 18: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs

18

Summary

• Primitive operations are considered to have a constant running time.

• Analyzing simple loops makes use of the number of iterations and the cost of the loop body.

• To analyze complex loops the “worst case” may need to be assumed.

• Analyzing conditional statement involves using the “worst case”.

• Non-recursive functions can be analyzed independently.