Understand the formal and informal definitions of “algorithm.”
Referencing modules: Introduction
Understand the policies, course format, assignments, and assessment mechanisms for ICS 311.
Referencing modules: Introduction
By viewing examples, become familiar with the style of analysis used in ICS 311.
Referencing modules: Analysis examples
Bloom: Remember
Learn the concepts and definitions of asymptotic growth and recognize them in context.
Referencing modules: Growth of functions
Gain further practice in algorithm analysis through examination of stacks, queues, lists, and trees.
Referencing modules: Abstract data types
Understand when and how to analyze an algorithm based on a distribution of the probability of each case.
Referencing modules: Probabilistic Analysis
Understand the design and run-time characteristics of hash tables and how they compare to related data structures.
Referencing modules: Hash Tables
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
Successfully design and implement divide and conquer algorithms to solve specific programming problems.
Referencing modules: Divide and conquer
Understand the properties of binary search trees and how to apply them.
Referencing modules: Binary Search Trees
Understand how to manipulate heaps and their benefits.
Referencing modules: Heapsort
Understand the quicksort algorithm and how it differs from mergesort.
Referencing modules: Quicksort
Be able to step through insertion and deletion procedures for red-black trees.
Referencing modules: Balanced Trees
Be able to implement solutions for simple optimization problems based upon greedy programming techniques.
Referencing modules: Greedy Algorithms
Be able to implement solutions for simple optimization problems based upon dynamic programming techniques.
Referencing modules: Dynamic Programming
Be able to assess when to use different graph algorithms and why they might be preferred for a given problem context.
Referencing modules: Graphs
Understand when and how to apply amortized analysis.
Referencing modules: Amortized analysis
Understand the principles and applications of disjoint sets.
Referencing modules: Disjoint sets
Understand when, why, and how to use minimum spanning trees.
Referencing modules: Minimum spanning tree
Understand when, why, and how to use single source shortest paths.
Referencing modules: Single source shortest paths
Understand when, why, and how to use all pairs shortest paths.
Referencing modules: All pairs shortest paths
Understand when, why, and how to use the maximum flow algorithm.
Referencing modules: Maximum flow
Understand when, why, and how to use linear programming.
Referencing modules: Linear programming
Understand when, why, and how to use multithreading.
Referencing modules: Multithreading
Understand when, why, and how to use string matching.
Referencing modules: String matching
Understand approximation algorithms.
Referencing modules: Approximation algorithms