SDSU CS 660: Combinatorial Algorithms
Introduction Part B

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

  1. Timing Analysis
    1. Timing in C on Rohan
    2. Handling Measurement Errors1
    3. Estimating Complexity from Timing Results
    4. Mathematical Analysis and Timing Code

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
Cubic or Quadratic[3]?
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
Which is Quadratic?




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%