# Definition of an algorithm

### Definition of an Algorithm

• An algorithm can be defined as a well-defined, self-contained series of steps or instructions for resolving a specific problem or achieving a particular goal.
• Step-by-step, unambiguous commands characterise an algorithm. Each step must be rigorously defined and clear, with no ambiguity.
• An algorithm’s finiteness is a critical component. It states that after a finite number of steps, an algorithm must halt.
• It’s crucial that an algorithm be effective. This implies that every instruction should be simple enough that it can be carried out, in principle, by a person using only pencil and paper. It should not require any inherent “cleverness.”
• The algorithm requires being generally applicable, meaning it can handle all cases relevant to the problem at hand. Even under different scenarios, it should give correct outcomes.

### Properties of Algorithms

• Determinism: For the same input, an algorithm will always produce the same output. This predictability is crucial for the algorithm’s reliability.
• Definiteness: Each step in an algorithm must be precisely defined; there can be no vagueness or ambiguity in an algorithm.
• Input and output: An algorithm should have specified inputs and produce specified outputs related to those inputs.
• Finiteness: An algorithm should always terminate following a finite number of steps.
• Generality: The algorithm must be able to solve all instances of the problem it is meant to address.

### Functions of an Algorithm

• Solvability: An algorithm must solve the problem for which it was created. While an algorithm may not solve every problem, it should solve a well-defined class of problems.
• Efficiency: An algorithm must execute its task as efficiently as possible, using the least amount of computing resources like time and memory.
• Maintainability: A well-crafted algorithm is easy to maintain and modify, making it adaptable to changing needs or systems.
• Readability: A well-designed algorithm is simple to understand, facilitating developers in maintaining and modifying it, and making it easier for others to learn and use.

### Writing and Testing Algorithms

• When writing an algorithm, be sure to keep the objective clear, eliminate redundancies, consider edge cases, and anticipate potential issues.
• To verify an algorithm, consider both its efficiency and correctness. Test it with various inputs, including typical cases, boundary cases, and invalid inputs.
• When considering the efficiency of an algorithm, consider both time and space complexity. These considerations will inform decisions about when and where certain algorithms are suitable.
• Keep in mind that a simpler, less efficient algorithm may be more suitable for smaller inputs or less critical tasks, while a more complex, efficient algorithm may be necessary for larger inputs or more demanding tasks.