Fundamentals of algorithms
What is an Algorithm?
Before we start talking about algorithms, we should try to figure out what an algorithm actually is. We could, for example, have a short look at how others define an algorithm:
Several definitions found in the WWW:
Browsing the web, we can find quite a number definitions of the term "algorithm". Here's a small collection of them.
Definition 1:
"An algorithm is a computable set of steps to achieve a desired result."  (found on numerous websites)
Definition 2:
An algorithm is a set of rules that specify the order and kind of arithmetic operations that are used on specified set of data.
Definition 3:
An algorithm is a sequence of finite number of steps arranged in a specific logical order which, when executed, will produce a correct solution for a specific problem.  (taken from an undergraduate course at UMBC).
Definition 4:
An algorithm is a set of instructions for solving a problem. When the instructions are followed, it must eventually stop with an answer.  (given by Prof. Carol Wolf in a course on algorithms).
Definition 5:
An algorithm is a finite, definite, effective procedure, with some output.  (given by Donald Knuth)
Essential properties of an algorithm
Though the given definitions differ slightly, we can clearly extract the essential properties an algorithm should have:

* an algorithm is finite (w.r.t.: set of instructions, use of resources, time of computation)
 * instructions are precise and computable.
 * instructions have a specified logical order, however, we can discriminate between
   deterministic algorithms (every step has a welldefined successor), and
   nondeterministic algorithms (randomized algorithms, but also parallel algorithms!) * produce a result.
Basic questions about algorithms:
For each algorithm, especially a new one, we should ask the following basic questions:
 * does it terminate?
* is it correct?
* is the result of the algorithm determined?
* how much memory will it use?
3.1 Fundamentals of algorithms
 3.1.1 Representing algorithms
 3.1.2 Efficiency of algorithms
 3.1.3 Searching algorithms
 3.1.4 Sorting algorithms
3.2 Programming
 3.2.1 Data types
 3.2.2 Programming concepts
 3.2.3 Arithmetic operations in a programming language
 3.2.4 Relational operations in a programming language
 3.2.5 Boolean operations in a programming language
 3.2.6 Data structures
 3.2.7 Input/output and file handling
 3.2.8 String handling operations in a programming language
 3.2.9 Random number generation in a programming language
 3.2.10 Subroutines (procedures and functions)
 3.2.11 Structured programming
 3.2.12 Robust and secure programming
 3.2.13 Classification of programming languages
3.3 Fundamentals of data representation
 3.3.1 Number bases
 3.3.2 Converting between number bases
 3.3.3 Units of information
 3.3.4 Binary arithmetic
 3.3.5 Character encoding
 3.3.6 Representing images
 3.3.7 Representing sound
 3.3.8 Data compression
3.4 Computer systems
 3.4.1 Hardware and software
 3.4.1 Operating systems
 3.4.2 Boolean logic
 3.4.3 Software classification
 3.4.4 Systems architecture
3.5 Fundamentals of computer networks
3.6 Fundamentals of cyber security
3.7 Ethical, legal and environmental impacts of digital technology on wider society, including issues of privacy
 3.7.1 Ethical impacts of digital technology on wider society
 3.7.2 Legal impacts of digital technology on wider society
 3.7.3 Environmental impacts of digital technology on wider society
 3.7.4 Issues of privacy