Algorithms and Data


Udacity Intro to Data Structures and Algorithms

This Intro to Data Structures and Algorithms course, presented by Google and Udacity, was not a requirement for any certificates or coursework that I have done so far, but is a requirement for successfully passing the technical part of most CS-related job interviews. I wish that I had known some of this sooner, because it is interesting and useful for designing and improving certain core components of software, like runtimes, search speeds, etc.


This course was a good introduction to a lot of the major data structures, algorithms, and time/space complexities that someone would see in technical interviews, but there is still a lot more to learn! The course walks the student through basic search, sort, hash, tree, and graph algorithms, and mentions NP-hard problems at the end.


My code base consisting of exercises from this course are available in my GitHub repo here.

TopCoder Repo

TopCoder is a competitive coding website which also offers freelance work from companies that may not have enough of a workload to hire a full-time developer or would simply prefer not to.


Fortunately, their arena applet contains problems from all past competitions, so it is a good place to see a lot of computer "puzzles" with different difficulties and complexities. They have two divisions (I and II), and about three problem point-levels (250-350, 400-600, 1000+) so you can always find something at your current problem-solving level to work on. The scoring for each problem takes time into account, and it has really helped me improve both my speed and accuracy for code quizzes, as well as my understanding of different computer problems and concepts.


My code base of solutions to problems from topCoder are available in my GitHub repo here.

HackerRank is a website that allows users to practice code problems very similar to those presented in technical interviews. The problems have three difficulties (easy, medium, and hard), and different point values that usually correspond to the complexity of the answer (more complicated problems give more points). Each user gets full points for solving these data structure and algorithm problems correctly, with partial points given for solutions that work for some but not all of the test cases. Users gain "badges" representing how many points they have in a given category of problems, and these can be for general "problem solving" skills or more specific language skills (e.g. SQL, Linux scripts, Python language, etc.). I have been approaching a lot of their problems almost as a game, and feel like the questions are good representations of real interview questions.


My code base of solutions to problems from HackerRank are available in my GitHub repo here. Please note that not all the problem solutions are complete!

HackerRank now grants digital certificates upon passing assessment tests, as part of a recent update! I have passed all the certification exams on the website other than the React exam, because I am currently learning Angular as my first frontend JS framework - although I am planning on learning React in the near future. This particular certificate was granted for passing an intermediate problem solving test, which would be similar to the level of difficulty of most technical interview problems. Each test has a time limit of an hour and a half, and is usually a couple of coding questions that are assessed against a number of test cases, including a few corner cases. These certifications are all on my HackerRank profile (that can be viewed by clicking the link or HackerRank symbol in the above section, or by clicking here), but I thought that it would be nice to showcase one of them here along with the other algorithms certificates.


My code base of solutions to problems from HackerRank are available in my GitHub repo here. Please note that not all the problem solutions are complete!

CodeSignal offers different coding assessments to employers, making it quick and easy for them to perform technical screenings before talking to job seekers. I have been working on these problems since 2018, and find they are great practice for technical interview screenings because there are sample questions and guides to questions pulled directly from top tech company interviews.


There are also problems that represent work that software engineers perform on a daily basis at different companies, called Company Challenges, and completing more of these can help demonstrate practical problem solving for real-world problems, and may help with getting recruited by different companies.


Finally, the problems can become fun and educational after the initial learning curve is achieved, because one of the problem sets is called an "Arcade" and CodeSignal does a good job gamifying the problems, which are almost like puzzles or riddles after a certain point. There is a progression to the Arcade, with the problem sets broken up by "worlds" (which are general topics, like "Introduction" or "Python"), and then levels within the worlds that have problems from the same sub-topics (like "Lists" or "Nested Loops"), with the earlier problems building towards the later problems, which are generally larger and more complex.


My code base of solutions to some problems from CodeSignal are available in my GitHub repo here. Please note that not all the problem solutions are complete!

LeetCode offers different coding assessments to employers, making it quick and easy for them to perform technical screenings before talking to job seekers. I joined LC a while back, but have recently started working on these problems more consistently to patch gaps in my understanding of Data Structures and Algorithms. I have already found that I need to work on 1-D and 2-D dynamic programming (DP) style problems to prepare for mid to senior level software developer interviews. The gamification aspect to LC, as well as the great dashboard for tracking progress, have really made analyzing gaps and working on them less effort and more enjoyable than usual.


Additionally, LeetCode hosts frequent code contests (weekly and bi-weekly), with Elo ratings given (similar to chess player ratings) for data structure and algorithms proficiency. These contests are often formatted similar to a whiteboard interview (multiple questions/optimizations, hard time limit), and are good prep for working on these kinds of problems under time pressure. I personally used my first couple of contests to gauge my "starting" level, get a better understanding of the contest structure and format, and see what would take me to the next level in these competitions. They are free and open to anyone with a LC account anywhere in the world, so the competition can be stiff given the international nature of these contests. They tend to be on the more informal side of coding competitions, and are considered "Division II" in the competitive programming world - so they offer a good opportunity to practice and level up!


Algorithmic Toolbox

Coursera is an online education website that specializes in offering academic-style courses and certificates to the general public. Many universities and other academic institutions create coursework for this online format, and I feel like it is a nice, self-paced way to learn online.


I enrolled in the Algorithmic Toolbox course offered by UC San Diego and the National Research University Higher School of Economics as a way to learn more about algorithms and algorithm design. This course is the first in the 6-course Data Structures and Algorithms specialization available on Coursera, a "micro-masters" program according to UCSD's website. You can even take this course for graduate credit through edX (the credit applies for UCSD's graduate school), so it is essentially a graduate course in algorithms and data structures.


The Algorithmic Toolbox course covers the basics of algorithms and runtime complexities, repeatedly demonstrating why more efficient algorithms are useful. The assignments consisted of code submissions that needed to perform accurately and quickly to pass. The problem-solving methods taught to help design effective algorithms included divide-and-conquer, greedy algorithms, and dynamic programming, which was good for me personally to see, because I had not learned much about these problem-solving methods from the Udacity and Google's Intro to Data Structures and Algorithms, which introduced other topics like trees and graphs instead.


My code base for this certificate is private, because otherwise it would be too easy for my certificate to become yours, too!

Data Structures

Coursera is an online education website that specializes in offering academic-style courses and certificates to the general public. Many universities and other academic institutions create coursework for this online format, and I feel like it is a nice, self-paced way to learn online.


I enrolled in the Data Structures course offered by UC San Diego and the National Research University Higher School of Economics as a way to learn more about data structures and algorithm design. This course is the second in the 6-course Data Structures and Algorithms specialization available on Coursera, a "micro-masters" program according to UCSD's website. You can even take this course for graduate credit through edX (the credit applies for UCSD's graduate school), so it is essentially a graduate course in algorithms and data structures.


The Data Structures course covers the basics of data structures used when implementing operating systems and different services, which are mostly "hidden" from a top-level view and end users. The assignments consisted of code submissions that needed to perform accurately and quickly to pass. The data structures taught include linked lists, arrays, stacks, queues, hash sets, hash maps, heaps, binary search trees, and introduced some more advanced data structures like AVL trees and splay trees. These data structures form the foundation for many algorithms, and are important for interviews and data science projects.


My code base for this certificate is private, because otherwise it would be too easy for my certificate to become yours, too!

Divide and Conquer, Searching and Sorting, and Randomized Algorithms

Coursera is an online education website that specializes in offering academic-style courses and certificates to the general public. Many universities and other academic institutions create coursework for this online format, and I feel like it is a nice, self-paced way to learn online.


I enrolled in the Divide and Conquer, Searching and Sorting, and Randomized Algorithms course offered by Stanford as a way to learn more about algorithms and algorithm design. This course is the first in the 4-course Algorithms specialization available on Coursera, which is equivalent to a Stanford computer science course offered to sophomores, juniors, and seniors within the school, and is ample preparation for graduate study of algorithms.


The Divide and Conquer, Searching and Sorting, and Randomized Algorithms course covers the basics of divide and conquer algorithms and runtime complexities, using Mergesort and Quicksort as examples of divide and conquer algorithms, among others. The runtime complexities were analyzed using both recursion trees and the Master Method, with less intuitive runtimes for problems like the upgraded Karatsuba multiplication and Strassen's matrix multiplication method getting generated in a fairly straightforward manner from the application of the Master Method. The assignments consisted of conceptual quizzes to test and expand on the concepts covered in the (extensive) lectures, as well as "coding" problems that required specific answers, usually numerical values, that could only reasonably be generated by code that correctly implements an algorithm discussed in the lecture. The lectures were world-class, since they are essentially the same as the ones given at Stanford in their CS school, which departed from the usual lectures in MOOCs that involve shorter, less rigorous explanations and analysis of the topics. The course also introduced some practical applications of algorithms, like how a popular service like Netflix or Youtube could "count inversions" to derive how numerically similar two lists (of videos, preferences, requirements, etc.) are and suggest videos that people with similar tastes also liked or at least watched. I did like getting more experience with recursion through the different divide-and-conquer problems, because those were initially a struggle for me to understand and get working correctly.


My code base for this certificate is private, because otherwise it would be too easy for my certificate to become yours, too!

Graph Search, Shortest Paths, and Data Structures

Coursera is an online education website that specializes in offering academic-style courses and certificates to the general public. Many universities and other academic institutions create coursework for this online format, and I feel like it is a nice, self-paced way to learn online.


I enrolled in the Graph Search, Shortest Paths, and Data Structures course offered by Stanford as a way to learn more about algorithms and algorithm design. This course is the second in the 4-course Algorithms specialization available on Coursera, which is equivalent to a Stanford computer science course offered to sophomores, juniors, and seniors within the school, and is ample preparation for graduate study of algorithms.


The Graph Search, Shortest Paths, and Data Structures course covers the basics of graphs, their applications, and search and shortest path algorithms that can be used on them to inform someone of their details. It also explained heaps and binary trees, including the basics of red-black trees and reasons balanced trees are useful, and touched on the basics of hash maps and Bloom filters and what properties to look for when designing hash functions for an application. The assignments consisted of conceptual quizzes to test and expand on the concepts covered in the (extensive) lectures, as well as "coding" problems that required specific answers, usually numerical values, that could only reasonably be generated by code that correctly implements an algorithm discussed in the lecture. The lectures were world-class, since they are essentially the same as the ones given at Stanford in their CS school, which departed from the usual lectures in MOOCs that involve shorter, less rigorous explanations and analysis of the topics. The course also introduced some practical applications of algorithms, like how a graph search could be used to illuminate the entire web graph, showing the basic structure of the world wide web. Hash maps are one of the most commonly used data structures due to their speed and relative ease of implementation. The professor mentioned the strongly connected components (SCC) coding assignment was the most difficult in this course, but it was nice to see it to get more experience coding and implementing complex algorithms, and the Kosaraju algorithm itself is useful for "zooming out" on graphs by looking at only distinct SCCs, which could simplify a graph and help with understanding a complicated graph's structure better.


My code base for this certificate is private, because otherwise it would be too easy for my certificate to become yours, too!

Data Structures and Software Design

edX is an online education website that specializes in offering academic-style courses and certificates to the general public. Many universities and other academic institutions create coursework for this online format, and I feel like it is a nice, self-paced way to learn online.


I enrolled in the Data Structures and Software Design course offered by the University of Pennsylvania as a way to learn more about data structures available as part of the Java programming language. This course is the second in the 4-course Computer Science Essentials for Software Development specialization available on edX, which provides an introduction to the Java language and the basics of web development.


The Data Structures and Software Design course covers basic and advanced data structures and their implementation and uses within the Java language. For example, students learn about the higher-level interfaces like Set and List and how they concretely work with specific classes like HashSets and LinkedLists. The course builds on these basic data structures to explain more advanced data structures like trees, treesets, and graphs (which are comprised of linkedlists and sets). Some basic algorithms using graphs and trees are then provided, such as BFS and DFS graph traversals, and validating Hamiltonian paths.

The course then turns to general software design principles that are used in the industry to make code modular, functional, readable, and minimal. This part of the course focuses on more abstract software quality and design paradigms like functional independence, consistency, changeability, maintainability, etc. Software is considered "good" not only because it works as specified, but also because it is easy to understand, maintain, and change. The assignments for this part of the course include UML-based systems design and implementation, as well as designing software from specifications/requirements.


My code base for this certificate is private, because otherwise it would be too easy for my certificate to become yours, too!

Triplebyte Engineering Certificate

Triplebyte is an online job board that has features for both job candidates and companies looking to fill open positions. As a potential job candidate, I went through their screening process a couple of years ago, and only recently (Summer 2022) went back to the website to retake some prescreening technical tests and see how my scores changed between 2020 and now.


However, the original tests that I had taken before were no longer available - they revamped their website, so I tried some of the new tests that they offered, which tested the same computer science topics but are not calibrated the same way. The results have shown marked improvement so far - I have gone up about a level on each of the tests I have received scores for (some of the tests do not have enough data yet to give a valid score). I was also able to take some new tests for cybersecurity, machine learning, data science, and Java that used skills I have developed in the past couple of years using resources like TryHackMe, Kaggle, and my current position at SandTech Solutions.


I was particularly excited to see that their test for Algorithms and Data Structures ranked my current skill at those topics at "Advanced" - a level expected for a senior engineer. It really demonstrates that my technical interview preparation using online courses (like those from Coursera and edX) and online practice problem sets (like those from HackerRank and CodeSignal) has worked splendidly!


The results from the remaining tests also show me what topics I can still improve on, so I can become proficient (at least) in those areas in the future. On each test results page, additional resources are always listed that can help you improve your knowledge about the particular area tested.


Onward and upward!

Project Euler Level

Project Euler is a series of mathematical problems that mostly require computer science and programming skills (e.g. discrete math, data structures, algorithmic runtime) to solve. The website has been around since 2001, and there have been over 800 problems published to date, with about one problem added per week during the academic year. The problems are fairly difficult, and solving easier problems allows a user to learn techniques to approach more difficult problems. The problems are intended to be "fun and recreational," almost like crossword puzzles or sudokus that help you learn and improve math and programming.


"Project Euler exists to encourage, challenge, and develop the skills and enjoyment of anyone with an interest in the fascinating world of mathematics."

Let's Connect