Algorithm Analysis
Programming is a complex task for several reasons including
- Large
projects involving many people (software engineering).
- Program may involve
storing and accessing large quantities of data (data structures and databases)
- Program may involve solving complex computational problems for which the
obvious solutions are inadequate (algorithms).
The emphasis in an algorithms course is on studying efficient algorithms for
solving common programming problems. Efficiency is determined using asymptotic
analysis which provided an estimate on how fast the time to solve a problem
increases as the size of the problem increases. As we will soon see a faster
computer cannot rescue a bad algorithm. Along the way we will look at some of
the following general strategies:
- Divide and conquer
- Greedy algorithms
- Dynamic programming
- Tree and graph traversals
- Backtracking
- Branch and bound
Fundamentals
Searching
Sorting
Graphs
Note the graph code provided below includes the DFS, BFS and topological
sort. We will be adding code for finding the shortest path and minimum
spanning tree.
Quizzes and Projects
- Project 1 - Tuesday, February 4
- Project 2 - Tuesday, February 25
- Project 3 - Tuesday, April 8
- Project 4 - Thursday, May 1
Presentation
Final Exam
Internet Resources
Courses
Dictionaries
Libraries
Animations
Miscellaneous