Algorithm: Working with algorithms
Algorithm: Working with Algorithms
Introduction to Algorithms
- 
    An algorithm is a well-defined sequence of steps or instructions designed to perform a specific task or solve a particular problem. 
- 
    Each step in an algorithm is precise and unambiguous, following a logical order. An algorithm should always produce an output, given a valid set of inputs. 
- 
    Algorithms are widely used in problem-solving scenarios in mathematics, computer science, engineering and more. 
Characteristics of Algorithms
- 
    Definiteness: Every step in an algorithm is clear and unambiguous. 
- 
    Finiteness: The algorithm terminates after a finite time. 
- 
    Input: An algorithm has zero or more well-defined inputs. 
- 
    Output: An algorithm produces one or more outputs. 
- 
    Effectiveness: An algorithm should be simple, generic and practical so that it can deal with all problem instances. 
Designing Algorithms
- 
    Divide and conquer: A problem is divided into smaller sub-problems until they can be solved directly. The solutions to the sub-problems are then combined to give a solution to the original problem. 
- 
    Dynamic programming: This methodology is similar to divide and conquer. However, sub-problem solutions are remembered to avoid multiple calculations of the same sub-problem. 
- 
    Greedy method: This involves building up a solution to the problem by always choosing the next step that offers the most immediate benefit or profit. 
- 
    Backtracking: This approach is used when the problem involves searching a large solution space. It systematically explores all paths in the solution space. 
Algorithm Complexity
- 
    The time complexity of an algorithm quantifies the amount of time taken by the algorithm to run, as a function of the length of the input. It’s usually expressed using Big O notation. 
- 
    The space complexity of an algorithm quantifies the amount of space or memory taken by an algorithm to run, as a function of the length of the input. 
- 
    In general, the goal is to choose or design algorithms with acceptable time and space requirements. 
Pseudocode and Flowcharts
- 
    Pseudocode is a high-level description of an algorithm. It uses the structural conventions of a programming language but is intended for human reading rather than machine reading. 
- 
    A flowchart is a type of diagram that represents an algorithm or process, showing the steps as boxes of various kinds, and their order by connecting these with arrows. 
- 
    Both pseudocode and flowcharts are useful tools for designing, understanding and communicating algorithms.