download report

Transcript 4.ADG.algorithms

Describing what you know
• What are they and were do we find them?
• Why show the algorithm?
• What formalisms are used for presenting
• Notes on notation
• Algorithmic performance
Where do we find them
• In computer science and engineering almost
• Every other paper you read will include and
introduce an algorithm in one form or another
(see formalisms later)
• Most of the books you have read include them
in some form or another
What are they?
• “In mathematics and computer science, an algorithm is a
step-by-step procedure for calculations. Algorithms are
used for calculation, data processing, and automated
• Source: http://en.wikipedia.org/wiki/Algorithm
• Mind you…
– The steps are not as important as is the correctness of the
algorithm and to prove that it meets some performance claims.
• In most cases coming up with the algorithm is a lot more
work than actually presenting it
– This is often because: some steps might be unclear;
validation/verification might be missing on incomplete;
usefulness of the algorithm omitted.
Why is an algorithm important?
• It might be better than others
– What is better? uses less memory; uses less CPU
time; It is faster; It improves a previous case; does
it maybe take up less space and requires less
resources; or maybe all the above together??
• It might be explaining a very complex process
• It might be used to show the feasibility of a
result and that a problem is computable
(deterministic as we say) regardless of cost
So what would expect to see in it?
• The steps that make up the algorithm
• The structures used by the algorithm for input, output
and internal representation of data
• Where does it have meaning (the scope) and any
known limitations
• What properties will show that the algorithms is
correct (preconditions, postconditions, loop invariants)
• Demonstration of correctness
• A complexity analysis for time and resources
• Experiments confirming the theoretical result.
What formalisms are used?
• There are certain styles for presenting
algorithms so that they are understandable
and clear
• List style
• Pseudocode
• Prosecode
• Literate code
Formalism – list style
• Algorithm broken down into a sequence of
steps (numbered or named)
• See loops as involving ‘goto’ statements
• Good
– Discuss while presenting
– No restriction to text
• Bad
– Sometimes easy to get lost in the discussion
Formalism - pseudocode
• Algorithm presented in a block-structure
• Each line is numbered
• Good
– Immediately obvious structure
• Bad
– Statements tend to be short (and unclear)
– Not allowed to include many comments
Formalism - prosecode
Number each step
Don’t break a loop over several steps
Use sub-numbering for step parts
Include explanatory text
– Direct and clear explanation of the algorithm
• Bad
– More effective when the algorithm has been
previously discussed
Formalism – Literate code
• Introduce algorithmic detail gradually
• While introducing detail discuss underlying
• The following example is incomplete
• For algorithms mathematical notation is preferable to a
programming notation
• Quick:
Use xi not x[i]
Use × or ∙ not * or x
Avoid specific language constructors (for, variable++, etc)
Nesting can be used by numbering subsections
• Mathematics provide a wealth of symbols that enable
us to describe almost anything we like
–  s  {CSC135}  x, y  {ASSIGNMENTS} with x  y 
• If H(s, x)    H(s,y)    s will learn some LaTeX
• The steps of an algorithm is part of its description
• Environment description is the remainder of the algorithm
– Data structures, input and outputs all should be clearly and
unambiguously defined (think mathematics)
– Other software/hardware, even the operating system
• If you are describing an algorithm for faster read-write operations on
Blue-Ray discs then hardware and operating system aspects are
Specify all variables
Mention assumptions and expectations
Mention possible errors
Say what the algorithms does
• Be consistent
• When comparing an algorithm state criteria used. Possibilities
include (and are not limited to):
– Processing time (or speed)
• Not easy to define due to various factors. Better use a mathematic model for
times based performance evaluation
– Memory and disk requirements
• Various ways of manipulation could affect performance. When describing the
algorithm, be clear on memory usage
– Disk and network traffic
• Seek time & transfer rate are important. Sequential access vs. random access
can make the difference. Caching is also important.
– Applicability
• Be sure you are comparing similar requirements & functionality algorithms.
– Asymptotic analysis: used to compare algorithm performance (big O
notation, another course)
Algorithms end summary
What are they, why should we present them?
What is to be expected
What formalisms can be used