Course Code:

133215
Course Outline:

**Text Books and readings:**

1) Reading: Algorithms in a Nutshell by George T. Heineman, Gary Pollice, and Stanley Selkow

**Course Objectives (Learning Outcomes)**

At the end of the course the student will be able to:

1. Define and give simple examples of algorithms.

2. Analyze the run-time complexity of simple algorithms, both iterative and

recursive, using the O notation.

3. Understand and describe brute-force as a strategy for designing algorithms.

4. Understand and describe divide-and-conquer as a strategy for designing algorithms.

5. Describe and implement the following graph algorithms: BFS (breadth-first search),

DFS (depth-first search), and minimum spanning tree, shortest path and sailsman problem

6. Describe and implement main string search algorithms.

7. Describe and implement simple sort algorithms, including heapsort and quicksort.

8. Understand and describe the greedy strategy for algorithm design.

9. Give a basic intuitive definition of the computational complexity classes

P, NP, NP-Hard, and NP-Complete.

**Course Schedule**:

- Analysis Basics 2 w
- Searching and selecting Algorithms 1 w
- Sorting algorithms 2 w

Firts exam 20%

- Matchning algorithms 1 w
- Graph algorithms 2 w
- Numeric algorithms 1 w

Second exam 20%

- Parallel algorithms 2 w
- Nondeterministic algorithms 1 w
- Other algorithms techniques 2 w

10 % lab-works

10 % homwork and participation

40% final exam

- 665 reads