CSCI 255 Fall 2015
Introduction to Algorithms and Discrete Structures
Archived Class
Charles Cusack
Computer Science
Hope College
Main
Schedule
Grading
Gradebook
Homework

Policies
College
    Policies
Advice

Notes
Programs
Tutorials

CSCI 125
CSCI 255
MATH 341
Others

Admin

Course Information


Time     3:00-4:30 TR
3:00-3:50 F
Location     VZN 297 (TR) and VZN 151 (F)

Instructor     Chuck Cusack
Email     cusack@hope.edu
Office     VWF 233
Phone     395-7271
Office Hours       by appointment

Textbooks
  • (IDAA) Introduction to the Design and Analysis of Algorithms, 3rd edition, Anany Levitin, Perason, 2012.
  • (AIDMA) An Active Introduction to Discrete Mathematics and Algorithms, Version 2.5, Charles Cusack and David Santos, 2015. (PDF)

Description An introduction to the design and analysis of algorithms along with some of the discrete mathematical structures that are fundamental to the field of Computer Science. This course builds on the data structures topics from CSCI235 by exploring efficient ways of using them to solve problems. Algorithm analysis topics include best, worst, and average case analysis of iterative and recursive algorithms; asymptotic notation; and solving recurrence relations. Algorithm design techniques include brute force, greedy, divide-and-conquer, transform-and-conquer, dynamic programming, and space/time tradeoff. Discrete structures topics include propositional logic, proof techniques (especially induction), sets, matrices, sequences and summations, and basic combinatorics.

Topics
  1. Foundational Discrete Structures
    1. Propositional Logic, Equivalences, Truth Tables
    2. Sets
    3. Sequences and Summations
    4. Matrices
    5. Basic Counting
    6. Permutations/Combinations
    7. Binomial Coefficients and Identities, including the Binomial Theorem
    8. Pigeonhole Principle
  2. Proof Techniques
    1. Direct, Contraposition, Contradiction
    2. Proof by Induction
  3. Basic Algorithm Analysis
    1. Big-0, Omega, and Theta Notation
    2. Basic Algorithm Analysis (best/average/worst, time/space, wall-clock/CPU/operations)
    3. Complexity Classes
    4. Recursive Definitions/Recurrence Relations
    5. Solving Recurrence Relations
    6. Analyzing Recursive Algorithms/Master Theorem
    7. P/NP/NP-Complete
  4. Algorithm Design Techniques
    1. Brute Force
    2. Greedy
    3. Divide-and-conquer
    4. Decrease-and-Conquer
    5. Transform and Conquer
    6. Dynamic Programming
    7. Space/Time Tradeoff
    8. Backtracking
    9. Branch-and-bound