Skip to content

mikeroyal/Algorithms-and-Data-Structures

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 

Repository files navigation


Algorithms & Data Structures Guide

A guide covering Data Structures and Algorithms such as Neural networks, MLPs, Arrays, Linked Lists, Trees, Hashtables, Stacks, Queues, Heaps, Graphs, Sorting & Searching, and Dynamic programming.

Note: You can easily convert this markdown file to a PDF in VSCode using this handy extension Markdown PDF.


Table of Contents

  1. Algorithms & Data Structures Learning Resources

  2. Algorithms

  3. Algorithmic Complexity Analysis

  4. Data Structures

Algorithms & Data Structures Learning Resources

Back to the Top

Algorithm is a procedure of well-defined, computer implementabled instructions, typically to solve a class of specific problems or to perform a computation task such as data processing, automated reasoning, and machine learning.

Data Structure is a specific way to store and organize data in a computer's memory so that these data can be used efficiently later. Data may be arranged in many different ways, such as the logical or mathematical model for a particular organization of data is termed as a data structure.

VisualGo: Visualising data structures and algorithms through animation

Data Structure & Algorithms Visualizations

Learning Data Structures and Algorithms courses on Coursera

Learning Data Structures and Algorithms courses on Udemy

Learning Data Structures and Algorithms courses on edX

Intro to Data Structures and Algorithms courses on Udacity

Learning Algorithms courses on Khan Academy

Data Structures and Algorithms course from Harvard University

Data Structures and Algorithms course from Standford University(CS 166)

Learning Data Structures and Algorithms on CodeChef

Learning Algorithms and Data Structures courses on Pluralsight

Data structure and algorithms online course on Learnbay.io

Discrete Probability

Mathematical Proofs

Algorithms

Back to the Top

Fuzzy logic is a heuristic approach that allows for more advanced decision-tree processing and better integration with rules-based programming.


Architecture of a Fuzzy Logic System. Source: ResearchGate

Support Vector Machine (SVM) is a supervised machine learning model that uses classification algorithms for two-group classification problems.


Support Vector Machine (SVM). Source:OpenClipArt

Neural networks are a subset of machine learning and are at the heart of deep learning algorithms. The name/structure is inspired by the human brain copying the process that biological neurons/nodes signal to one another.


Neural Networks Toplogies. Source: Fjodor van Veen from Asimov institute.


Deep neural network. Source: IBM

Convolutional Neural Networks (R-CNN) is an object detection algorithm that first segments the image to find potential relevant bounding boxes and then run the detection algorithm to find most probable objects in those bounding boxes.


Convolutional Neural Networks. Source: CS231n

Recurrent neural networks (RNNs) is a type of artificial neural network which uses sequential data or time series data.


Recurrent Neural Networks. Source: Slideteam

Multilayer Perceptrons (MLPs) is multi-layer neural networks composed of multiple layers of perceptrons with a threshold activation.


Multilayer Perceptrons. Source: DeepAI

Random forest is a commonly-used machine learning algorithm, which combines the output of multiple decision trees to reach a single result. A decision tree in a forest cannot be pruned for sampling and therefore, prediction selection. Its ease of use and flexibility have fueled its adoption, as it handles both classification and regression problems.


Random forest. Source: wikimedia

Decision trees are tree-structured models for classification and regression.


*Decision Trees. Source: CMU

Naive Bayes is a machine learning algorithm that is used solved calssification problems. It's based on applying Bayes' theorem with strong independence assumptions between the features.


Bayes' theorem. Source: mathisfun

Graph Algorithms

  • Breadth First Search (BFS)
  • Depth First Search (DFS)
  • Shortest Path from source to all vertices Dijkstra
  • Shortest Path from every vertex to every other vertex Floyd Warshall
  • Minimum Spanning tree Prim
  • Minimum Spanning tree Kruskal
  • Topological Sort
  • Articulation Points (Cut Vertices) in a Graph
  • Bridges in a graph

Searching And Sorting

  • Binary Search
  • Quick Sort
  • Merge Sort
  • Order Statistics
  • KMP algorithm
  • Rabin karp
  • Z’s algorithm
  • String Matching/String Parsing
  • Counting Sort

Dynamic Programming

  • Longest Common Subsequence
  • Longest Increasing Subsequence
  • Edit Distance
  • Minimum Partition
  • Ways to Cover a Distance
  • Longest Path In Matrix
  • Subset Sum Problem
  • Optimal Strategy for a Game
  • 0-1 Knapsack Problem
  • Assembly Line Scheduling

Algorithmic Complexity Analysis

Back to the Top

  • Big O Notation
  • Time Complexity
  • Space Complexity

Order of growth of algorithms specified in Big-O notation. Source: Big-O Cheat Sheet

Complexity of operations on Data Structures. Source: Big-O Cheat Sheet

Complexity of Sorting algorithms. Source: Big-O Cheat Sheet

Data Structures

Back to the Top

Arrays are a series of elements(numbers, booleans, or strings) of the same type placed in phyiscal memory locations that can be individually referenced by adding an index to a unique identifier.

  • Vector is a dynamic array, where the size can be increased when an element is inserted or deleted, with the storage being handled automatically by the container.

Linked Lists is a linear collection of data elements whose order is not given by their physical placement in memory. Instead, elements in a linked list are linked using pointers.

  • Singly Linked List is a type of linked data structure where each node points to the next node in the sequence. It does not have any pointer that points to the previous node.

  • Doubly-Linked List is a type of linked data structure in which each node apart from storing its data has two links. A node consists of three parts: node data, a pointer to the next node in sequence (next pointer), pointer to the previous node (previous pointer).

Trees is a nonlinear data structure unlike arrays, linked lists, stacks and queues which are linear data structures. A tree can be empty with no nodes or in other instances a tree's structure consists of one node called the root and 0 or 1 or more subtrees.

  • Basic Tree
  • Binary Tree
  • Binary Search Tree
  • AVL Tree
  • Red-Black Tree
  • N-ary Tree

Hash Tables are a data structure, much like an array, except you store each value (object) using a key. It is a basic key/value store for mapping known as a hash function.

Stacks is a linear data structure that store data in an order known as the Last In First Out (LIFO) order.

  • LIFO (Last In First Out)
  • FILO (First In Last Out)

Queues is a linear data structure that stores data in an order known as the First In First Out(FIFO) order.

Heaps is a specialized tree-based data structure which is essentially an almost complete tree that satisfies the heap property.

  • Max Heap
  • Min-Heap
  • Binary Heap

Graphs is a data structure that represent relations between pairs of objects. It consists of nodes (known as vertices) that are connected through links (known as edges).

Contribute

  • If would you like to contribute to this guide simply make a Pull Request.

License

Back to the Top

Distributed under the Creative Commons Attribution 4.0 International (CC BY 4.0) Public License.