Ready to solve a popular DSA problem? We are going to learn this problem called "climbing stairs". Problem Statement You are faced with a staircase that has a certain number of steps, denoted by n. Each time, you can either climb 1 step or 2 steps. The goal is to figure out how many distinct... Continue Reading →

# A Simple Explanation of Rabin-Karp Algorithm For String Search

Introduction If you are new to string search, I would recommend to first read the brute force approach here. Brute force as discussed in the mentioned post has time complexity of O(mn) in worst case. Rabin-Karp also has the worst case time complexity of O(mn), but it has a much better time complexity of O(m... Continue Reading →

# Simple Explanation And Implementation Of Knuth-Morris-Pratt (KMP) Algorithm For String Search

Introduction We have seen brute force approach to string search here. Brute force approach to string search has time complexity of O(n*m). Donald Knuth and Vaughan Pratt, and James H. Morris conceived the algorithm in 1970. KMP algorithm is the first algorithm to have linear time complexity. Problem Statement We will assume text (where we... Continue Reading →

# A beginner guide to Brute Force Algorithm for substring search

Introduction CONTROL + F or COMMAND + F How often do you use above keyboard shortcut? In fact, for most of us, searching a string or substring in a pile of strings/document is involuntarily action with the above key combination. This post will deal with the subject of the substring search. We will quickly define... Continue Reading →

# A complete tutorial on Binary Tree

Introduction Figure 1 shows a Binary Search Tree. This post will start with the motivation of studying BST and gradually move to the related definitions. We will do some hands on coding for simple BST operations and we will end the post by analysing the drawbacks. Where do we use Binary Search Tree? Trees... Continue Reading →

# Depth First Search In Python to print nodes of Graph

Graph Shown above is a simple graph. Let's define the characteristic of the graph: This is a connected graph. Meaning, you can travel from anywhere to anywhere in this graph. Read further here This is an undirected graph. That simply means we don't have any direction sense to the arrow connecting two nodes This is... Continue Reading →

# Network Flows – Maximum Flow

Network flows is a class of problems dealing with directed graphs and the properties of functions defined on the graph. Flow Flow represents any element which does not disappear while traveling through the edges of the directed graph. Flow can be current in the electric network, data packets in case of the computer network and... Continue Reading →

# Binary Heap – Data Structure

Usage In Heapsort In Priority Queue Not the garbage collector storage (as provided by JVM) Definition A binary Heap is an array object. We can view that array object as a near complete binary tree. A binary tree is said to be a complete binary tree when all the nodes except possibly for the leaves... Continue Reading →

# Introduction to Machine Learning Terminology and Perceptron

We talked about introduction to machine learning here. Let's say, we have two armies: red and blue. The black line is the border separating these two armies. The line is curved and it is drawn using visual inspection. But the kings are mad and they demand a straight line, not a curved one. To please... Continue Reading →

# A Tutorial to Understand Decision Tree ID3 Learning Algorithm

Introduction Decision Tree learning is used to approximate discrete valued target functions, in which the learned function is approximated by Decision Tree. To imagine, think of decision tree as if or else rules where each if-else condition leads to certain answer at the end. You might have seen many online games which asks several question and lead... Continue Reading →