# 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.