Want to get started with a career in ML engineering? Here’s how!


While the concept of Machine Learning (ML) dates back to decades ago, it has come to the global spotlight only recently with the upsurge of Data Science and its related concepts like Artificial Intelligence, and Artificial Neural Networks. Today, magnates of the business and IT world such as IBM, Google, Facebook, and Amazon are leveraging ML technology in their products and services to foster innovation. This has created a huge demand for skilled and trained ML professionals both in the business and IT sphere. According to LinkedIn research, today, the number of ML engineers have increased by 9.8 times than it was five years ago.



So, folks, this is the time to make it big as a Machine Learning engineer! But before you do, you must first understand what it takes to make a successful ML engineer.

  1. Develop Coding Skills

Learning to code in a specific programming language is a must for becoming an ML engineer. So, you have to pick one programming language and master it before moving to another programming language. Python is currently one of the most favorite programming languages of developers around the globe. Apart from this, you could also try learning Java, Ruby, C, C++, Perl, and Scala.

  1. Online Courses

Once you master a programming language, you must develop data analysis skills. You have to learn Statistics, data structures and algorithms. Lucky for you that now there are numerous online platforms offering courses on data analysis and statistics. Here are some courses that you could opt for:

  • Intro to Descriptive Statistics (Udacity) – This course focuses on communicating information about datasets.
  • Intro to Inferential Statistics (Udacity) – This course focuses on data set analysis.
  • Getting and Cleaning Data (Johns Hopkins University) – It specializes in training students on how to optimize data sets.

After data exploration, it’s time to dive into the world of Machine Learning. One of the best ways to learn and master the discipline is to enroll in online courses. There are numerous informative and helpful online courses offered by reputed universities as well as trusted online platforms:

  • Feature Engineering for Machine (Udemy)
  • Deep Learning Specialization (Coursera)
  • Cognizance: Machine Learning Course (Coding Ninjas)
  • Machine Learning (Stanford)
  • Learning from Data (Caltech)
  • Practical Machine Learning (Johns Hopkins University)
  1. Get A Certification

While formal education and degrees (graduate/postgraduate in CS or engineering) are necessary, getting relevant certifications or accreditations will provide you an edge over your competitors when you apply for that dream ML job. You can boost your chances of getting hired by choosing among these excellent certification programs:

  • Artificial Intelligence Graduate Certificate (Stanford).
  • Certificate in Machine Learning (University of Washington).
  • A Certification of Professional Achievement in Data Science (Columbia University).
  • CSCI E-81 Machine Learning and Data Mining certification (Harvard).
  1. Get Handsy – Work On Machine Learning Projects

Haven’t you heard, ‘Practice makes a man perfect?’ Machine Learning is no exception to this age-old rule. Working on your own ML projects is a great way to hone your skills and understand both your strengths and weaknesses. You can try out tools such as Scikit-learn, Awesome Machine Learning, and PredictionIO, to explore and create basic ML projects. GitHub is a great place to look for ideas for ML projects.

  1. Take Up Challenges

There are various online platforms that host ML challenges including Kaggle, RAMP, AutoML Challenge, Innoplexus Online Hackathon, and MLflow, to name a few. Make it a point to participate in these challenges and competitions. You will not only learn better but you will also gain experience and become a faster and more focused coder.

  1. Get Hands-On Training With Machine Learning Internships

Although you can learn a great deal from online courses and ML competitions, they aren’t enough to teach you about the business-specific ML skills. This can only be gained through ML internships where you’ll get to solve real business cases with ML tools. Internships will not only help you get the experience you need to get started in the industry, but they will also allow you to understand what kind of approach you need to take for the real world.
These six steps should be enough to transform you from a rookie to an ML pro, provided you are diligent and dedicated towards it. Learning something new is always challenging, however, just remember – “To begin, begin.”

In talk with Stuti!

A journey to success !

Stuti Pandey – 1

Obstacles were never an excuse for achieving the goals

I was an intern while my focus was also to prepare for the placements and I used to get a very little time to study and felt less confident about it but the course material from Coding Ninjas helped me a lot to prepare me for the interviews.

Her amazing experience and what she loved!

The  video lectures by expert faculty were very helpful in terms of topics and the questions that we used to get during the lectures and while solving the assignments. The course content material of Coding Ninjas proved to be very helpful in building up the concepts of different coding problems. Teaching Assistant support was extremely helpful in solving the doubts. In addition the faculty was very supportive and I could come at the center anytime for doubts or any other help.


The course material which included a lot of videos and assignments  helped me a lot to clear interview rounds of many companies and I finally got opportunity  at Schlumberger Pune. I really thank  Coding Ninjas for my success.

Advice to Current Students!

Focus on understanding  concepts from Coding Ninjas  course videos , do all assignments and apart from that check out the geeksforgeeks and interviewbit of that topic. Make a list of what all you have done whenever quick revision is required

How will you introduce Coding Ninjas to your friends?

A great place to build and strengthen your foundation of DS concepts.

Thank you for constant support and guidance !

Dynamic programming and everything you need to know about it


If you are trying to make it big as a coder, you’ve probably been advised by coding Gurus (more times than you can count) that mastering Dynamic Programming (DP) is a must. Don’t cower already, it’s not rocket science! It just needs a little patience and dedication on your part to learn and master Dynamic Programming.


And that’s precisely why we’re here to guide you through the concept of DP!


First, let’s start with the fundamental question.


What Is Dynamic Programming?


Developed by Richard Bellman way back in the 1950s, Dynamic Programming is a combination of computer programming and mathematical optimization aimed to avoid repetitions. Essentially, DP focuses on breaking down an optimization problem into smaller fragments of simpler sub-problems and stores the solution of all the subproblems. Thus, by remembering the partial results of these subproblems, Dynamic Programming can help avoid coders and programmers to avoid repetitions within their code. Unlike the naive approach that takes up a significant amount of time, DP allows you to solve an array of programming problems in O(n2) or O(n3) time.


Still confused? Jonathan Paulson answer will definitely demystify Dynamic Programming for you with this Quora answer.


Now, let’s talk about another crucial aspect of DP – Patterns!


When talking about DP, it is essential that you learn to recognize the common patterns of coding problems so that you can leverage those patterns to solve other similar problems. Let’s take the example of a coin change problem:


You have n types of coin denominations bearing values C1 < C2 < … < Cn (all integers). Assume C(1) = 1 to make changes for any amount of money (M). Create an algorithm to get the minimal number of coins that make change for an amount of money M.

So, what approach should you take in solving this problem? In four simple steps, we’ll show you how!


  1. Problem & Subproblem


When a problem is given to you, first you have to check whether or not it is suitable for dynamic programming. And how do you do that? By seeing if it is possible to break down the problem into smaller subproblems.


If you see the coin problem closely, you’ll find that it is quite similar to Fibonacci. Here, you can see that a subproblem is capable of making changes for a smaller value. So, by determining the minimal number of coins needed for all the values < M (1, 2, 3, … M – 1), we can find the answer for M simply by determining the best possible combination of them. In this light, we find that the solutions for subproblems of this problem can help to find the solution for the primary problem and hence, dynamic programming is worth a shot here.


  1. Identify The Formula


Once you’ve recognized that the problem can be broken down into subproblems, you must now determine how the subproblems can help in solving the primary problem by applying the relevant formula.


For the given coin change problem, let’s assume that F(m) indicates the minimum number of coins required to make M. So, we need to determine how to indicate F(m) using values less than M. Suppose C1 is needed, then F(m) = F(m – C1) + 1 to find out how many coins are required to make [m-C1].


As we do not know which value is exactly required (from C1 to Cn), we must iterate all the values. So, the formula will be as follows:


F(m) = min(F(m – Ci)) + 1, for i = 1 … n


The formula denotes that we need to iterate all the solutions for [m-Ci] to find the minimal value.


  1. Memoization


Memoization is pivotal in DP. Why so? If you merely implement the formula, you will find that to calculate F(m), the code will calculate a bunch of subproblems of F(m – Ci), whereas to calculate F(m – Ci), it will further calculate the sub-subproblem. The chain will continue and hence, the code might end up calculating many subproblems or sub-subproblems more than once. This is where memoization is helpful. Through memoization, you can store results of the subproblems/sub-subproblems so the next time you need to solve those, you can directly use the results.


To save the results of a subproblem, you must create an identifier for it. So, an array memory can be created as [m + 1]  and for the subproblem F(m – Ci), you can store the result to memory [m – Ci] for solving future problems.


  1. Implementation


Implementation becomes easier and more convenient when you break it down into smaller fragments. This allows you to follow the same to solve similar questions. Here’s how you should go about the implementation process:


  • Initialize memoization and define the array memory [m + 1].
  • See if the problem has been solved using the memory. If yes, revert to the result directly.
  • Now, implement the formula and save the result to memory.

While these four steps basically sum up the top-down approach, that is, we solve the primary problem by breaking it down into subproblems, there’s another approach to DP – bottom-up. Unlike the top-down approach, the bottom-up approach doesn’t use recursion but begins with subproblems and moves up towards the primary problem.

So, that’s Dynamic Programming simplified for you! Have any doubts? Drop them in the comments below!


Coding, programming, and the subtle difference between the two


In the world of computer programming, two words are often used interchangeably and almost synonymously – coding and programming. To most non-developers, these two words essentially bear the same connotation, that is, entering a set of instructions into a machine to make it perform certain commands. However, let us break this misconception for you.

Programming and Coding

While coding refers to the process of writing codes in a particular programming language, programming is a broader umbrella that refers to the entire process of feeding information into machines to enable them to perform specific tasks. In this respect, we can think of programming as the main recipe that requires a lot of ingredients and a step-by-step approach. Coding makes up one part of that approach, that is, the initial steps of the programming process.

The Differences


As we said before, coding is the process of writing code by converting one language into another whereas programming denotes the process of designing and developing a functional and executable program that can perform specific task or tasks. Also, coding aims to bridge the gap between humans and machines, programming ensures that the code is perfectly balanced, that is, the inputs (human instructions) and the outputs (machine) are in sync with each other.


Since coding forms the introduction part of programming, coders need to possess basic knowledge of the field. This is not the case with programmers. Programmers are required to possess high-level expertise in working with complex data structures, algorithms, databases along with the knowledge of programming languages like Python, Java, SQL, Ruby, Perl, C, and C++, to name a few.

Complexity Level

Coding is the initial step of programming involving addressing complex queries in a code. Programming, on the other hand, seeks to handle a variety of complex issues and queries. A coder builds a code based on the specific set of instructions he/she is given related to the implementation, debugging, QA, and testing. Thus, a coder’s job is pretty much set according to the instructions. Coding involves writing lines of codes, translating requirements, and implementing these into machine-readable inputs.

A programmer, however, has to create functional and logical programs as well as analyze and fix any possible problems that may ruin the functionality of the code. A programmer has to look for problems even where it may not exist for the aim is to deliver bug-free and efficient code. In this sense, programming can be considered as an advanced level of coding.

Knowing these subtle differences is extremely essential for the tech-savvy generation. If you choose to build a career in coding and programming, it is only natural that you will be expected to know the proper meanings of these concepts.

Now that you know the difference between coding and programming, it’s time to share this knowledge with your friends and family!

A day in the life of a machine learning engineer



Machine Learning is undoubtedly one of the hottest career options in the tech-biz world today. Many aspiring youngsters are taking up machine learning jobs such as that of an ML engineer or an ML architect to become a part of the digital revolution that’s spreading like wildfire throughout the globe. But, have you ever wondered, how does an ML engineer spend an entire day?


That’s what we’re going to show you today – a day in the life of an ML engineer!


Morning – The Beginning Of A Very Busy Day


6-8 AM: Although you may be surprised to hear this, it’s true that most ML engineers take fitness very seriously and hence, their mornings usually start with some basic exercising or hitting the gym followed by a shower. After breakfast, it’s time to head straight to work.


9-10 AM: This is the hour to catch up on the projects and code that had been in operation through the night; checking work emails and checking the day’s task-list on Trello or Todoist or Google keep.


10-12AM: Work calls! It’s time to sit on the desk and get cracking with ML tools and projects. The real work begins with coding or designing a database or learning new things using resourceful tools like Scikit Learn, Spark MLlib, H2O, and the like.


Noon – A Break From Work & Back To Work Again


12 PM: It’s lunchtime! This is the time to catch up with your colleagues, discuss work and life in general while munching on food. On busy days with too much work pressure, you can see ML engineers having lunch at their desk itself while concentrating hard at work.


1 PM: The afternoon time post-lunch is usually reserved for office meetings and client calls to discuss the progress of the ongoing projects, proposed ideas for new projects and products.


2-5 PM: Completing ongoing tasks; writing unit tests, or testing the completed models. Once these are done with, it’s essential to check up on existing models, their metrics, and comparing those metrics to the model baseline. Review requests from the client’s side and do the needful. Continuing with coding.


Evening – Wrapping It All Up


6-8 PM: It’s evening now and this means that all the code requests, database models, and projects have to be wrapped up after incorporating the necessary changes. Nothing should be left hanging halfway.


8 PM: Head back home. Get some rest and maybe cook dinner. If it was a long day at work, probably ordering food from the favorite food joint.


10 PM: Checking emails one last time to see if there are any work-related issues and solving the ones that demand immediate action. Finally, ending a very productive day by dozing off for a good night’s sleep!


So, that’s basically how a Machine Learning engineer spends his day learning and building new things. Interesting, isn’t it?


In talk with Mayank!

In talk with Mayank

Exploring the coding journey!

Learning from a great teacher can never be erased!

I began my coding journey in the first semester by taking foundation course (C++ with Data Structures which was taught by Ankush Singla.

His amazing experience and what he loved!

The quality of course content and problems on the super awesome “CodeZen” helped to ace the coding rounds in various interviews.Teaching Assistant support was amazing as they were available most of the time and we used to get our doubts resolved within few hours. In addition the faculty was very supportive and I could come at the center anytime for doubts or any other help.


I further took the Web Development course which is based on Ruby on Rails because of which I grabbed an internship in Bizongo. The interview rounds covered a lot of questions on Ruby on Rails, Data Structures , Arrays , Link list concepts which I could clear only because of my knowledge I got through my mentors in Coding Ninjas.

Advice to Current Students!

I got a lot of question on Arrays, Link list, Trees. Advice all the students to practice more and more concepts plus code problems on the website itself rather than any other software.

How will you introduce Coding Ninjas to your friends?

An awesome play to start for your coding journey to become a NINJA coder

Thank you for constant support and guidance !

How Open Source Changed The Face Of Businesses And Programming


Everyone in this world is using open source platform in one way or the other, irrespective of whether they realize it or not. Ever since its inception, open source has been a huge hit among software developers as well as businesses. February 2018 marked the 20th Anniversary of the Open Source Initiative (OSI), a movement that was started way back in 1998 by Eric Raymond and Bruce Perens. The aim was to make the source code accessible to all so that developers around the world can tweak and make useful additions to a software to enrich it even further.

Essentially, the open source community is comprised of both professional and amateur developers who enhance, modify, and work on publicly available source code. And businesses can utilize the code through tools such as Github, to build their own products and services. Today, more and more businesses around the world are joining the Open source bandwagon as it helps them save both time and money.

Over the years, the open source platform has made a considerable impact on programming and businesses. In an annual survey conducted Black Duck, it was found that of the 1,300 respondents, nearly 78% agreed to run their business operations (at least partly) on open source software. Here’s how open source is helping enrich programming and businesses:

  1. Viable And Accessible

During the initial years of the OSI, Linux largely remained beyond the understanding of man. It was not very user-friendly, as in, it was pretty difficult to install and work on. Today, however, the situation has changed a lot. After decades of modifications and enhancements, Linux is now much more convenient and easy to use. In fact, the popularity of Linux has escalated so high that the top 500 supercomputers of the world run on Linux.

  1. The ‘Source’ Behind Android’s Power!

Yes, open source is what makes Android so easy to work with. It is based on Linux. Many companies in the market today are leveraging open source software such as Linux or Tizen to build their Android platform. However, while most Android phones are based on open source OS, the end product is a closed source one, that is, it cannot be tweaked or modified.

  1. Run The Cloud!

The popularity of open source has caught on so fast that more and more people are now inclining towards services/products that can be accessed through the Web instead of using local apps for the same. Basically, the websites are loaded on someone’s computer somewhere in the world and open source platform allows users to access such websites. FreeBSD and Linux are a hit for cloud servers that allow others to access web services remotely.

  1. The Web – Made Easy

Today, anyone can have their own website, all thanks to open source. Take WordPress, for instance. WordPress is the backend for many websites – while obtaining a domain name is going to cost you, building a website is essentially free. It is this open source feature that has made WordPress a renowned and trusted name all over the world.

  1. The Baton Continues To Progress Beyond The ‘Code’

Open source has gained such as strong foothold that companies are no longer just using it but are also helping progress it by launching their own open source codes. Reputed names such as Walmart and ExxonMobil are following suit. While Walmart launched an open source cloud management system, ExxonMobil released an open source developer toolkit. Furthermore, magnates of the finance world such as JP Morgan and London Stock Exchange Group have adopted Hyperledger, an open source software that holds the potential to completely transform the share market scenario.

Open source is massive. Practically every software that is a big hit with us today is rooted in open source. Jim Whitehurst, CEO of Red Hat, maintains:

“The future of open source is bright. We are on the cusp of a new wave of innovation that will come about because information is being separated from physical objects thanks to the Internet of Things. Over the next decade, we will see entire industries based on open-source concepts, like the sharing of information and joint innovation, become mainstream.”

So, folks, this is only the beginning for there’s a lot more to come!

Pros and Cons of open source programming languages


We’ve all heard about open source software and open source programming languages at some point in our lives. However, do you know what the term actually means?

“Open Source” basically refers to a platform or product that can be accessed by anyone and everyone. Open-source allows you to access, analyze, and tweak the source code for the purpose of enhancing it. Similarly, an open-source programming language is one that falls within the open-source protocol, that is, it can be accessed and modified by the public. Today, programmers have an array of options when it comes to open-source programming languages. For a programming language to be considered as open-source, it has to fulfill the following criteria:

  • The source code must be accessible by all.
  • The integrity of the source code must be maintained.
  • It should allow free distribution and redistribution.
  • It should allow free distribution of license.
  • Its license should be technology-neutral and should not restrict other software.
  • It should not discriminate between persons/groups and also against any field of endeavor.

Now that we know what an open-source programming language is, let us look at some of the most widely used open-source languages as well as the advantages and disadvantages each brings.

  1. Java

Java is undoubtedly one of the most popular open-source programming languages among programmers. It is a highly class-based and featured object-oriented language. Today, Java forms the core of various web and mobile applications across a wide range of operating systems and devices.


  • Easy to write, compile, and debug.
  • Excellent for developing modular programs and reusable code.
  • It is platform independent, both at the binary and source levels.


  • It is not speed-intensive and hence, can be very time-consuming.
  • It is an interpreted language.
  • Lacks support for low-level programming languages.
  1. Python

Python is a versatile programming language that anyone can master with a little dedication and effort. It was developed by  Guido van Rossum back in the 1980s and is controlled and managed by the Python Software Foundation. It is used by developers around the world as a scripting language allowing them to generate readable and functional code in a short span of time.


  • It comes with readable and simple syntax.
  • It can be interpreted in many operating systems owing to its portability, such as Unix, Windows, and Mac OS, to name a few.
  • It supports both object-oriented and procedure-oriented programming.


  • Lacks pre-packaged solutions.
  • Lacks adequate GUI tools.
  • Not ideal for memory intensive functions.
  1. Ruby

Developed by  Yukihiro Matsumoto in the 90’s, Ruby is an object-oriented programming language that has gained huge traction over the past few years. The best thing about Ruby is its neat, clear, and simple syntax that makes it the ideal programming language for beginners. Today, Ruby along with the Rails framework is being used by reputed names such as Airbnb, GitHub, Basecamp, and Bloomberg.


  • It facilitates easy inheritance of features from standard classes.
  • Offers a clean object hierarchy thereby making metaprogramming very convenient.
  • Comes with a provision of open classes.
  • It allows you to write codes from any line or column.


  • Backed by a relatively small community.
  • Processing can often be quite slow.
  • Lacks regular updates.
  1. PHP

Over the years, PHP has emerged as one of the most developer-friendly open-source programming languages. It is much faster than many other programming languages, and that’s primarily why PHP-based solutions are today being used by developers, entrepreneurs, and SMEs around the globe.


  • Offers cross-platform compatibility. Can run on platforms such as Linux, Windows, Mac OS, and Unix.
  • Comes with pre-defined error reporting constants.
  • Allows the generation of dynamic page content.
  • Is a loosely typed language so you don’t need to explicitly declare the data type of variables.


  • Lacks named parameters.
  • Not ideal for very large projects since it is less modular.
  • The language semantics can only be altered by global configuration parameters that can pose complications during deployment.
  1. Perl

Perl is a mature, stable, and highly feature-rich programming language. It is an excellent choice for scripting and processing large projects. Also, it is backed by a wide community of developers. It runs successfully over a hundred platforms!


  • Excellent file manipulation.
  • Supports cross-platform usage. Thus, codes written for a specific platform can also be run on other platforms with minimal or no modifications.
  • Comes with a library of modules.


  • Can be slower for specific tasks such as scripting.
  • Poor argument handling.
  • Poor usability factor.

To conclude, each language has its distinct benefits and disadvantages. Depending on the kind of project you will be working on, you can choose the open-source programming language that best suits your project requirements.

Happy coding!

How To Prepare For ACM-ICPC?


Considered as the “Olympics of Programming Competitions,” the Association for Computing Machinery – International Collegiate Programming Contest or ACM-ICPC is one of the oldest and most esteemed programming competitions in the world. Every year, more than 2,000 universities spread across eighty countries participate in this contest to win the grand prize of $12,000 and a gold medal awarded by the ACM-ICPC. Apart from this, three runner-up teams receiving the Gold medal are also rewarded with $6,000 and teams that bag the Silver and Bronze medal receive $3,000 and $1,500 respectively.

The ACM-ICPC contest has two rounds, the regional round that is organized and conducted at the local universities of various regions across the world. In India, the Asia Regionals are held at Amritapuri, Chennai, and Kolkata. The regional contest location sites are allotted a ‘slot’ which is the formal invitation to enter the ACM-ICPC World Finals.

Here’s how you should approach the ACM-ICPC preparation!

ACM-ICPC Preparation

The first step in preparing for the ACM-ICPC is to start practicing and competing in Online Judges and contests similar to ICPC. OJs such as CodeChef, TopCoder, Codeforces, Hackerrank, Hackerearth, USACO are excellent online resources to practice and hone your programming skills. Begin by tracking down problems with the most number of submissions, see how people have approached it, and see if you can get to the solution through a different and better perspective.

The next step would be to make a detailed list of the things you have to study. Having a computer science background is highly preferred as you’ll have to deal with a lot of complex data structures and algorithms in the contest.

Programming Language

There are many programming languages to choose from including C++, Java, Ruby, Python, Perl, and so on. Pick one programming language that you think will be the best match for you and master it through and through. Once you master a programming language, you’ll find it much easier to learn other programming languages.

Data Structures

Mastering data structures is one of the prerequisites for participating in any competitive programming contest. Thus, you are expected to be well-versed with the fundamental data structures such as arrays, stacks, queues, strings, heap, and hash, to name a few. Once you’ve got a solid grasp on these basic data structures, it’s time to move on to more advanced data structures like Fenwick Tree, K-D Tree, Segment Tree, Interval Tree, and so on.

Sorting & Searching

After data structures, you should focus on learning sorting and searching functions like quick sort, merge sort, binary search, and order statistics. While learning the basic concepts of sorting and searching functions are fine, you must also familiarize yourself with as many library functions as possible.


Once you learn how to work with strings, you’ll find it extremely interesting. Strings are a must-learn as they are highly used in competitive programming contests. Try to learn how to manipulate string functions such as Z’s algorithm, KMP algorithm, Rabin Karp, and Aho Corasick string matching, to name a few. If you can learn library functions for strings, even better!


Just like data structures, algorithms are also very important for competitive programming. Algorithms can be classified under the following categories:

Dynamic Programming algorithms – Longest Common Subsequence, Longest Increasing Subsequence, Minimum Partition, Longest Path In Matrix, Subset Sum Problem, 0-1 Knapsack Problem, and Assembly Line Scheduling.

  • Graph algorithms – Breadth First Search (BFS), Depth First Search (DFS), Dijkstra, Floyd Warshall, Prim, Kruskal, Johnson’s algorithm, Topological Sort, and Bridges in a graph.
  • Greedy algorithms – Activity Selection Problem, Huffman Coding, Huffman Decoding, Egyptian Fraction, Job Sequencing Problem, Water Connection Problem, and Fitting Shelves Problem.
  • Geometric algorithms – Convex Hull, Graham Scan, Line Intersection, Matrix Exponentiation, Bentley Ottmann algorithm, Rotating Calipers Technique, Closest pair of points, and Voronoi Diagrams of n points using Fortune’s algorithm.
  • Network Flow algorithms – Maxflow Ford Fulkerson algorithm, Edmond Karp Implementation, Min-cut, Stable Marriage Problem, Dinic’s Algorithm, Cycle Cancelling algorithm, Stoer Wagner min-cut algorithm, and Hopcroft–Karp Algorithm.


When it comes to programming, one must have a solid foundation in Mathematics and Statistics since a lot of programming problems are rooted in these two. Thus, you must learn basic math concepts such as number theory, linear algebra, discrete mathematics and combinatorics, probability theory, game theory, graph theory, numerical analysis, and calculus. Also, be well-versed with principles like Induction, Pigeon Hole, Inclusion-Exclusion, and the like. Moving on to Statistics, make sure that you learn concepts like mean, median, variance, and so on.

Mastering the above-mentioned concepts should be enough for you to make it through the regional round of the ACM-ICPC, and once that’s done, there’s nothing to stop you from emerging as a winner in this prestigious competition. The key to success is dedication, commitment, and practice. During the learning process, try to connect with mentors and peers on the various OJ platforms. Usually, such communities are very active and can help you with helpful feedback if you are ever stuck somewhere. Be confident, and begin!

Till then, happy coding!

Getting Started With And Mastering The Basics Of Data Structures


Data Structures is one of the foundation courses in Computer Science. Essentially, it includes concepts such as stacks, queues, graphs, algorithm analysis, sorting algorithms, linked lists, and set implementations (binary search trees and hash tables). While it is true that data structures and algorithms are difficult to master, it is not an impossible feat. The key to learning these tricky concepts is to follow the right approach, and that’s what we’re going to show you in this post.

  1. Strengthen Your Fundamentals

The foremost requirement for mastering data structures and algorithms is a solid foundation of the fundamental concepts of Mathematics, Computer Architecture, and of course Data Structures.  

  • Maths – A concrete mathematical base is essential to learn algorithms. Try to cover Math concepts from different areas such as set theory, regular expressions, linear equations, finite-state machines, matrix multiplication, and basic combinatorial principles like pigeonhole, permutations, and combinations.
  • Primary Data Structures – Strengthen your knowledge about the primary data structure concepts like arrays, hash tables, graphs, stacks, queues, heaps, linked lists, and binary trees.
  • Computer Architecture – To be able to work with data structures and algorithms you need to have basic knowledge of computer arithmetic, boolean algebra, floating-point representation, cache design, and digital logic design. If you are well-versed in programming languages such as C, C++, Python, Java, and Ruby, you’ll have the edge over your competitors.
  1. Learn To Visualize Data Structures

To become a great coder, one must possess the ability to visualize different data structures. You need to picture how a data structure will look like, how you can implement it within your code, and also how it is organized in your computer ’s memory as well as in the abstract. To visualize data structures, you can pen down your thought pattern on paper. As you gradually master visualization, you’ll find it much easier to solve all kinds of problems, be it simple ones like stacks or be it self-balancing trees.

  1. Dive Into Algorithms

Once you’ve learned about the fundamental concepts of data structures, it’s time to leap into algorithms. An excellent way to start would be to learn Big-O notation as it would help you understand how to classify algorithms based on their running time and space requirements. Books like Introduction to Algorithms, and Algorithm Design Manual are great learning options.

As you learn more about algorithms, you should start implementing algorithms in your codes and learn about their running times in real-time. You could try implementing Euclid’s algorithm, Binary search, Binary tree traversals, Dijkstra’s shortest path, Min & max heaps, to name a few. Platforms such as HackerRank, LeetCode, CodeChef, and  Coderbyte are excellent for practicing coding and sharpen your coding skills.

  1. Learn Dynamic Programming

If you wish to master data structures and algorithms, dynamic programming is a must. It is a technique of solving complicated problems by breaking them down into smaller fragments of “subproblems.” These subproblems are then solved at once and their solutions are stored for future reference. Thus, in future if similar problems occur, you don’t need to solve it again from scratch; instead, you can refer to the previous solutions and save both time and effort.

So, there, you have it – your stepwise guide to approaching and mastering data structures and algorithms. If you follow these four steps diligently and with dedicated passion, you can surely master data structures in a matter of few months. And, if you feel stuck anywhere along your journey, don’t forget to check us out at CodingNinjas.in,

Happy learning!