|
This course provides an introduction to the techniques of designing efficient computer algorithms and analyzing their running times. General topics include asymptotic, algorithm design techniques and introduction to NP-completeness will be covered at the course class. In addition to methods for showing lower bounds on computational complexity, algorithms for sorting, searching, set manipulation, arithmetic, graph problems, and pattern matching.
This course will not contain a list of algorithms and student must learn their code and implement it. The goal is to prepare all students to be able to design and analyze new algorithms on their own.
Our target is to make you:
- Learn how to think algorithmically
- Understand algorithm design techniques
- Have the ability to develop new algorithms for any new problem on your own
- Apply important algorithmic design paradigms and methods of analysis
- Learn some of the more commonly used algorithms
Enrolling at algorithms class requires general knowledge at:
- Computer science
- Discrete mathematics (proof by induction, sets)
Data structures basics (lists, stacks, queues, trees),
- Calculus (logarithms, differentiation, integration).
By the end of this course you will be able to:
- Understand the growth functions and the hierarchy of complexity classes
- Understand the use of O, Ω, and Θ notation
- Understand the concepts of worst-case and average-case performance, upper and lower bounds
- Analyze the complexity and efficiency of an algorithm in terms of time and space
- Demonstrate knowledge of several algorithms for sorting; and be able to compare their complexities
- Understand various design techniques such as divide-and conquer and greedy methods
- Demonstrate knowledge of different methods for representing a graph
- Trace, implement, and analyze graph algorithms such as finding a minimum spanning tree and finding the shortest path
Topics to be covered at this class:
- Growth of Functions
- Asymptotic (e.g.: Big-O, Omega, Theta).
- Algorithm analysis
- Greedy Algorithms
- Minimum spanning tree & Kruskal algorithm
- Prim algorithm
- Huffman Encoding
- Dynamic programming
- Divide and conquer algorithms
- Approximation algorithms
- Linear programming
- Brief introduction to NP-completeness
Course start time: Sat. 6, February 2010
Course Time Slots: Sat 5:00 pm to 8:00 pm Thu 5:00 pm to 8:00 pm
Course fees: 125 L.E.
|