# What are algorithms?

Did you know you typically use algorithms every day and that you are already an author of some algorithms, even without writing any lines of code or drawing a diagram? If this sounds impossible, give me a few minutes and read this section to get to know how is it possible.

## Definition

First, you need to know what an **algorithm** is. It is a **well-defined solution for solving a particular problem or performing a computation**. It is an ordered list of precise **instructions** that are performed in a given order and take a well-defined **input** into account (if any) to produce a well-defined **output**, as shown here:

Figure 2.1 – Illustration of an algorithm

To be more precise, **an algorithm should contain a finite sequence of unambiguous instructions, which provides you with an effective and efficient way of solving the problem**. Of course, an algorithm can contain **conditional expressions**, **loops**, or **recursion**.

Where can you find more information?

If you are interested in the topic of algorithms, you can find a lot of detailed information about them in many books, including *Introduction to Algorithms*, by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Of course, there are also many resources available online, such as *GeeksForGeeks* (https://www.geeksforgeeks.org), *The Algorithms* (https://the-algorithms.com), and *Algorithms, 4th Edition*, by Robert Sedgewick and Kevin Wayne (https://algs4.cs.princeton.edu). A huge number of resources is also available if you browse the *Algorithms* topic on GitHub (https://github.com/topics/algorithms). I strongly encourage you to search for various resources, either in books or over the internet, and continue learning about algorithms when you’ve finished reading this book.

## Real-world examples

With the definition of algorithms under your belt, you might be thinking, “*Come on – inputs, outputs, instructions… where I can find them?*” The answer turns out to be much simpler than you might expect because you can find such items almost everywhere, all the time!

Let’s start with a **simple morning routine**. First, you wake up and take a look at your phone. If there are any notifications, you go through them and reply to urgent messages. For any unurgent items, you postpone them. Then, you go to the bathroom. If it is occupied, you wait until it is free, telling the person inside to hurry up. As soon as you are in the bathroom, you take a shower and brush your teeth. Finally, you choose suitable clothes according to the current weather and temperature. Surprise! Your morning routine is an algorithm. You can describe it as a set of instructions, which has some inputs, such as notifications and the current temperature, as well as outputs, such as chosen clothes. What’s more, some of the instructions are conditional, such as only replying to urgent messages. Others can be executed in a loop, such as waiting until the bathroom is vacant.

The preceding morning routine also contains other algorithms, such as those for **unlocking a smartphone using face recognition**. It is an algorithm-based mechanism that you can use to ensure that only you can unlock your phone. What’s more, even **organizing notifications on your phone** is the result of an algorithm that takes into account notifications as input, arranges them into groups, and sorts them suitably before presenting them to you.

At this point, you are dressed up and ready for a healthy and yummy breakfast. Imagine that you want to **prepare scrambled eggs** using your grandma’s secret recipe. You need some ingredients, namely three eggs, salt, and pepper. As a result, you will have created an amazing dish for your perfect breakfast. First, you crack the eggs into a bowl and whisk them with a pinch of salt and pepper. Then, you melt butter in a non-stick skillet over medium-low heat. Next, you pour the egg mixture into the skillet and keep the eggs moving until there is no liquid egg. With that, your breakfast is ready. However, what is it if not a well-written and organized algorithm with a precise input and yummy output?

After breakfast, you need to go to work. So, you jump into your car and launch a navigation app on your smartphone to see **the fastest route to work** while taking the current traffic into account. This task is performed by complicated algorithms that can even involve **artificial intelligence** (**AI**), together with a computer-understandable representation of routes that use specialized data structures, as well as data obtained from other users. When combined, this forms traffic data. As you can see, the algorithm takes the complex input and performs various calculations to present you with an ordered list of route directions – for example, go to route A4, turn right to route S19, and follow this route until you reach your destination.

While at work, you need to prepare documents for your accountant, so you need to gather documents from colleagues, print some of them from emails, and then **sort all invoices by numbers**. How do you perform sorting? You take the first document from the stack and put it on the table. Then, you take the second document from the unsorted stack and put it either above, if the number is smaller than the first invoice, or below the previous one. Then, you take the third invoice and find a suitable place for it in the ordered stack. You perform this operation until there are no documents in the unsorted stack. Wow, another algorithm? Exactly! This is one of **sorting algorithms**. You'll learn about them in the next chapter.

It’s time for a break at work! You launch your favorite social app and **receive suggestions for new friends**. However, how are they found and proposed to you? Yes, you’re right – this is another algorithm that takes data from your profile and your activities, as well as the data of available users, as input, and returns a collection of best-suited suggestions for you. It can use many complex and advanced techniques, such as **machine learning** (**ML**) algorithms, which can learn and take your previous reactions into account. Just think for a second about the data structures that can be used in such cases. How you can organize your relationships with friends and how can you find out how many other people are between you and your favorite actor from Hollywood? It would be great to know that your friend knows Mary, who knows Adam, who is a friend of your idol, wouldn’t it? Such a task can be accomplished using some graph-based structures, as you will see later in this book.

Will you learn about AI algorithms in this book?

Unfortunately, no. Due to the limited number of pages, various algorithms related to AI are not included in this book. However, note that it is a very interesting topic that involves many concepts, such as **ML** and **deep learning** (**DL**), which are used in many applications, including recommendation systems, speech-to-text, searching over extremely high amounts of data (the concept of **big data**), generating textual and graphical content, as well as controlling self-driving cars. To achieve these goals, a lot of interesting algorithms are used. I strongly encourage you to take a look at this topic on your own or choose one of Packt’s books that focuses on AI-related topics.

Are these examples enough? If not, just think about **choosing a movie in a cinema for the evening** while considering the AI-based suggestions of movies with geolocation-based data of cinemas, or **setting a clock alarm** depending on your plan for the next day. As you can see, **algorithms are everywhere and all of us use them, even if we do not ****realize it**.

So, if algorithms are so common and so useful, why don’t we benefit from the huge collection of ones that are available or even write our own algorithms? There are still some problems that need to be solved using algorithms. I, as the author of this book, am keeping my fingers crossed for you to solve them!