The goal of this lab is to study the efficiency of sorting algorithms experimentally and to compare the results with the theoretical findings of complexity analysis.
In engineering, instrumentation refers to the methods and techniques of measuring and controlling physical systems. Software engineering has its own methods for instrumenting applications and other pieces of software. As was mentioned last week, the two main attributes that software developers measure is time and space (ie, computer memory usage).
The main use of instrumentation in software development is in optimizing software for which we already have a working version (so, this would come logically after design, implementation, and testing in the software development process). Usually software developers are interested in finding parts of the application that would most benefit from optimization. To do this, parts of the program are monitored to keep track of how much time is spent (in a given method, for example), or how much memory is consumed (by a given class or group of classes).
Suppose an application contains a function a
whose
algorithm is found to be slow---suppose its running time graws
quadratically with the size of the input---and another function b
whose algorithm has linear time growth (that is, the time it takes is
merely proportional to the size of the input).
From a theoretical analysis, it may seem like method a
should be subject to closer inspection.
However, after running experiments, a developer might discover that
80% of the application's running is spent in b
(because it is called frequently with large amounts of data)
but only 2% in a
(because it is called rarely, and always
with small amounts of data).
These experimental results suggest that the developer's efforts would
be much better spent improving b
's complexity even a little bit
than improving a
's complexity a lot.
Similarly there are tools that monitor program executions to determine which classes are instantiated most often and in total take up the most memory-- to identify which classes could most use to be streamlined.
In this lab we will measure the number of comparisons that our methods made (as you started doing last week). In a future project you will use a more concrete measure: actual running time in milliseconds.
You have the following tools/pieces at your disposal for use in the experiments assigned below.
arrayUtil
, a library that contains functions
randomArray()
, blankArray()
,
displayArray()
, arrayFromFile()
,
copyArray()
, and isSorted()
.