Learning Outcomes

1. Understand what algorithm analysis is.

Understand the formal and informal definitions of “algorithm.”

Referencing modules: Introduction

2. Understand the procedures for ICS 311.

Understand the policies, course format, assignments, and assessment mechanisms for ICS 311.

Referencing modules: Introduction

3. Understand analysis of algorithm styles.

By viewing examples, become familiar with the style of analysis used in ICS 311.

Referencing modules: Analysis examples

4. Remember concepts of asymptotic growth.

Bloom: Remember

Learn the concepts and definitions of asymptotic growth and recognize them in context.

Referencing modules: Growth of functions

5. Understand definition, implementation, and behavior of abstract data types.

Gain further practice in algorithm analysis through examination of stacks, queues, lists, and trees.

Referencing modules: Abstract data types

6. Understand probabilistic analysis.

Understand when and how to analyze an algorithm based on a distribution of the probability of each case.

Referencing modules: Probabilistic Analysis

7. Understand hash tables.

Understand the design and run-time characteristics of hash tables and how they compare to related data structures.

Referencing modules: Hash Tables

8. Recognize when divide and conquer is appropriate

Be able to recognize when the divide and conquer algorithm is an appropriate algorithm to apply to a programming problem.

Referencing modules: Divide and conquer

9. Design divide and conquer algorithms

Successfully design and implement divide and conquer algorithms to solve specific programming problems.

Referencing modules: Divide and conquer

10. Understand binary search trees

Understand the properties of binary search trees and how to apply them.

Referencing modules: Binary Search Trees

11. Understand heaps, heapsort, and priority queues

Understand how to manipulate heaps and their benefits.

Referencing modules: Heapsort

12. Understand quicksort

Understand the quicksort algorithm and how it differs from mergesort.

Referencing modules: Quicksort

13. Understand the balanced tree algorithm

Be able to step through insertion and deletion procedures for red-black trees.

Referencing modules: Balanced Trees

14. Use greedy algorithms for problem solving

Be able to implement solutions for simple optimization problems based upon greedy programming techniques.

Referencing modules: Greedy Algorithms

15. Use dynamic programming for problem solving

Be able to implement solutions for simple optimization problems based upon dynamic programming techniques.

Referencing modules: Dynamic Programming

16. Understand graphs

Be able to assess when to use different graph algorithms and why they might be preferred for a given problem context.

Referencing modules: Graphs

17. Understand amortized analysis

Understand when and how to apply amortized analysis.

Referencing modules: Amortized analysis

18. Understand disjoint sets

Understand the principles and applications of disjoint sets.

Referencing modules: Disjoint sets

19. Understand minimum spanning tree

Understand when, why, and how to use minimum spanning trees.

Referencing modules: Minimum spanning tree

20. Understand single source shortest paths

Understand when, why, and how to use single source shortest paths.

Referencing modules: Single source shortest paths

21. Understand all pairs shortest paths

Understand when, why, and how to use all pairs shortest paths.

Referencing modules: All pairs shortest paths

22. Understand maximum flow

Understand when, why, and how to use the maximum flow algorithm.

Referencing modules: Maximum flow

23. Understand linear programming

Understand when, why, and how to use linear programming.

Referencing modules: Linear programming

24. Understand multithreading

Understand when, why, and how to use multithreading.

Referencing modules: Multithreading

25. Understand string matching

Understand when, why, and how to use string matching.

Referencing modules: String matching

26. Understand np-completeness

Understand np-completeness.

Referencing modules: NP-completeness

27. Understand approximation algorithms

Understand approximation algorithms.

Referencing modules: Approximation algorithms