{[ promptMessage ]}

Bookmark it

{[ promptMessage ]}

# 02 - CIS 121 Spring 2010 Data Structures and Introduction...

This preview shows pages 1–5. Sign up to view the full content.

1 1/15/10 CIS121-Lecture Notes 2 1 CIS 121 Spring 2010 Data Structures and Introduction to Algorithms using JAVA Lecture Notes 2: Analysis, models of computation, Big-Oh notation © 1999-2010 S.Kannan, V.Tannen, S.Guha & K.Daniilidis © 2006 M.Goodrich & R.Tamassia (with permission) 1/15/10 CIS121-Lecture Notes 2 2 Recommended Reading Chapter 5 from Weiss

This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document
2 1/15/10 CIS121-Lecture Notes 2 3 Efficiency It is important to write “efficient” programs, but how can we tell that we have achieved this goal? Two main ways to determine efficiency of programs: Empirical (measure time taken by running program) Analytical (analyze the running time theoretically) What are the pros and cons of each approach? 1/15/10 CIS121-Lecture Notes 2 4 Measurement Run a program on an input and time it. We have already seen such measurements for the programs implementing the gcd algorithms. Extremely accurate (if done carefully) Easy to do Not very good predictive value on Other inputs Other machines, compilers, environments Can only be done after the whole program is written.
3 1/15/10 CIS121-Lecture Notes 2 5 Measuring a simple program We measure the time to generate N random numbers and store them in an array. We do this for various N: 1000, 10000, 100000, 1000000, 10000000. We do it once and report the time; we do it 10 times and divide the time by 10; same with 100 times. We do it on two machines, Eniac and David Siegel’s PC. We do it with various Java compilers: 1.3, 1.4, 1.5. We do it in various environments: plain operating system (OS) command line, Dr.Java, and a Java development environment called Eclipse. 1/15/10 CIS121-Lecture Notes 2 6 Various factors impact on measurements 1 trial N=1,000 10,000 100,000 1,000,000 10,000,000 PC, 1.4, Command Line 3 1 14 128 1292 PC, 1.5, Command Line 6 7 36 319 3203 PC, 1.5, DrJava 4 5 78 483 4834 PC, 1.5, Eclipse 3 4 110 456 3311 Eniac, 1.3, Command Line 7 3 31 288 2886 avg over 10 trials N=1,000 10,000 100,000 1,000,000 10,000,000 PC, 1.4, Command Line <1 1 15 132 1297 PC, 1.5, Command Line 1 4 36 369 3194 PC, 1.5, DrJava <1 5 48 478 4828 PC, 1.5, Eclipse <1 3 40 392 3233 Eniac, 1.3, Command Line <1 2 28 298 2910 avg over 100 trials N=1,000 10,000 100,000 1,000,000 10,000,000 PC, 1.4, Command Line <1 1 12 129 1296 PC, 1.5, Command Line <1 3 36 317 3187 PC, 1.5, DrJava <1 4 47 483 4833 PC, 1.5, Eclipse <1 3 38 325 3256 Eniac, 1.3, Command Line <1 2 29 290 kicked out Times are in milliseconds OS :-( machine, compiler, environment

This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document
4 1/15/10 CIS121-Lecture Notes 2 7 Some lessons In general the time depends linearly on N: Time(N) = cN However: The constant c depends on many factors: machine, compiler, etc. This correspondence is more accurate for larger N than smaller N. For smaller N, it’s better to average over multiple trials. Dr.Java adds a lot of overhead, Eclipse just a little. Eniac is slower than David’s PC (assuming 1.3 and 1.4 do similar jobs on this simple program) The 1.5 compiler produces SLOWER code :-( Beware of anomalies (see 110ms) introduced by the OS responding to interruptions unrelated to the program being measured (eg., network events).
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}