# Why study data structures and algorithms?

Many young programmers scour the web trying to find answers to this question: How to study Algorithm and Data structure? Certainly, a good place to start… But I believe a more relevant question would be this: What are algorithms and data structures, and why should I study them?

Let’s start with this motivating quote: “Every program depends on algorithms and data structures, but few programs depend on the invention of brand new ones.” **— Kernighan & Pike**

**What is an algorithm?**

Wikipedia says “an algorithm is a self-contained step-by-step set of operations to be performed. Algorithms perform the calculation, data processing, and/or automated reasoning tasks.”

You’d be surprised that there are still some of us who could be tripping on words while trying to explain algorithms, data structures, and their importance. Simply put, whether you are cooking a burger or adding two numbers, there’s an algorithm working its magic there. From monitoring stock markets to oil crises to determining crop yield to pairing soul mates, algorithms are omnipresent.

One definition from the Internet is this: An algorithm is a detailed step-by-step instruction set or formula for solving a problem or completing a task. You need to tell your computer what task to perform, right? You need algorithms or specific computational procedures to achieve the input–output relationship. Repetition, sequencing and conditional logic or decision are computational concepts that manifest in your everyday life. Your morning routine can be an algorithm. Can you guess how?

There’s this great TEDEd cartoon by Harvard computer scientist David J. Malan you should see.

Algorithms are much more than instructions. It doesn’t matter if you call them algorithms or programming basics, what matters is that they teach you to define clear steps and conceptualize solutions in terms of distinct steps in a process.

**Examples, anyone?**

As we are computer science-mad people, I should do some fancy talking about a few algorithm types. Shopping for the prom dress, investing in stocks, or driving to the mall, you are using the *greedy algorithm*. In the hope of finding a global optimum, you find the locally optimum choice at each stage (Wikipedia). I beg your pardon? (Say it with a Brit accent if you please. I love it.)

If you know the famous traveling salesman problem in computational mathematics, then you’ll know how you can apply to delivering meals to homebound people.

Read this article about a two-year project led by Prof. William Cook from the University of Waterloo, Canada. His math team added new dimensions to the TSP; they calculated the shortest distance possible to get to almost 25,000 pubs in the UK using Google Maps. The route is circular, with the longest distance being 50 hours and the average distance being an hour. If you want to go to each pub on this list, get ready for 28,270 miles.

Like Cook said: “We did not set out to improve a lot of a wandering pub aficionado.” But I guess they did just the same!

It is all about forgetting future consequences and taking the best you can this minute. This I understand! What approach would you use to find a name in a phonebook? The *brute-force algorithm*.

On a good day, you go through the zillion names and find it quickly, that is, trying all possibilities till you get a solution that is good enough. A criminal can use the brute-force method, which is a trial-and-error approach, to crack data that is encrypted. This one doesn’t work so well if the complexity (size) of the problem increases.

Do you recall in the late 90s IBM’s Deep Blue used brute force methods to defeat the then reigning chess champion, Garry Kasparov? We have moved on and computational abilities have progressed beyond belief.

You have *data compression algorithms* using mp3 to JPEG to Zip that reduces the file size by saving oodles of time and space. *Huffman* is a widely used one; most repeating bytes represent the least number of bits. This is also a greedy approach and works well to find the best encoding. You will need an algorithm that keeps the error between the desired and real output signals to a minimum for a satellite service or a factory robot, yes? This is the *proportional integral derivative (PID) algorithm* that uses a control loop feedback mechanism. If you are from an electronics background, you know I am talking about PID control in heating and cooling systems. This algorithm might have lost to model predictive control (MPC) according to Harvard researchers working on artificial pancreas systems, but it is certainly working wonders for lab-on-a-chip devices.

This is a darling subject. I could go on. But I won’t, of course. Dutifully moving on to the next topic of this blog post—data structures.

**What is Data Structure and why study it?**

No biggie this…data structure refers to an orderly arrangement of data. Something you need when you are arranging key documents in folders in a filing cabinet. Imagine a legal clerk’s life without such a system! Shudder…Be it an encyclopedia or a bank statement, there is nothing random about these data summaries. Think not binary trees or associative arrays; think a shopping list. Mucho easier? Data structures store objects and allow their manipulation. You call a mathematical model of a data structure an abstract data type (ADT). Here, binary relationships can link objects. Data structures can be linear (arrays, stacks, linked lists, or queues) or nonlinear (trees, graphs, tables, or sets).

Why am I talking about them? Well, abstractions help scientists focus on what’s really important, the big picture, and not exhaust their energies on the nitty-gritty. ADT is a specification mechanism and important for organizing and manipulating data. A graph of fluctuating stock prices is an abstraction of how the money markets in the world are doing. Or another everyday example of abstraction will be the car getting me to Walgreen’s to get Tylenol without me knowing exactly what’s happening under the hood.

Objects plus Operations equal ADT. The implementation is hidden. That is, the client knows what the operations are but don’t know how the type is implemented. For example, to define an ADT, you will, therefore, need to define fields in a record or class and the routines or methods. Say, your library changes the program to store when overdue fines need to be paid. Although you might not know it, you are going to be shelling it out if need be. But a data structure tells you how ADT is implemented and unlike the latter, it also tells you how the data is stored and how the operations work. For instance, Java source code should be accessible only to those who implement the classes, so other programmers can’t tamper with the software.

**Now how do we connect algorithms to data structures?**

You will use an algorithm, looking up synonyms in a thesaurus, for example, typically with the data from your data structure, a thesaurus with words arranged alphabetically, for example. I guess you can’t really split them. What I mean to say is that “data structures organize data and algorithms use that organization.”

So this was just an easy-peasy explanation of the basics if you are blubbering like me when a kid asks you what data structures and algorithms are. You need to understand these high-level building blocks as best as you can to start programming your way to success.

I will end with another motivating quote for all you programmers: “I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” – **Linus Torvalds**

You can also read how algorithms are taking over our world and know how important it is to understand them.

If you also go through this wonderful article – you can learn to code by competitive programming. It tells you why you need to learn concepts of data structure and algorithm for better results and to understand the problem quickly.

Just to reiterate, you can’t make a house by just putting one brick over another—you need understand a problem, come up with a feasible solution for it, and know how to implement, and all this without losing sight of the big picture.