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 presumes strong programming abilities in any C/C++, Java, Python, Ruby, JavaScript or similar.

Schedule and fees

This course is next scheduled to run in May 2017. Apply now to be considered; exact dates and times will be finalized based on participant availability. Classes will be approximately nine hours per week for three weeks, for a total price of $1,800

San Francisco, California
© 2016 Bradfield School of Computer Science