# How to Write an Algorithm?

## Describe an Algorithm

Basics of Algorithms

"A set of finite rules or instructions to be followed in calculations or other problem-solving operations" or "A procedure for solving a mathematical problem in a finite number of steps that frequently involves recursive operations" are two definitions of the term algorithm.

As a result, an algorithm is a set of limited procedures used to solve a particular issue.

A set of instructions called an algorithm is used to solve issues or carry out tasks. Before constructing a program, algorithms are often written in pseudocode, blending your native language and one or more programming languages. This article shows you how to put together a basic algorithm to launch your application. Utilization of Algorithms:

In many domains, algorithms are essential and have several uses. Algorithms are widely utilized in a variety of fields, such as:

• Algorithms are the building blocks of computer programming and are used to tackle issues ranging from straightforward sorting and searching to more complicated ones like artificial intelligence and machine learning.
• Algorithms are used in mathematics to solve issues like determining the shortest path in a graph or the best answer to a set of linear equations.
• Operations Research: Algorithms are used to decide and optimize in areas like resource allocation, logistics, and transportation.
• Artificial Intelligence: Artificial intelligence and machine learning are built on algorithms, which are used to create intelligent systems capable of performing tasks like image recognition, natural language processing, and decision-making.
• Data science: Algorithms are used in industries like marketing, banking, and healthcare to analyze, process, and glean insights from massive volumes of data.
• These are only a handful of the numerous uses for algorithms. Algorithms are becoming an increasingly important part of modern life as new technologies and areas are developed.

Algorithms range from basic to sophisticated, depending on what you want to do.

It may be understood by using the process of making a novel recipe as an example. When following a new recipe, one must read the directions and carry out each step correctly. The end consequence is that the new meal is cooked to perfection. You employ algorithms when using a phone, computer, laptop, or calculator. Similarly to this, algorithms assist programmers in carrying out tasks to produce desired results.

The developed algorithm is language-independent, consisting only of simple instructions that may be used to build it in any language and still provide the desired results.

### Why are algorithms needed:

1. Algorithms are required to efficiently and effectively solve complicated issues.
2. They aid in automating operations to improve their dependability, speed, and usability.
3. Algorithms also allow computers to carry out activities that would be challenging or impossible for people to do manually.
4. They are used to streamline procedures, analyze data, provide predictions, and offer answers to issues in various industries, including mathematics, computer science, engineering, finance, and many more.

### What Makes an Algorithm an Algorithm?

Instead of using the everyday recipe's printed directions, one would not follow them. In a similar vein, not all computer instructions written down are algorithms. Some instructions must meet the following requirements to qualify as an algorithm:

• Unambiguous and Clear: The algorithm must be unambiguous. Each of its actions must have a distinct meaning and be transparent from beginning to end.
• Well-Defined Inputs: The inputs must meet specific criteria if an algorithm requests inputs. It might or might not accept input.
• Well-Defined Outputs: The algorithm must precisely define its output. It ought to generate at least one output.
• Finite-ness: A finite algorithm ends after a finite amount of time.
• Feasible: The method must be straightforward, general, and workable to implement using the resources at hand. It can't have any cutting-edge technology or anything.
• Language Independent: The created algorithm must be language-independent, meaning it must consist of simple instructions that may be implemented in any language while still producing the desired results.
• Input: An algorithm can have one input or more. Every expression that contains a primary operator must accept one input or more.
• Output: Every algorithm generates a minimum of one output. Every instruction with a primary operator must take zero or more inputs.
• Clarity: Every instruction in an algorithm needs to be clear, specific, and simple to understand. Any algorithm instruction can be referred to understand what has to be done. There must be no ambiguity in the definition of any fundamental instruction operator.
• Finiteness: In all test scenarios, an algorithm must end after a limited number of steps. Every instruction that uses a primary operator must end in a specific period. Infinite loops or recursive functions do not possess Finiteness without base conditions.
• Effectiveness: An algorithm must be created using the most fundamental, practicable, and simple processes possible such that it can be traced out using nothing more than paper and a pencil.

### Algorithm characteristics:

• It should come to an end after a set amount of time.
• At least one output must be produced.
• It should require no input at all.
• It should be deterministic, which implies that the result should match the input scenario exactly.
• Each algorithm step must be efficient, i.e., each step must provide results.

### Algorithm Types:

There are several different types of algorithms. Several powerful algorithms include:

1. The first attempt at a problem is the brute force algorithm. When we see an issue, a brute force algorithm is the first method that springs to mind.
2. Recursive Algorithm: Recursion is the foundation of a recursive algorithm. In this instance, an issue is divided into smaller components and repeatedly called by the same function.
3. The backtracking method constructs the answer by scouring all potential solutions. Using this approach, we continue to develop the answer under the criteria. Every time a solution fails, we return to the original problem, build on the new one, and repeat the process until the problem is solved or all potential solutions have been considered.
4. Searching Algorithm: Searching algorithms find individual elements or collections of components inside a given data structure. Depending on how they go about things or whatever data structure the element has to be in, they can be of several forms.
5. Sorting Algorithm: Sorting is the process of organizing a set of facts according to the needs. Sorting algorithms are the ones that assist in carrying out this duty. Data groupings are often sorted using sorting algorithms in an increasing or decreasing order.
6. The hashing algorithm is comparable to the search algorithm in operation. Nevertheless, they have an index with a key ID. In hashing, a key is given to a particular piece of data.
7. Divide and Conquer method: This method divides an issue into more minor problems, solves each problem separately, and then combines the results to provide the overall answer. The procedure entails the following three steps:
• Divide
• Solve
• Combine
8. Greedy Algorithm: This algorithm builds the solution piece by piece. The immediate advantage of the next section serves as the foundation for the solution of that section. The answer for the following section will offer the most significant benefit.
9. Dynamic Programming technique: To avoid repeatedly calculating the same portion of the problem, this technique applies the already discovered answer. It separates the issue into more manageable overlapping subproblems and resolves each one.
10. Randomised Algorithm: We utilize a random number in the randomized algorithm to provide a rapid advantage. The predicted result is determined in part by the random number.

Algorithms provide the following benefits:

• They are simple to grasp;
• They are a step-by-step depiction of a solution to a particular issue;
• Because the problem is broken down into smaller bits or stages, it is simpler for the programmer to turn an algorithm into a working program.

• The time required to write an algorithm, which makes it time-consuming.
• It might be quite challenging to comprehend sophisticated reasoning using algorithms.
• Algorithms(imp) make displaying branching and looping statements harder.

## Steps to Write an Algorithm

Determine your code's result. What specific issue are you trying to resolve, or what should it do for you? You may decide the measures necessary to get there after you clearly know what you want to achieve.

Choose a starting location in step two. To identify the phases of the procedure, you must first choose your starting and finishing points. Determine the responses to the following questions to establish a starting point:

• What information or inputs are available?
• Where are those data kept?
• Which formulae may be used to solve the current problem?
• What are the guidelines for using the data that is available?
• What connections may be seen between the data values?

Locate the algorithm's conclusion. Similar to finding the algorithm's starting point, you may determine its ending point by concentrating on the following issues:

• What information will we gather from the procedure?
• What changes between the beginning and the end?
• What will be changed or eliminated?

List each step from beginning to end. Start by making big moves. Consider the scenario when your objective is to eat lasagna for supper. You've decided that finding a recipe is the best place to start and that by the time 7 PM rolls around, you'll have a lasagna that's finished cooking and ready to dine. Your actions could resemble these:

• Perform an internet recipe search.
• Create a list of the ingredients you'll need to buy.
• Purchase the missing components.
• Go back home.
• Let the lasagna cool after baking.

Choose your method for completing each stage. After creating a step-by-step blueprint, consider how you may code each step. What tongue will you employ? What tools are at your disposal? What's the fastest way in that language to complete each step? Take part of the code and include it in your algorithm. Once you've described the complete procedure, expand each stage.

• For instance, the first step in our algorithm for lasagna is to look for a recipe online. But what does this search involve? Be precise. For instance:
• Start the computer.
• Verify that your internet connection is active. Obtain a network connection if you haven't previously.
• Select a link to a recipe.
• Check to see if the recipe satisfies your requirements.
• Verify that at least 5 servings are included in the recipe.
• Try these steps again until you have the correct combination.
• Take into account the resources you have available, such as the features of the system you are creating a program for. In the case of lasagna, we presume the individual creating the dish is familiar with online research, using an oven, etc.

Analyze the algorithm. After creating your algorithm, it's time to assess the workflow. You'll need your algorithm to begin developing your program because it is intended to do something specific. Consider the following inquiries, and respond to each as necessary:[2]

• Does the algorithm complete the task or solve the problem?
• Are the inputs and outputs well-defined?
• Should the ultimate objective be expanded to include more things? Any further details?
• Are there any processes that might be streamlined?
• Is the accuracy of the algorithm's conclusion guaranteed?

## How can an algorithm be analyzed?

A standard algorithm must be efficient to be effective. As a result, an algorithm's effectiveness has to be monitored. There may be two phases:

1. Priori analysis: "Priori" is Latin meaning "before." As a result, Priori analysis refers to verifying the method before it is used. When an algorithm is written as theoretical steps, it is tested in this. Assuming that all other variables, such as processor speed, remain constant and have no impact on the implementation, the efficiency of an algorithm is evaluated. Typically, the algorithm designer does this. The kind of hardware and compiler language has no bearing on our investigation. It provides rough solutions for the program's complexity.
2. Posterior Analysis: The prefix posterior denotes "after." Hence Checking the algorithm after it has been implemented is known as a posterior analysis. The method is tested by putting it into practice and running it in any programming language. This analysis aids in obtaining an accurate and genuine analysis report about correctness (for every potential input, whether it displays or returns the proper result), space needed, time used, etc. In other words, it depends on the hardware and language of the compiler.

## How can I determine algorithm complexity?

An algorithm is classified as complicated based on how much space and time it uses. Thus, the complexity of an algorithm is a measurement of the time required for it to run and produce the desired result, as well as the amount of storage space required to keep all the data (input, temporary data, and output). Consequently, these two elements determine how effective an algorithm is.

The two elements that make an algorithm complex are:

• Time Factor: The amount of crucial processes, such as comparisons in the sorting algorithm, is used to calculate time.
• Space Factor: The amount of space is calculated by adding the whole memory space needed for the algorithm to operate.

As a result, there are two categories of algorithmic complexity:

1. Space Complexity: The amount of memory an algorithm needs to store the variables and produce the output is called its space complexity. This may apply to temporary activities, inputs, or outputs.

## How is space complexity determined?

The following 2 elements are calculated to determine an algorithm's space complexity:

• Fixed Part: This describes the area that the algorithm unquestionably needs. For instance, program size, output variables, and input variables.
• Variable Part: This describes the area that can change depending on how the algorithm is applied. For instance, dynamic memory allocation, recursion stack space, temporary variables, etc.

So, any algorithm's space complexity (S(P)) P is defined as S(P) = C + SP(I), where C denotes the algorithm's fixed portion and S(I) denotes its variable portion, which is dependent on instance characteristic I.

Example:

Think about the following linear search method

Step 1: BEGIN

Get the array's n elements from step 2 and the number sought from step 2's x.

Step 3: Starting with the leftmost member of arr[], compare each element of arr[] with x individually.

Step 4: Print True if x matches an element.

Step 5: Print False if x doesn't match any elements.

Step 6: Finish

There are two variables in this case: x and arr[], where x is the fixed component and arr[] is the variable part of n items. So, S(P) = 1 + n. Therefore, n (the number of elements) determines how complicated the space is. Now, space will be multiplied by the data types of the specified variables and constant types.

2. Complexity of Time: The time needed for an algorithm to run and produce a result is called the algorithm's temporal complexity. This may apply to routine processes, if-else statements with conditions, loop statements, etc.

## How is time complexity calculated?

The following 2 elements are also determined to calculate an algorithm's time complexity:

• Constant time component: This part contains all instructions only performed once. Examples include input, output, if-else, switch, arithmetic operations, etc.
• Variable Time Part: This part contains instructions run n or more times. Using loops, recursion, etc., as examples.

As a result, the time complexity of any algorithm P is given by T(P) = C + TP(I), where C denotes the constant time component of the algorithm, and TP(I) is the variable component that is dependent on the instance characteristic I.

Example:

The temporal complexity of the Linear Search method is determined as follows:

First Step: Constant Time

The second step is variable time (using n inputs).

Step 3: -Variable Time (Until the array's length (n) or the element's index is discovered)

Fourth Step: Constant Time

Fifth Step: Constant Time

Sixth step: Constant Time

Consequently, T(P) = 5 + n, or T(n), may be written.

## How do you formulate an algorithm?

1. Natural Language: In this section, we express the algorithm using everyday English. To comprehend the algorithm from it would take a lot of work.
2. Flow Chat: The algorithm is represented graphically or visually in this section. Natural Language is more straightforward to grasp than this.
3. Pseudo Code: The algorithm is expressed in simple English annotations and explanatory text that resembles genuine code. However, because pseudo code lacks the syntax of any programming language, it cannot be built or understood by a computer. It is the most outstanding technique to convey an algorithm since even a layperson with little programming expertise can understand it.