There are two sides of a program: data structures, which are used to represent data, and algorithms. While entry-level programmers focus on learning programming languages, today’s employers seek professionals who know how to program with high reliability, and with efficiency, in terms of resource and performance. The way you represent a program’s data is as central to program design as the algorithm. This course focuses on the use of efficient algorithms with powerful data structures in the Java language—and offers the skills you need to stand out.
This course covers data structures such as dynamic array, dynamic string, long numbers, lists, heap, hash, trees and graphs. You will learn to create objects from scratch using object-oriented Java programming concepts, and then build bigger objects using the objects that have already been built and tested. You will write algorithms on these objects using techniques such as recursion, greedy, divide and conquer, back tracking and dynamic programming. The course discusses algorithms such as searching and sorting, union find problems, knapsack problems and NP complete problems. You will also learn to compute the worst case complexity of the algorithms in terms of time and space in order to choose the best techniques, and to ensure that the objects scale with arbitrarily sized inputs.
The course emphasizes common problems and implementation details in Java and does not cover advanced Java features. It provides ample examples and testing of codes. Many of the problems solved in the class are coding questions that are asked in interviews and on popular coding websites.
Learning Outcomes
At the conclusion of the course, you should be able to
- Create effective and efficient programs using Java
- Express ideas using efficient data structures
- Apply operations to these structures
- Prove the complexity of the data structures method in terms of primitive operations
Topics Include
- Introduction to data structures and algorithms
- Review of Java used for this course
- Need for algorithms
- Tools for computing complexity in terms of problem size rather than hardware used
- Data structures for building extremely large objects like array, stack, heap, hash, trees and graphs
- Algorithm techniques for solving problems like greedy, divide and conquer, back tracking and dynamic programming
- Implementing objects and algorithms that scale for arbitrary large size problems
- Proving the worst case complexity of each algorithm in terms of time and space
Skills Needed:
- Working knowledge of Java or C/C++.
- Save Your Seat
Help us confirm course scheduling. Enroll at least seven days before your course starts. - Accessing Canvas
Learn more about gaining access to your course on Canvas in our FAQ section. -
Accessibility and Accommodation
For accessibility questions or to request an accommodation, please visit Access for Students with Disabilities or email the Extension registrar. -
Finance Your Education
Here are ways to pay for your education.
Prerequisite(s):
Estimated Cost: TBD
Course Availability Notification
Please use this form to be notified when this course is open for enrollment.