# Algorithm: Awareness of their uses and practical limitations

# Algorithm: Awareness of their uses and practical limitations

## Basic Concept

- An
**algorithm**is a well-defined sequence of instructions, aiming to solve a specific problem or perform a certain task. - It typically involves a
**set of rules**that precisely define a sequence of operations, and includes conditions, calculations, and looping constructs.

## Uses of Algorithms

- Algorithms are used to organize and
**process information**, to perform computations and data manipulation. - They are core components in areas like computer programming, machine learning, data analysis, artificial intelligence, and more. They provide the ‘logic’ for computers and other automated systems.
- Common types of algorithms include
**sorting algorithms**(e.g. insertion sort, bubble sort, quick sort),**search algorithms**(e.g. linear search, binary search), and**graph algorithms**(e.g. shortest path algorithm, minimum spanning tree algorithm).

## Practical Limitations of Algorithms

- Time Complexity: This represents the
**amount of time**an algorithm takes to run, as a function of the size of the input to the program. The less time an algorithm takes to run, the better. - Space Complexity: This is about the
**amount of space or memory**an algorithm takes to run. The less space an algorithm uses, the more efficient it is. - Implementation Difficulty: Some algorithms can be quite complex to implement, potentially leading to errors.
- Inefficiencies: Poorly designed algorithms can lead to unnecessary computations, slowing down the overall performance.
- Problem-specific: Some algorithms may only be suitable for specific types of problems; not all algorithms are universally applicable.

## Choosing the Right Algorithm

- A good algorithm should be
**correct, efficient, maintainable and easy to read**. - Selecting the best algorithm depends on the
**specific requirements**of the task at hand, including the nature of the input, the desired output, and the constraints of the problem. **Trading-off**between time and space complexity is a common situation since improving one often deteriorates the other, depending on the task.

## Understanding through an Example

- For instance, a linear search algorithm has a simple implementation and works well for a small list of elements.
**However**, if the list becomes significantly large, this algorithm becomes inefficient due to its high time complexity. In such a case, a binary search algorithm, which has a lower time complexity, would be a better choice. Yet, it’s important to note that a binary search requires the list to be sorted first, which might involve additional computational steps.