csce 2100: computing foundations 1 analyzing iterative programs
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 PresentationTRANSCRIPT
![Page 1: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/1.jpg)
CSCE 2100: Computing Foundations 1
Analyzing Iterative Programs
Tamara SchneiderSummer 2013
![Page 2: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/2.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/3.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/4.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/5.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/6.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/7.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/8.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/9.jpg)
9
Selection Sort [2]
![Page 10: CSCE 2100: Computing Foundations 1 Analyzing Iterative Programs](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/10.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/11.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/12.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/13.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/14.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/15.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/16.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/17.jpg)
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](https://reader036.vdocument.in/reader036/viewer/2022062517/568132cb550346895d998bfc/html5/thumbnails/18.jpg)
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.