04 Dec 2023

## Blog Post # Algorithm – Definition & Overview

## Introduction

The word “algorithm” denotes a step-by-step procedure or series of rules for solving a specific problem or accomplishing a specific task. Furthermore, Algorithms are essential to computer science and its uses are for various applications, ranging from solving mathematical problems to sorting data and making decisions.

## What are the Characteristics of Algorithm?

Algorithms possess several key characteristics that outline their environment and functionality. These characteristics are central to their design and analysis:

1. Input:

Algorithms yield input from a specified set, consisting of zero or more inputs.

1. Output:

They produce output, which is associated to the input by the defined set of rules and operations.

1. Definiteness:

Algorithms must have clear and explicit instructions. Each step in the algorithm must be broad and understandable.

1. Finiteness:

Algorithms must dismiss after a finite number of steps. They must not drive into an infinite loop or continue indefinitely.

1. Feasibility:

The steps in an algorithm must be feasible to implement, they can be performed using the resources available.

1. Effectiveness:

Algorithms intend to be effective in solving the problem they are considered for. They must produce the precise output for any valid input.

1. Optimality:

In some cases, algorithms endeavor for optimality, targeting to find the best solution on the basis of certain criteria.

## Types of Algorithm:

Algorithms can be categorized into numerous types on the basis of their design, arrangement, and application. Here are certain types of algorithms:

### Search Algorithms:

• Linear Search: Reiterates through each element to find the target value.
• Binary Search: Divides the search space in half continually, appropriate for sorted arrays.

### Sorting Algorithm:

• Bubble Sort: Frequently steps through the list, compares neighboring elements, and swaps them if they are in the incorrect order.
• Merge Sort: Splits the array into two halves, sorts each half, and then merges them back together.

### Divide and Conquer Algorithms:

• Quick Sort: Selects a ‘pivot’ element and contribute the array into smaller segments for sorting.
• Binary Exponentiation: Competently computes rules of a number by breaking the problem into smaller, more manageable parts.

### Dynamic Programming Algorithms:

• Fibonacci Sequence: Calculates Fibonacci numbers using a table to store transitional results and avoid redundant calculations.
• Longest Common Subsequence: Discovers the longest subsequence common to two sequences.

### Graph Algorithms:

• Breadth-First Search (BFS): Scans a graph level by level, proper for finding the shortest path in an unweight graph.
• Depth-First Search (DFS): Explores to the fullest extent along each division before backtracking. Therefore, useful for topological sorting and linked components.

### Randomized Algorithms:

• Quick Select: Finds the bottom element in a scattered list using a randomized segregating strategy.
• Monte Carlo Algorithm: Uses casual sampling to estimate solutions to problems.

### Backtracking Algorithms:

• N-Queens Problem: Discovers all possible locations of N queens on an N×N chessboard without any two queens threatening each other.
• Sudoku Solver: Backtracks through possible solutions for a Sudoku puzzle.

### Machine Learning Algorithms:

• Linear Regression: Forecasts a continuous output on the basis of input features.
• K-Means Clustering: Splits data into groups on the basis of similarity.

These are just a few examples as there are more focused algorithms for specific tasks and domains within computer science and related fields.

## What is Algorithm Complexity?

Algorithm complexity refers to the measurement of the computational resources used by an algorithm as a function of the size of its input. Additionally, there are two principal types of complexity: time complexity & space complexity.

Time Complexity:

• This quantifies the amount of time an algorithm spends to complete regarding the size of the input.
• It is stated using big O notation (O()), which offers an upper bound on the growth rate of the algorithm’s running time.

Space Complexity:

• This measures the quantity of memory an algorithm uses concerning the size of the input.
• Like time complexity, space complexity is stated using big O notation.

## Challenges for Algorithm:

Algorithmic challenges cover a variety of complex problems that require creative and efficient solutions. Moreover, these challenges ascend in various domains such as computer science, mathematics, and artificial intelligence. Some known algorithmic challenges include:

1. NP-Hard Problems: Problems for which discovering a solution is at least tough as authenticating a solution.
2. P vs. NP Problem: The chief open question in computer science concerning the affiliation between problems whose solutions can be verified speedily (NP) and those whose solutions can be found swiftly (P).

## Conclusion:

In conclusion, algorithms serve as the strength of computational processes, ranging from sorting data to solving intricate problems. Their efficacy, stated through time and space complexity, dictates the usefulness of software and system operations.

Furthermore, Algorithmic challenges, spanning NP-hard problems to optimization predicaments, drive innovation in computer science, prompting researchers to develop robust solutions.

Whether in cryptography, machine learning, or distributed systems, algorithms pose a pivotal role in shaping technological landscapes. Additionally, continuous exploration of estimating techniques, online strategies, and complexity theory ensures that algorithms evolve to tackle emerging computational complexities.

Subsequently, enabling developments in diverse fields and solidifying their significance in computer science.