Problem Solving with Algorithms and Data Structures

We agree with decades of conventional wisdom that familiarity with common algorithms and data structures is one of the most empowering aspects of a computer science education. This is also a great place to train one’s general problem solving abilities, which pays off in every other area of technical study.

It’s tempting to say that we focus on the portions of a traditional algorithms course which we find to be most relevant to software engineers. While true, this does a disservice to the field. Really, it is a rare topic in an undergraduate treatment which is not useful to the practicing software engineer.

Where ours differs from a traditional undergraduate course, however, is in our emphasis on deploying these mental tools. As such we compromise a little on depth of theoretical exploration, and instead emphasize practice in problem solving and working familiarity with the algorithms and data structures covered.

Topics covered

  • Polya’s method for problem solving
  • Analysis (asymptotic complexity or “big O”)
  • Linear structures (arrays, linked lists, stacks, queues, deques, priority queues)
  • Trees, tree traversal algorithms and balanced trees
  • Graphs and graph traversal algorithms
  • Recursion, dynamic programming and backtracking
  • Sorting, searching and the divide and conquer technique
  • Intractability (NP complete problems)


This course assumes confident programming ability in any language.

Schedule and fees

This course is next scheduled to run Wednesdays 6pm-9pm and Saturdays 10am-4pm for three weeks starting Wednesday, 29 March 2017. The total price is $1,800.

San Francisco, California
© 2016 Bradfield School of Computer Science