200 likes | 448 Views
Algorithms. Describing what you know. Contents. What are they and were do we find them? Why show the algorithm? What formalisms are used for presenting algorithms? Notes on notation Algorithmic performance. Where do we find them. I n computer science and engineering almost everywhere.
E N D
Algorithms Describing what you know
Contents • What are they and were do we find them? • Why show the algorithm? • What formalisms are used for presenting algorithms? • Notes on notation • Algorithmic performance
Where do we find them • In computer science and engineering almost everywhere. • 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 reasoning.” • 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 requirements • 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 language • 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 • Good • 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 ideas • The following example is incomplete
Notation • 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
Environment • 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 important • Specify all variables • Mention assumptions and expectations • Mention possible errors • Say what the algorithms does • Be consistent
Performance • 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 • Notation • Environment • Performance