The word "Algorithm" comes from the surname of a medieval Arab mathematician - the same one who invented Algebra. Since then, algorithms have been used to describe various instructions for solving mathematical equations with variables. And, of course, mathematicians dreamed of creating a universal machine that would execute these instructions automatically. In the early 20th century, Alan Turing invented such a machine in his imagination and called it a formalized Algorithm.
Later, when appeared computers that easily automated algorithms and people get used to them and to programs, they began to use the word "Algorithm" in real life - for example, "First aid algorithm" or "Algorithmic problem solving". The word has become very abstract, but in general, you can intuitively imagine an Algorithm as a flowchart with cyclical/repetitive processes and conditional transitions. These are the kinds of processes that a computer can perform very well.
Why should a programmer or data scientist study Algorithms and Data Structures?
On the one hand, it seems that we already create algorithms in every program. When we think, "First, we need to do this and if this works, then we need to do that and then come back here..." - we are creating a specific algorithm. So, it's unclear what the Algorithms course can teach us - after all, every program uses a different algorithm.
Algorithms can be high-level or low-level. High-level algorithm is the overall algorithm of a program - the order in which it creates objects, processes data and interacts with the user. These algorithms are unique to each program and you can learn to create them only through practice. Low-level algorithms operate behind the scenes. For example, an algorithm for searching an array, sorting or encryption. They are usually hidden within a single language command, but they determine how quickly a program runs. Books about algorithms focus specifically on these low-level algorithms and the data structures that are an integral part of them.
If you look at the TOC of any book on Algorithms, this course covers the most basic algorithms for solving abstract mathematical problems (for example, sorting an array or finding the shortest distance in a graph). All these algorithms operate under the hood of programming language commands (for example, sort_array) or in libraries (regular expressions). So why bother understanding these low-level details when we're writing high-level programs?
Obviously, building programs from large building blocks isn't always optimal. Sometimes, when we want to optimize a program, make it faster and more reliable, we go down to a lower level and build something new from smaller blocks. Instead of a ready-made command or library, we can program a new one - one that's perfect for our project.
What does "Data Structures" have to do with this?
An integral part of many algorithms is the arrangement of data into a convenient structure. Without this, they cannot achieve their goals. For example, the fast array search algorithm builds a binary tree.
Here are some free PDF books about Algorithms and Data Structures:
Data Structures and Algorithms in C++
2011 by Michael T. Goodrich, Roberto Tamassia, David M. Mount

Download PDF
Data Structures & Algorithms in Python
2022 by Robert Lafore, Alan Broder, John Canning

Download PDF
Algorithms and Complexity
1990 by Jan Leeuwen

Download PDF
Data Structures And Algorithms Using C
Vikas Publishing House by Jyoti Prakash Singh

Download PDF
Data Structures and Algorithms with Python
2015 by Kent D. Lee, Steve Hubbard

Download PDF
See also: Top 10 eBook Organizers
How to download PDF:
1. Install Gooreader
2. Enter Book ID to the search box and press Enter
3. Click "Download Book" icon and select PDF*
* - note that for yellow books only preview pages are downloaded


