CS 660: Combinatorial Algorithms Introduction Part B

[To Lecture Notes Index]
San Diego State University -- This page last updated Septemper 3, 1995

Timing Analysis

Timing in C on Rohan

main()
{
int k, iterations;
for (iterations = 0; iterations < 50; iterations++)
{
start();
/* start the timer */
for (k = 0; k < 2000000; k++)
/* do some work */
k = k;
stop();
/* stop the timer */
printf("Time taken: %ld\n", report());
};
}
Result on Rohan
```Time	Frequency Occurred
30	2
31	2
32	9
33	10
34	11
35	9
36	5
37	1
39	1
```
Source for Timing C Code on Rohan

#include <stdio.h>
#include <sys/times.h>
#include <limits.h>

static struct tms _start; /* Stores the starting time*/
static struct tms _stop; /* Stores the ending time*/

int start()
{
times(&_start);
}

int stop()
{
times(&_stop);
}

unsigned long report()
{
return _stop.tms_utime - _start.tms_utime;
}

main()
{
int k, iterations;
for (iterations = 0; iterations < 50; iterations++)
{
start();
/* start the timer */
for (k = 0; k < 2000000; k++)
/* do some work */
k = k;
stop();
/* stop the timer */
printf("Time taken: %ld\n", report());
};
}

Handling Measurement Errors[1]

Repeat a measurement n times
Let the measurements be labeled

Let and

The confidence interval for the true measurement is[2]:

The value of t determine the probability the measurement is in the interval

When n >= 50
```Probability	50%	80%	90%	95%	99%
value of t	0.67	1.28	1.64	1.96	2.58
```
In Example

, s = 3.15, selecting t = 1.96 we get

95% confidence interval is (32.83, 34.57)
Student t table - When n < 50
```	n	90%	95%	99%
1	3.078	6.314	31.821
2	1.886	2.920	6.965
3	1.638	2.353	4.541
4	1.533	2.132	3.747
5	1.476	2.015	3.365

6	1.440	1.943	3.143
7	1.415	1.895	2.998
8	1.397	1.860	2.896
9	1.383	1.833	2.821
10	1.372	1.812	2.764

20	1.325	1.725	2.528
30	1.310	1.697	2.457
40	1.303	1.684	2.423

```

Estimating Complexity from Timing Results

Fun with Functions

Let f(n) = 3n*n + 4n + 5 and g(n) = 3n*n

Fact: g(n) is an approximation of f(n)

Notation: f(n) = g(n) +

```	n	f(n)	g(n)	% error
1	12	3	75.00%
10	345	300	13.04%
20	1285	1200	6.61%
30	2825	2700	4.42%
40	4965	4800	3.32%
50	7705	7500	2.66%
60	11045	10800	2.22%
70	14985	14700	1.90%
80	19525	19200	1.66%
90	24665	24300	1.48%
100	30405	30000	1.33%
200	120805	120000	0.67%
300	271205	270000	0.44%
```
Eyeballing Complexity

Let then
Timing Results
```	N	Bubble	Insertion
100	1	1
200	5	3
400	19	11
800	79	42
1600	317	166

```
Plotting Complexity
Plotting ComplexityEngineers Method (Modified)

Let then

Let b = 2 and then

Plotting ComplexityTransform the Axis

Let and (or ) then:

g(J) = f( ) = a( )k = aJ

So g(J) is linear!
Example
```	n	f(n) =5n*n+n + 3	J=n*n
1	9	1
10	513	100
20	2023	400
30	4533	900
40	8043	1600
50	12553	2500
60	18063	3600
```

Mathematical Analysis and Timing Code

Bubble sort worst case is ( n*n )

Complexity is an*n + bn + c

Timing Results Worst Case
```	N	Bubble Sort
400	20
500	31
600	45
700	61
800	79

```
Least Squares fit of data to an*n + bn + c

Bubble sort worst case is 0.0001143n*n + 0.01084n - 2.738

Predicted vs. Actual Time for Bubble Sort
```	N	Actual	Predicted	% Error
900	105	99.601	5.14%
1000	124	122.402	1.29%
1100	149	147.489	1.01%
2000	496	476.142	4.00%
2400	713	681.646	4.40%
```