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 took this general assessment about 6 months ago, on Nov. 4, 2019, and I scored relatively well given my background and experience. I essentially completed the two implementation problems and missed a corner case on the third because I thought it would be better to get partial credit on the fourth and final problem, but it was not (see score calculation here). If you work for a company and want a nicer-looking PDF report with the same information, submit your contact info here. My score in the different categories (speed, problem solving, and implementation) largely reflect my TopCoder training for implementation, to get a working solution as fast as possible that satisfies all test cases, so I might have run a few too many tests to check the code and that might have hurt my score. Additionally, I have not been following a coding style standard for my Python code up to this point, because I have been coding solo, but I am looking at improving my code quality using tools like pylint, with info available here. Finally, I had not been working through algorithm interview problems as much as data structure interview problems, because I did not see the "Algorithms" tab on HackerRank until after this test, and practice with more of those kinds of problems would have greatly assisted me with the final problem in this assessment, as the previous score calculation link explains.


Overall, I am satisfied with this score, since it means that I can be considered a "good" coder. A score of 738 places me in about the top third of programmers evaluated with this assessment, and that is significant progress on my part from the beginning of 2019, when I had no idea what algorithms were! You can see how this coding score serves almost as a "credit report" of programming skill, so and how CodeSignal even hired a FICO executive to help them fine-tune this new tool here This assessment was over 6 months ago, and I have improved since then, and I keep working on problems and projects to make myself more attractive to recruiters and companies every day.


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

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.


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!

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!

Let's Connect