# Completing Algorithms

## Completing Algorithms

Understanding Algorithms

• An algorithm is a finite, well-defined procedure to solve a problem or perform a specific task.
• Algorithms are important in computer science as they define a series of steps for a computer to follow in order to solve a problem or complete a task.
• Algorithms can be expressed in many forms, including natural language, pseudocode, flowcharts, and programming languages.

Completing Algorithms

• Completion of an algorithm involves determining the steps needed to solve a problem, and then implementing those steps in a structured format.
• The first step is problem understanding and decomposition. Analyze the problem and break it down into manageable parts or sub-problems. This technique is known as decomposition.
• Each sub-problem is then solved individually and the solutions are combined to solve the original problem - this is a technique called divided and conquer.

Designing Algorithms

• When designing an algorithm, think about the inputs needed and the outputs expected.
• Also consider any data structures (like arrays or lists) that might be used to hold data, or any variables that might need to be defined.
• One of the most crucial considerations is the logic of the algorithm – the sequence of operations (addition, subtraction, etc.), decision-making (if, else) and repetition (loops) that will ultimately solve the problem.
• Always remember, a well-designed algorithm is efficient and doesn’t take unnecessary steps or process unnecessary data.

Ensuring Algorithms are Correct

• The correctness of an algorithm is extremely important - a correct algorithm accurately solves the problem it’s designed for.
• To ensure an algorithm’s correctness, use techniques such as dry running, which involves tracing through an algorithm step by step to make sure it works as expected.
• Frequently test your algorithms with a variety of inputs (including edge cases) to ensure they produce the correct outputs and handle all scenarios.
• Remember, an incorrect algorithm can cause serious problems, like incorrect results or infinite loops.

Assessing Algorithm Efficiency

• The efficiency of an algorithm refers to the amount of computational resources, namely time and space, it uses.
• Measure an algorithm’s time efficiency by considering its time complexity - how the time to complete the algorithm increases as the size of the input increases.
• Consider space efficiency by determining the algorithm’s space complexity - how much memory is required to run the algorithm.
• Always seek to optimise your algorithms to make them as efficient as possible.