# What is an Algorithm

## Introduction

Before commencing with the coding process, individuals typically begin by drafting the framework, structure, and fundamental logic of the code in a clear and understandable form in the English language. This arrangement is straightforward and is used to interpret and contains a few code features, enabling individuals without a programming background to quickly understand it with ease. This layout or structure is generally referred to as an "Algorithm." An algorithm is an essential and fundamental principle in the fields of computer science and mathematics. Let us now take a more in-depth look at the concept of an algorithm.

## Algorithm

A set of a precise set of instructions or regulations that direct the accurate solution of a problem or the accomplishment of a specific task is known as an algorithm. Similar to a recipe or a series of directives, it offers a structured and clearly defined approach to solving difficulties. Algorithms are used not only in computer science but also in various aspects of our everyday lives. Algorithms become significantly more effective when viewed in the context of computer science. Computers are essentially machines that execute commands, and algorithms provide those commands in an orderly and rational manner. They assist computers in performing computations, making decisions, and dealing with complex issues efficiently.

### Day-to-Day Examples of Algorithm:

The word Algorithm seems to be a slightly stricter word, but knowingly or unknowingly, it is part of human life. We see many algorithms in day-to-day life activities. Here are some examples of where we use algorithms in our daily lifestyle.

•  Recipe can be considered as a systematic approach to making a particular cuisine. It presents an exact series of directions, enlisting the necessary ingredients, the sequence in which they must be added, and the required methodologies to be employed. Each step in the recipe is comparable to an instruction in a computer program, guiding you through the process of transforming raw ingredients into a delicious meal. By following the prescribed method, you can consistently duplicate the desired outcome, similar to a machine executing a well-defined sequence of instructions.
• Instructions for locating a specific place: Imagine yourself in an unfamiliar city and in search of a particular destination. In such a scenario, you would require instructions to help you find your way, which could be provided through a map or a GPS application. These instructions would lead you through each step of the journey, directing you on which turns to take, which streets to follow, and which landmarks to seek out. Essentially, this set of instructions functions as an algorithm, offering a straightforward route to reach your destination. By adhering to the instructions attentively, you improve your chances of arriving at the intended or desired location efficiently and without being lost.
• Furniture assembly guidelines: Upon buying furniture, it is common to receive a set of guidelines for assembly, basically a user manual. These guidelines present a series of steps to follow in order to put the furniture together. Each step directs you to connect designated parts, utilize specific tools, and adhere to a particular sequence. By adhering to the furniture assembly guidelines, you can effectively construct the furniture item. The guidelines serve as a systematic and straightforward procedure, leading you through the process of converting separate components into a practical piece of furniture.
• Everyday schedule: Our everyday schedules may be viewed as step-by-step procedures that guide us through our daily activities. Starting from waking up in the morning to preparing for work or school, we frequently adhere to a predetermined sequence of tasks. For instance, washing our teeth, taking a bath, eating breakfast, and packing are all components of our daily procedure. By adhering to this routine, we establish a methodical approach to our day and guarantee that we accomplish crucial responsibilities proficiently.
• Algorithmic process of online shopping: The process of buying products online involves following a set of steps that can be interpreted as an algorithm. The algorithmic process consists of exploring products, picking the ones we want, placing them in the cart, filling in shipping details, selecting a payment mode, and finally verifying the order. Each step taken during the online shopping process represents a definite action that takes us nearer to the ultimate goal of a successful purchase. The Algorithm that governs online shopping guarantees a hassle-free and methodical experience for both the purchaser and the vendor.

These common place instances emphasize how algorithms offer organization and direction in diverse scenarios, whether in the culinary realm, on the streets, or while engaging in virtual exchanges.

### Origin of Algorithm:

The term "algorithm" originates from the moniker of the Persian astronomer and mathematician, Al-Khwarizmi, who existed in the ninth century. Al-Khwarizmi's investigations into arithmetic and algebra established the basis for the creation of algorithms, which are now an intrinsic element of computer science, shaping the design and progress of computer programs. Fundamentally, an algorithm comprises a meticulous and precise set of directives that are implemented in a specific sequence to resolve a problem. These directives could encompass mathematical computations, logical functions, conditional statements, repetitions, or a blend of these aspects. The primary objective of an algorithm is to offer a dependable and efficient solution to a problem, regardless of the input's size or intricacy.

## Characteristics of an Algorithm

An algorithm has five significant characteristics that every Algorithm resembles. They are:

• Input and Output
• Finiteness
• Definiteness
• Deterministic
• Effectiveness and Efficiency

Input and Output: Algorithms take input, which can be data or parameters, and produce output, which can be a solution, result, or transformed data. The input specifies the initial conditions or data on which the Algorithm operates, while the output represents the desired outcome or the transformed result after the Algorithm's execution.

Finiteness: Algorithms must have a definite end point. They should terminate after a finite number of steps, ensuring that the solution or result is reached within a reasonable time frame. This feature prevents algorithms from running indefinitely, making them practical and valuable.

Definiteness: An algorithm should contain a precisely defined set of instructions or steps that are unambiguous, clear, and free from any vagueness or confusion. Each step should outline a specific sequence of actions that must be taken to achieve the desired outcome.

Deterministic: Algorithms should be deterministic, meaning that, given the same input and initial conditions, they will produce the same output every time they are executed. The steps and operations within an algorithm should be fully defined and deterministic to ensure that the Algorithm behaves predictably and consistently.

Effectiveness and Efficiency: Algorithms are designed to solve problems efficiently and effectively. Effectiveness refers to the Algorithm's ability to produce the correct and desired output for any valid input. Efficiency relates to the optimal use of resources, such as time, memory, or computational power, to achieve the solution. An efficient algorithm aims to minimize the required resources and execution time while maintaining effectiveness.

By following these characteristics, algorithms can be reliable, usable, and appropriate for solving problems in various domains. They provide precise and systematic instructions that guide the problem-solving process and enable efficient computation.

## Note:

The below paragraph explains some of the most valuable concepts that must be kept in mind while constructing an algorithm.

• The accuracy of an algorithm is a significant attribute that must be considered.
• It is crucial that algorithms are presented in a way that eliminates any confusion or misinterpretation.
• Each step in the Algorithm should be precisely defined and easily understood.
• Furthermore, algorithms must be executable, meaning that they can be executed by a computer or a person following the instructions.
• The steps should be practical and possible to implement.
• Efficiency is another critical component of algorithms.
• While there may be multiple algorithms to solve the same problem, they may differ in terms of their efficiency.

### Efficiency of an Algorithm

An efficient algorithm completes the desired task in the shortest amount of time and with the fewest resources possible. Efficiency can be evaluated in various ways, such as the number of operations performed, the amount of memory used, or the time it takes to complete the Algorithm.

Algorithms have a wide range of applications in various fields. In computer science, algorithms play a crucial role in data structures, searching, sorting, graph theory, cryptography, and many other areas. They are also extensively used in artificial intelligence and machine learning, where complex algorithms enable computers to learn from data, make predictions, and perform tasks that would otherwise be challenging for traditional programming approaches.

## Types of Algorithms

In order to know more about and enhance the understanding of algorithms, it is crucial to investigate various classifications or types of algorithms and their distinct characteristics.

• Thorough algorithms scrutinize all potential solutions, methodically appraising each one to identify the best solution.
• Partition algorithms fragment a problem into smaller components for more straightforward handling.
• Advanced programming algorithms dismantle a problem into intersecting subproblems, resolving each subproblem only once.
• Avaricious algorithms make regionally optimal selections at every step, aspiring to attain the ultimate global outcome.

Note: Each type employs particular techniques and approaches, enabling programmers to tackle problem-solving from diverse perspectives and optimize solutions based on the problem's features.

## What is the process of algorithms?

Algorithms can be conveyed through various means, such as natural languages, programming languages, pseudocode, flowcharts, and control tables. While natural language expressions are not common due to their ambiguity, programming languages are frequently utilized for articulating algorithms that are executed by a computer. Algorithms operate by utilizing an initial input and a set of instructions. The input constitutes the preliminary information required to make decisions and can be represented in the form of numbers or words. These inputs are then subjected to a series of instructions or computations that may include arithmetic and decision-making processes. The final step in an algorithm is the output, which typically contains additional data.

As an instance, a search formula accepts a search term as input and processes it through a sequence of commands to explore a repository for pertinent items to the search term. Automation application is another illustration of formulas, as automation adheres to a set of principles to execute tasks. Numerous formulas constitute automation applications, and they all function to mechanize a specific procedure.

## What are the various kinds of algorithms?

There are numerous sorts of algorithms, and each is intended to accomplish a distinct objective. For instance, algorithms conduct the following operations:

1. Search algorithm: Search algorithm uses search keywords which are part of searching terms. It also uses operators and explores various databases for acquiring the most relevant and appropriate results out of this algorithm.
2. Encryption algorithm: This computational algorithm alters information based on specific operations to protect it. A symmetric key algorithm, like the Data Encryption Standard, uses the identical key for both encrypting and decrypting data. If the algorithm is sufficiently advanced, only individuals with the key can decipher the data.
3. Greedy Algorithm: This Algorithm solves optimization problems by finding the locally best solution, hoping that it is the best solution at the global level. However, it does not guarantee the most optimal solution.
4. Recursive Algorithm: This Algorithm continuously invokes itself until it resolves a problem. Recursive algorithms invoke themselves with a reduced value each time a recursive function is called.
5. Backtracking algorithm: This Algorithm discovers a solution to a given problem in step-by-step approaches and solves it one fragment at a time. Divide-and-conquer algorithm. This customary Algorithm is split into two portions. The initial portion splits a problem into smaller subproblems. The subsequent portion resolves these problems and then merges them together to generate a solution.
6. Dynamic programming algorithm: This Algorithm resolves issues by breaking them down into smaller problems. The outcomes are then saved to be utilized for future related problems.
7. Brute-force algorithm: This Algorithm systematically explores all possible solutions to a problem, without any consideration or intelligence, in order to find one or more solutions to a function.
8. Sorting algorithm: Sorting techniques are employed to reorganize data structures using a comparison operator, which determines a fresh sequence for the data.
9. Hashing algorithm: This computational procedure takes information and converts it into a uniform message using a stochastic hashing algorithm. This procedure minimizes execution durations and temporal complexities. It incorporates unpredictable components as a component of its reasoning.
10. Divide & Conquer: This method breaks down a complicated problem into smaller, easier-to-handle sub-problems, addresses each sub-problem individually, and then combines them to achieve the final solution. The approach consists of the following three stages:

a. Divide

b. Solve

c. Combine

## Which are instances of algorithms?

Machine learning is a prime instance of an algorithm, as it utilizes several algorithms to anticipate results without being expressly programmed to do so. Machine learning employs supervised learning or unsupervised learning. In supervised learning, data scientists provide intricate algorithms with marked training data and specify the variables they want the Algorithm to evaluate for correlations. The Algorithm's input and output are both defined.

Unsupervised machine learning encompasses techniques that employ algorithms to learn from unannotated data. These algorithms scrutinize the unlabeled data to identify patterns that can be utilized to categorize data points into clusters. A majority of deep learning approaches, such as neural networks, are unsupervised algorithms. Artificial intelligence leverages machine learning as well, but this type of system may exhibit predispositions in the data that is fed into the machine learning algorithm. Consequently, such systems may be unreliable and could potentially pose harm.

## Role of Algorithms

Algorithms are instrumental in numerous domains and have diverse applications. Some of the primary domains where algorithms are utilized are: Computer Science: Algorithms serve as the foundation of computer programming and are employed to resolve issues spanning from basic sorting and searching to intricate tasks such as artificial intelligence and machine learning.

Mathematics: Mathematical issues can be resolved with the aid of algorithms, which can assist in locating the best possible solution to a set of linear equations or determining the shortest route in a graph.

Operations Research: Algorithms have a role in streamlining and decision-making in industries such as transportation, logistics, and resource management.

Artificial Intelligence: The foundation of artificial intelligence and machine learning is algorithms, which assist in the development of intelligent systems that can recognize images, process natural language, and make decisions.

Data Science: Algorithms are used in data processing, analysis, and extraction of insights in fields like marketing, finance, and healthcare. These are just a few examples of the many applications of algorithms.

The use of algorithms is continually expanding as new technologies and fields emerge, making it a vital component of modern society.

## Need of Algorithm

Algorithms play a vital role in resolving intricate problems in a proficient and effective manner. A well-crafted algorithm offers a systematic procedure or a set of regulations to follow in order to achieve a preferred outcome. By breaking down complex problems into smaller, more manageable tasks, algorithms assist in streamlining the problem-solving process.

One of the significant benefits of algorithms is their capability to mechanize processes. By implementing algorithms, monotonous tasks can be executed by computers or machines, thus eradicating the need for manual intervention. This mechanization leads to increased reliability, as it minimizes the likelihood of human error.

Additionally, algorithms can execute these tasks much quicker than humans, resulting in improved efficiency and productivity. Furthermore, algorithms enable computers to accomplish tasks that would be arduous or unfeasible for humans to carry out manually. For instance, algorithms are employed in data analysis to handle substantial volumes of information and extract meaningful insights. Humans may encounter difficulties in analyzing massive datasets due to limitations in time, memory, and cognitive abilities. Algorithms, however, can manage such data with ease, allowing for precise analysis and decision-making.

Algorithms find applications in diverse fields. In mathematics, algorithms are utilized for resolving complex equations, optimizing mathematical models, and performing numerical computations. In computer science, algorithms are indispensable in designing efficient data structures, developing search and sorting algorithms, and creating algorithms for artificial intelligence and machine learning. In engineering, algorithms are used in tasks such as optimizing processes, designing efficient systems, and resolving engineering problems.

Algorithms also find applications in finance, where they are utilized for risk analysis, portfolio optimization, algorithmic trading, and fraud detection, among others. It is imperative to note that the content provided above is a result of the AI model's comprehension of the topic based on its training on a diverse range of data. While efforts have been made to offer precise and original information, it is always advisable to cross-check the information and consult trustworthy sources for in-depth understanding.

### Benefits of Algorithms:

• It is simple to comprehend an algorithm.
• An algorithm represents a solution to a particular problem in a step-by-step manner.
• By breaking the problem down into smaller components or steps, it becomes easier for the programmer to transform it into an actual program.

### Drawbacks of Algorithms:

• Creating an algorithm is a time-consuming process.
• The process of understanding intricate logic through algorithms can be extremely challenging.
• The representation of branching and looping statements in algorithms can be difficult as well as necessary.

Till now, we are sure about the theoretical part of the Algorithm. Now, let us dive into the construction and evaluation of the Algorithm.

## Representation of Algorithm

Basically, an algorithm is represented in two (2) ways:

• Flowchart
• Pseudocode

### Flowchart:

A flowchart is a diagrammatical representation of the flow of the task. It has some components that are useful to describe various functionalities.

### Notations:

The following are the notations of the flowchart.

### Guidelines for Creating Flowcharts:

The following are some guidelines that are followed to draw flowcharts:

1. All flowchart boxes should be linked with arrows, not lines.

2. Flowchart symbols must have a single entry point at the top with no other entry points, and the exit point for all symbols, except the Decision symbol, should be at the bottom.

3. The Decision symbol has two exit points, which can be located at the sides or the bottom and one side.

4. Typically, flowcharts should progress from top to bottom, but upward flow can be displayed as long as it does not exceed three symbols.

5. Connectors are utilized to link breaks in the flowchart, such as from one page to another page, from the bottom of the page to the top of the same page, or an upward flow of more than three symbols.

6. Subroutines and Interrupt programs should have their own independent flowcharts.

7. Every flowchart should begin with a Terminal or Predefined Process symbol, depending on whether it is an interrupt program or subroutine.

8. All flowcharts should conclude with a terminal or a continuous loop. Benefits:

• Clearly communicates meaning
• Effectively analyzes problems
• Excellent documentation tool
• Provides guidance for coding
• Facilitates systematic debugging
• Supports systematic testing

### Drawbacks:

• Time-consuming to create, especially for programs with many lines or statements.
• It is difficult to make some modifications in the flowchart.
• Lack of standardization regarding the level of detail that should be included in a flowchart.

Example:

The following example is a simple lamp flowchart.

### Pseudocode

Pseudocode is a simple method of describing programming which does not demand adherence to any specific syntax or technological considerations.

It is utilized to establish a program's framework or a preliminary version. Pseudocode encapsulates a program's progression but omits underlying intricacies.

Designers of systems generate pseudocode to guarantee that programmers comprehend a software project's prerequisites and match the code accordingly.

### Benefits of pseudocode:

• Pseudocode is comprehensible to programmers from various backgrounds.
• It allows the programmer to focus solely on the algorithmic aspect of code creation.
• It is not capable of being compiled into a functional program.

### Drawbacks of pseudocode:

• The primary drawbacks are that it lacks a graphical depiction of the programming reasoning.
• There are no universally recognized conventions for composing pseudocode. Developers employ their individual writing techniques for pseudocode.
• The pseudocode is not executable or compilable, and there is no actual normative syntax.
• It is merely a crucial stage in the creation of the end product.

### Pseudocode Conventions:

• Comments: A pseudocode contains single comment lines, which are represented by double slashes "//."
• Keyword: The keyword "Algorithm" is mentioned at the start of the Algorithm.
• Blocks: The compound statements are enclosed by the curly braces as blocks, "{}."
• Semicolon: The statements in the Algorithm are accompanied by the semicolon ";" at the end.
• Assignment Operator: The assignment operator in the Algorithm is represented by “:=."
• All the logical, Boolean, and relational operators remain the same.
• Conditional Statement: The conditional statement if-else is represented as follows:
`If (condition), then{          Statements;}else{          Statements;}`
• Loops: We have three different types of loops.They are:
• For
• While
• Repeat until

For: The following is the representation of for loop

For variable_name := start_point to end_point do updation

Example:

`For i:= 1 to n, do i:=i+2{          Statements;}`

While: The following is the representation of the while loop

While (condition) do

Example:

`While ( i < n ) do{          Statements;}`

Repeat Until: Repeat Until is basically the representation of the do while loop. And it is represented in the following way:

`Repeat{          Statements;}until (condition);`
• Loop control statements: Loop control statements such as break, return, and continue are represented the same as in the program.
• Input: For taking the user-entered input, we use the "read" keyword in the Algorithm.
• Output: The output of the Algorithm is shown with the help of writing.

Example of Algorithm:

• Finding the maximum number from the list of numbers.

Algorithm:

`Algorithm Maximum(n, a[]){     max := a[0];     for(i := 1 to n-1) do     {               if( a[i] > max) then                         max = a[i];     }     write (max);}`

## How to evaluate an Algorithm?

To be considered adequate, a standard algorithm must be efficient. Therefore, it is necessary to evaluate and maintain the efficiency of an algorithm. This can be done in two stages:

• A priori analysis: "A priori" means "before." Thus, a priori analysis involves evaluating the Algorithm before its implementation. In this stage, the Algorithm is assessed in its theoretical form, consisting of a series of steps. The efficiency of the Algorithm is measured by assuming that all other factors, such as processor speed, remain constant and do not affect the implementation. Typically, this analysis is conducted by the algorithm designer. It is independent of the hardware type and compiler language. This analysis provides approximate results for the program's complexity.
• A posteriori analysis: "A posteriori" means "after." Therefore, a posteriori analysis involves evaluating the Algorithm after its implementation. In this stage, the Algorithm is implemented in a programming language and executed. This analysis helps to obtain the actual and real analysis report on correctness (i.e., whether it produces the correct output for every possible input), space requirements, time consumption, etc. It is dependent on the compiler language and hardware type used.

## Performance Analysis of an Algorithm

An algorithm is characterized as intricate based on the quantity of Memory and Time it consumes. Therefore, the intricacy of an algorithm refers to the measurement of the time that it will require to execute and obtain the anticipated output and the memory it will require to store all the data (input, temporary data, and output). Therefore, these two factors determine the effectiveness of an algorithm:

• Space Complexity
• Time Complexity

### Space Complexity:

The amount of memory required to store and run an algorithm is called Space Complexity. It is denoted by S.

S(p) = C + Sp

Where c = space required to store fixed length variables/Constants

Sp = variable length variables/ instance characteristics

Example: Algorithm to find out the sum of the elements of the array

`Algorithm add(a,n){          sum := 0;          for( i := 1 to n ) do          {                    sum := sum + a[i];          }          Write (sum);}`

Here the space complexity S(p) = c + Sp.

The number of constants or fixed length variables is n, I, sum = 3.

Therefore, the value of c = 3.

The number of variable length variables/ instance characteristics = 1 of n length

Therefore Sp = 1*n.

Finally, S(p) = 3 + n;

And when we consider the space complexity in terms of big oh notation, the space complexity of this particular Algorithm will be O(n).

Simply, Space complexity is the sum of the fixed length variables and the variable length variables.

### Time Complexity:

The estimated amount of time that an algorithm will take for its execution is considered the time complexity of the Algorithm.

Basically, the time complexity of an algorithm is calculated with the help of the step-count method.

The time complexity is basically considered as the multiplication of steps per execution with the frequency count.

Let us consider the same example that was considered to calculate the space complexity of an algorithm.

Example: Algorithm to find out the sum of the elements of the array

`Algorithm add(a,n){          sum := 0;          for( i := 1 to n ) do          {                    sum := sum + a[i];          }          Write (sum);}`

Total = 3 + 2*n

Therefore, total time complexity of this Algorithm is 2n+3

But when the time complexity is considered regarding big oh notation, it is O(n).

This is the process of calculating the time and space complexity of the algorithms.