Data Structures and Algorithms

  11-12 graders

  Credits awarded on transcript  

  Pre-calculus completed with B- or better

  UC A-G approved for [C] Mathematics credits

  2 hours per day (summer)  

  8-10 students per class

  4 days per week 2, 4, or 6 weeks

  649 per student, per week  

  Self paced instructor-guided  

  Online community

  Office hours on-demand

  1669 per student, per semester  

  90 minutes per class

  4-8 students per class

  Twice per week over 36 weeks

  1669 per student, per semester  

The Data Structures and Algorithms course helps students build their understanding of the basics of data structures and how algorithms are implemented in high-level programming languages. We will explore common algorithms to the practice problems programmers face every day. These practical applications include sorting and searching, divide and conquer, greedy algorithms, and dynamic programming. A good algorithm usually comes together with a set of good data structures that allow the algorithm to manipulate the data efficiently. This course goes deeper into the theory about how to break a large problem into pieces and solve them recursively.

This course provides students with practice problems that will allow them to solidify their understanding of the new data structures and algorithms. During every unit students will be given challenges where they need to deconstruct a series of open-ended problems into smaller components (inputs, outputs, series of functions). Students will also get a chance to build larger programs through projects that leverage the new ideas and methods that they learn in each unit. By the end of the course students will be able to identify which data structure and algorithm best fits their programming needs.

This is one of the most advanced courses at 2Sigma School, and students are required to have taken an advanced programming course such as AP Computer Science A, or Advanced Computer Science with Python before enrolling in this course. It is also recommended that students have completed Precalculus as there are many connections to math problem solving throughout the course.

   University of California A-G approved for [C] Mathematics credits.      NCAA Approved.

Course Outline

    hide details
  1. Why data structures?
    There are numerous measures of code quality, but one that shows up more and more is code efficiency. Data is a broad term that refers to all types of information and is present in every program. In this unit students will learn how data structures can help write efficient code and their relationship to the processing logic known as algorithms.
  2. Analysis of Algorithms
    An algorithm refers to the set of instructions given to a computer to achieve a particular task. In this unit we will explore the different ways to measure the performance of algorithms. This includes time complexity, space complexity, asymptotic analysis and notation methods.
  3. Recursion
    Recursion is the process of defining a problem, or the solution to the problem, in terms of a simpler version of itself. This unintuitive algorithm is often one of the most efficient ways to solve complex problems. In this unit students will learn how recursion works, when it helps them and why it can be a powerful abstraction.
  4. Searching and Sorting Algorithms
    Searching and sorting are two of the most important ideas in computer science that underlies entire areas of the field and current research. Students will learn how to define a search space, find a solution within the space, and understand time and resource complexity for various search and sort algorithms.
  5. Node-Based Data Structures
    Students will learn how data structures such as Linked Lists address the limitations of fixed memory structures such as arrays and different variants of linked lists that are well-suited to the domain, from single-linked, double-linked, to circular lists. Students will write algorithms to manipulate nodes within these lists.
  6. Stacks, Queues, and DEques
    Students will learn simple abstractions of stacks, queues, and double-ended queues that facilitate operations such as last-in-first-out and first-in-first-out. These structures are foundational in how machine instructions and operating systems operate.
  7. Trees, Binary Trees, Binary Search Trees
    Trees are data structures that make it possible to represent data that grows exponentially. Students will learn common types of trees and how arranging data in trees can help provide efficient lookup operations for large data sets.
  8. Priority Queues, Heaps, and Graphs
    Students will learn data structures that form the cornerstone of advanced optimization use cases in most computational fields. In addition to learning basic properties and operations of these graphs, priority queues, and heaps, students will learn some key optimization algorithms that are enabled by these data structures.
  9. Capstone Project
    In the final unit students will put all of their data structures and algorithms knowledge into action. They will identify a problem area of interest that can be solved effectively and efficiently using data structures and algorithms covered in this course. Students will build a large scale programming project from scratch that will serve as their portfolio as part of this capstone project.

Summer of Code
    see detailed summer schedule

To take any of our courses, students must be familiar with opening a browser, navigating to a website, and joining a Zoom meeting.

Students must have a quiet place to study and participate in the class for the duration of the class. Some students may prefer a headset to isolate any background noise and help them focus in class.

Most course lectures and content may be viewed on mobile devices but programming assignments and certain quizzes require a desktop or laptop computer.

Students are required to have their camera on at all times during the class, unless they have an explicit exception approved by their parent or legal guardian.

Our technology requirements are similar to that of most Online classes.

A desktop or laptop computer running Windows (PC), Mac OS (Mac), or Chrome OS (Chromebook).
Students must be able to run a Zoom Client.
A working microphone, speaker, webcam, and an external mouse.
A high-speed internet connection with at least 15mbps download speed (check your Internet speed).

This course includes several timed tests where you will be asked to complete a given number of questions within a 1-3 hour time limit. These tests are designed to keep you competitively prepared but you can take them as often as you like. We do not proctor these exams, neither do we require that you install special lockdown browser.

In today's environment, when students have access to multiple devices, most attempts to avoid cheating in online exams are symbolic. Our exams are meant to encourage you to learn and push yourself using an honor system.

We do assign a grade at the end of the year based on a number of criteria which includes class participation, completion of assignments, and performance in the tests. We do not reveal the exact formula to minimize students' incentive to optimize for a higher grade.

We believe that your grade in the course should reflect how well you have learnt the skills, and a couple of timed-tests, while traditional, aren't the best way to evaluate your learning.