Course Info

Basic Information

  • Class Meeting: Lecture 3:30-4:45 pm Mondays & Wednesdays in Griffith Theater. Discussion Fridays at varying times and places, see Dukehub. NOTE – classes will be virtual through Friday, 1/14. Zoom access through Sakai.
  • Instructor: Professor Brandon Fain
  • Staff Teaching Associate: Kate O’Hanlon
  • Teaching Assistants: See the team here

Description

In this course, you will learn how to analyze, use, and design data structures and algorithms in an object-oriented language (Java) to solve computational problems. Emphasis on abstraction including interfaces and abstract data types for lists, trees, sets, tables/maps, and graphs. Implementation and evaluation of programming techniques including recursion. Intuitive and rigorous analysis of algorithms.

Course Goals

At the end of the course, students should be able to:

  • Given a problem statement & a real data source, design, develop, debug, and test a Java program that uses appropriate standard libraries to efficiently solve the problem.
  • Write programs that effectively implement and use data structures such as: arrays, maps, linked lists, stacks, queues, trees, and graphs.
  • Evaluate the time and space complexity of iterative and recursively-defined algorithms using empirical and mathematical analysis.

Prerequisites

You should have introductory programming experience at the level of Computer Science 101, Engineering 103L, or equivalent. Prior experience specifically with the Java programming language is helpful but not necessary.