We use cookies on this website to make it function correctly and to achieve the purposes illustrated in the cookie policy. By continuing to browse, you agree to the use of cookies. Cookie Policy

Algorithms + Data Structures

Write better code by identifying the correct kind of data structure and algorithm to use for a problem that you’re facing.

Course Overview

Part of the “secret language” of computer programmers, data structures, their associated algorithms, and the time/space complexity of each are often one of the filters you will face in job interviews. Fluently speak this secret language by not only learning the structures and algorithms. More importantly, learn when and how to apply these fundamentals in your day-to-day computer programming. Gain and apply an intuitive understanding of time and space complexity analysis so that you can talk big-O with the best of them.

video poster

How do these two subjects fit together?

When you want to accomplish some form of computation, you express it as an algorithm, a series of steps that generally does something. If that algorithm relies on data to succeed, then that data is normally structured in computer memory in a specific way, as a list, a tree, a graph, an array, a map, or some other structure. Data structures can exist without algorithms; however, without algorithms, maintaining data in a structure is just a waste of effort. This class provides an algorithms-first approach and presents supporting data structures to meet the needs of the algorithm.

How is this different from the widely available classes that already exist?

You will find that most classes are named “Data Structures and Algorithms." The emphasis is on the data structure and, then, the algorithm. This class turns that around and puts algorithms as its primary concern. This problem-focused approach grants you the insight to analyze, evaluate, and create your own algorithms (and needed data structures) to solve problems that you may likely encounter in the real world, as well as in interviews. Break out of linked lists and binary trees to explore how to interact with multidimensional data, how to determine if you can easily solve a problem with a minimum spanning tree, and how to use probabilistic techniques to quickly determine optimal solutions.

Will I learn about XXX algorithm or YYY data structure in this class?

Maybe? The great thing about this class is that it will provide you with an intuitive understanding of the theory and applicability of many different algorithms. These algorithms are used in many modern problems being solved by companies today: distributed search, text processing, social cluster analysis, process control, and compiler optimization.

video poster
Background Image

What you'll learn

Generate hashes, heaps, lists, and trees, evaluate space and time complexity for various data structures, critique sort and search algorithms, and evaluate space and time complexity for various sort and search algorithms.

Background Image

Course Projects

The Seekers is a project to determine the best way to deal with different volumes, velocities, and variability in data sources. The Matchers is a collection of problems that have no good direct way to solve them.

Background Image


You have the ability to proficiently use a third-generation programming language.

Upcoming Courses

March 30th - May 6th

Algorithms + Data Structures

| Live Online


April 19th - May 26th

Algorithms + Data Structures

| Live Online


June 2nd - July 14th (no class July 5th)

Algorithms + Data Structures

| Live Online


Course Design


Energize your brain with complexity analysis and Big-O to determine how well solutions to problems will run given input and output expectations.

  • Identify input types to best solve problems

  • Apply step-by-step analysis to determine algorithmic complexities

Use greedy algorithms to solve problems which are usually easy to understand and maintain. Evolve to using sorting and searching algorithms when greedy algorithms fail due to complexity issues.

  • Identify appropriate sorting algorithms to use to solve problems

  • Apply the correct search for different problem types and data structures

Transcend the simple problems by using graphs as an input type for applicable problems. Apply many different algorithms to measure and discover aspects about graphs to solve interesting problems.

  • Classify problems readily solved with graphs and trees

  • Find shortest paths, find trees, sort, and compare graphs

Continue developing a better understanding of specialized graphs to solve problems that don’t necessarily seem like they’re graph-related.

  • Incorporate advanced graph application techniques to problem solving

  • Optimize resources using bipartite matching

  • Determine maximum flow through a network

Sometimes, problems are so “difficult” to solve, that a computer can’t do it in a reasonable amount of time. You can switch to using heuristics to find reasonable answers in reasonable times.

  • Explain how to build a hash table

  • Use probabilistic heuristics to solve problems feasibly unsolvable through other methods

Trading space complexity for time complexity, you can vastly speed up the performance of certain types of problems. Identify those types of problems and use well-crafted caching to provide incredible boosts in speed to your algorithms.

  • Use dynamic programming to reduce algorithmic time complexity

  • Describe intractability and P vs NP problems

Instructor Spotlight

Background Image

Curtis Schlak, VP, Professional Development

Curtis Schlak’s software development career spans more than two decades in software, energy, finance, legal, and education. He has worked as an individual contributor and has led teams of nearly 200 people. He has worked or consulted at Barclays Capital, Bank of America Merrill Lynch, British Petroleum, CITGO Petroleum, Ernst & Young, and Microsoft. He has led software teams at startups like KickFire and DataCert. His consulting firm leads the training and adoption of Feature-Driven Development in the US. He has created and delivered consumer and enterprise training for hundreds of people through The Iron Yard, Hack Reactor, App Academy, and Galvanize. He has a BS in Mathematics, BA in English, and MS in Computer Science. He is currently working on his PhD in Computer Science.

Background Image

Daniel Billotte, Principal Instructor

Daniel Billotte’s career as a software engineer began in the mid 90’s, as the Internet was coming of age. He’s worked at large companies like Netscape, AOL, and Canon, as well as smaller companies and entrepreneurial ventures of his own. He has also worked extensively in the printing industry at every level from cleaning floors to building a globally deployed print-shop workflow tool. He helped start the first coding bootcamp in Phoenix in 2014. Daniel enjoys frontend web, but his passion is for building scalable backend systems that use cool technologies like neural networks. When he isn’t working or playing with his family, he’s riding his mountain bike, learning DSP/audio programming and audio circuit engineering, or breathing new life into an old truck. Daniel has a BS in Computer Science from Arizona State University.

Our Professional Development Students Work at Great Companies

Many of these companies reimburse tuition for our courses. Please click here for more information.

Hack Reactor alumni work at google
Hack Reactor Professional Development Students work at Airmeet
Hack Reactor Professional Development Students work at Citadel
Hack Reactor Professional Development Students work at Elsevier
Hack Reactor Professional Development Students work at IAC
Hack Reactor Professional Development Students work at Nisum
Hack Reactor Professional Development Students work at Pivotal
Hack Reactor Professional Development Students work at Splunk
Hack Reactor Professional Development Students work at Visa
Hack Reactor Professional Development Students work at Vmware


Our favorite applicant is someone who enjoys learning and participating in a dynamic learning community. We look for learners that are curious and motivated to further their craft. A learner who has grown tired of either unfocused or inefficient courses that have failed to take them to the next level.

Our application process is simple. Your application will help us learn more about you and should only take five minutes to complete. The application includes information about your educational background, programming experience, employment, and motivations for taking this course. We will review your application and either email any follow-up questions or accept you into the course. Once you’re accepted, you’ll sign an enrollment agreement and pay for the course.

Our typical course is six weeks long and consists of two evening classes per week. Our evening classes are 90 minutes long. Classes are recorded in case you are not able to attend them live. You can expect four to six hours per week outside of class for work on prepping for the next class and/or working on focused projects.

Some of our courses require prerequisite skills or knowledge. If applicable, we ask about this in the application process.

Yes, you can. The live classes, homework, and projects are optional. We encourage you to participate in all to get the most out of your investment in the course. To receive a certificate, you must score 70% or higher on the course project(s).

Yes. If your employer reimburses for education or professional development, we will make it easy for them to reimburse your participation in our courses. 

Universities typically only focus on computer science theory. We blend computer science theory with practical programming practices and thought leadership strategies to create more relevant courses. This format has more real-world applications that will help you advance your career.