# Need of Data Structures and Algorithms for Deep Learning and Machine Learning

Deep Learning is a field that is heavily based on Mathematics and you need to have a good understanding of Data Structures and Algorithms to solve the mathematical problems optimally. Data Structures and Algorithms can be used to determine how a problem is represented internally or how the actual storage pattern works & what is happening under the hood for a problem.

*What knowledge of Data Structures and Algorithms is required in the field of Deep Learning and Why is it required?*

### 1. Algorithms *(Most Important)*

**1.1 Dynamic Programming Algorithms (DP): **

The dynamic programming concept helps to explore every possibility and subsequently responsible to choose one aspect which is most expected at each step of the computation. In a genetic algorithm, the reinforcement learning algorithm uses the concept of dynamic programming. Generative models, specifically the Hidden Markov Model make use of the Viterbi Algorithm which is also based on dynamic programming.

**1.2 Randomized and Sub-linear Algorithm:**

These algorithms are helpful in Stochastic Optimization, Randomized low-rank Matrix Approximation, Dropout for deep learning, Randomized reduction for regression which are the crucial topics of the Deep Learning discipline while sub-linear optimization problems arise in deep learning, such as training linear classifiers and finding minimum enclosing balls.

**1.3 More algorithms: **

- Gradient/ Stochastic Algorithms
- Primal-Dual Methods

### 2. Data Structures* (Most Important)*

**2.1 Linked Lists:**

Insertion and deletion are constant-time operations in the linked list if the node is known for which such operation needs to be done. So, linked lists can be used for the same application as in dynamic arrays as array requires shifting of elements if the new element is inserted at the start or the middle and that’s O(N) time complexity which is costly, hence linked list can be considered as a perfect cheaper option since it can also be converted to arrays.

**2.2 Binary Trees and Balanced Binary Trees:**

As binary trees are sorted, insertion and deletion can be done in O(log N) time complexity and like the concept on linked lists mentioned above – a binary tree can also be transformed into an array. Now coming to worst-case when data is laid out linearly insertion is O(N) and various transformation technique needs to be applied to make the tree more balanced. Moreover, the NN algorithm in Deep Learning requires the knowledge of the k-dimensional tree which uses binary search tree concepts.

**2.3 Heap Data Structure:**

This Data Structure is somehow similar to trees but it’s based on vertical ordering, unlike trees. Though, the same application can be applied to be in use with Heap data structure as that was applied in the case with trees above but with a different approach. Also, unlike trees, most of the heaps are stored in an array with the relationships between elements only implicit.

**2.4 Dynamic Arrays: **

A very important topic when encountering Linear Algebra, to be specific it is required for Matrix Arithmetic where a person encounters One-dimensional, Two-dimensional, or even three or four Dimensional arrays. Additionally, a good grasp of Python NumPy is required if working with Python as the main programming language for implementing Deep Learning algorithms.

**2.5 Stack Data Structure:**

Based on the concept of “Last In First Out”, most libraries in Deep Learning uses recursive control language for generalizing binary classification which can be implemented by a stack. Also, stacks are quite easy to learn, and having a good grasp can help in many computer science aspects as well such as parsing grammar, etc.

**2.6 Queue Data Structure:**

It is defined as “first-in, first-out” and its approach is used in predicting a Queuing scenario, where a histogram of the people waiting in the queue vs Probability density can be drawn from the given data set. The same can be applied for recording the split time of a car in an F1 racing where there are queues of cars enter the finish line and the queue concept can be applied here to record the split time of each car passing by and also draw the corresponding histogram from the given data sets.

**2.7 Set: **

The set data structure is very useful as mathematics associated with Deep Learning mainly is based on dealing with datasets, so this data structure is very helpful for a long career in Deep Learning. Moreover, Python has a set method that is very useful and much preferred.

**2.8 Hashing: **

It’s a data indexing method that can be applied to reduce the computational overhead for Deep Learning. An optimal hash function is used to convert the datasets into an organizable small number called hashes and also hashing is of course heavily used in information storage and retrieval contexts. Hashing was one of the key methodologies for handling big data well before “big data” was evenly a widely used term and it shows the ability of hashing.

**2.9 Graphs:**

This data structure has a huge influence in the field of Machine learning. For example in Link prediction, to predict missing edges that are most likely to be formed in the future or predict missing relations between entities in a knowledge graph. Hence, you’re required to have a proficiency with the Graph data structure for Deep Learning or Machine Learning.

**References:**