Algorithm Development II

advertisement
CEG 221
Lesson 5: Algorithm Development II
Mr. David Lippa
Overview
• Algorithm Development II
– Review of basic algorithm development
– Advanced algorithm development
• Optimization of algorithm
• Optimization of code
• Questions
What is an Algorithm?
• An algorithm is a high-level set of clear,
step-by-step actions taken in order to
solve a problem, frequently expressed in
English or pseudo code.
• Examples of Algorithms:
– Computing the remaining angles and side in
an SAS Triangle
– Computing an integral using rectangle
approximation method (RAM) or the
Trapezoidal Rule
Example: Triangulation with SAS
A
b = 100
B
a = 60
42°
C
• If we return to the
SAS triangle, there’s
nothing really much to
be done to improve
speed or efficiency, as
the computation is
very straightforward.
Example: Trapezoidal Rule
If the interval here is [0, 1], then we
need to compute: SUM = ( f(0) +
f(0.25) + f(0.25) + f(0.5) + f(0.5) +
f(0.75) + f(0.75) + f(1.0) ). Then,
AREA = 0.5 * SUM.
4 trapezoids  9 computations of f
8 trapezoids  15 computations of f
1024 trapezoids  2047 computations
Notice a pattern?
• You notice that we
compute f(x) more times
than is necessary for all
the inner values
• Let’s compute SUM2 = 2
* ( f(0) + f(0.25) + f(0.5) +
f(0.75) + f(1.0) ) – f(0) –
f(1.0).
• AREA2 = 0.5 * SUM2
•
•
•
4 trapezoids  8 computations of f
8 trapezoids  12 computations of f
1024 trapezoids  1028 computations
Trapezoidal Rule Improvements
• For a small number of trapezoids, this method is
slightly more work.
• For, say 1024 trapezoids, this is significantly
more efficient in terms of number of
mathematical calculations.
• CONCLUSION: Given that greater accuracy
comes with more trapezoids, this optimization is
sufficient, since this algorithm will rarely be used
with few trapezoids.
Optimizing Implemented Code
• There are other ways to speed up code
– Sacrifice memory for improved speed (ie.
Always try to work from memory, not from
disk)
– Avoid algorithms where the ratio of work
required to number of elements processed is
n, namely an n2 algorithm.
– Pass by reference or pointer where
appropriate to prevent unnecessary memory
copies of large structures
– Use algorithm analysis to try to find the cause
of the lack of speed
Algorithm Analysis
• Big-Oh notation – how much work is
required to process n inputs in terms of n
– Constants are less important for Big-Oh
notation
– O(1), O(log2 n), O(n), O(n log2 n), O(n2),
O(n3), O(2n), O(n!)
– Associate algorithms with each
• Matrix, Integration, SAS, factorial
• Formal definition
Using Algorithm Analysis
• Analyze an algorithm by computing the
number of operations performed per unit
input
• Avoid O(n2) or worse algorithms
• Convert code to pseudo code if needed, to
do a theoretical analysis
Algorithm Analysis: Example
• Matrix Multiplication
– Pseudo code – To multiply an m x n matrix [A] and an
n x p matrix [B], dot product each row of [A] with each
column of [B].
• Results in m * p dot products (see previous notes for pseudo
code details)
• Dot product
– Pseudo code – to dot product two vectors, multiply
the first element of each, the second, the third, and so
on and add them all together
• Results in n multiplication and addition operations (see
previous notes for pseudo code details)
• RESULT: Matrix multiplication is an O(m * n * p)
operation. With square matrices, it is O(n3)
Next Time
•
•
•
•
Building Libraries
Using Libraries
Tradeoffs
Questions
Questions?
Download