An introduction to fundamental data structures and algorithms. Our emphasis is on applications and scientific performance analysis of Java implementations.
- Part I focuses on elementary data structures, sorting, and searching. Topics include array list, linked list, stack/queue, hash table, binary search trees, and heap.
- Part II focuses on graph and three categories of algorithm: Divide and Conquer, Dynamic Programming and Greedy.
The programming prerequisite for the course is familiarity with Java, including loops, arrays, functions, recursion, and objects. We introduce advanced features of Java as necessary (such as generics and iterators). The mathematics prerequisite is high-school algebra. There are eight lectures (120 minutes each). There is one exercise set associated with each lecture. The assignments require that you use the Java programming language. You are welcome to use Java 6, 7, or 8 along with your favorite IDE.