CSCI 255 Fall 2023
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 112
CSCI 125
Others

Admin

Course Information


Time     2:00-2:50 pm MWF
Location     VanZoeren 297

Instructor     Chuck Cusack
Email     cusack@hope.edu
Office     VWF 217B
Phone     395-7271
Office Hours       1:00-1:50 MWF

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

Resources
  • Answers in the back of the book
    AIDMA has solutions to all of the exercises/questions and the Reading Questions in the back and you should read them in their entirety as you read the book.
  • Hints in the back of the book
    IDAA has hints for the exercises in the back of the book.
  • Reading Questions Solutions
    Here are Solutions to the Reading Questions from IDAA. You should verify your answers before class.
  • Me
    See me during office hours, before or after class, or make an appointment at another time.
  • The Computer Science Help Center
    Check the signs in the lab and classroom for hours.

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 According to the course catalog:
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 CSCI 235 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, dynamic programming, and space/time tradeoff. Discrete structures topics include propositional logic, proof techniques (especially induction), sets, matrices, sequences and summations, and basic combinatorics.
More specifically, topics include the following:
  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
Program Learning Objectives include the following:
  1. Reinforcement of: Become effective communicators who are able to relate technical content to both technical and non-technical audiences
  2. Reinforcement of: Have a broad knowledge of the fundamental concepts of computing
  3. Introduction to: Understanding of the theoretical foundations of Computer Science
General Education Learning Outcomes: N/A since this is not a Gen Ed course.

Expectations
  • You will complete all of the Exercises as you are reading AIDMA.
  • You will complete all Reading Questions from both books. They are due on the day of each reading assignment (they are also listed on the schedule).
  • The previous two expectations are important since I will assume that you can gain an understanding of most of the basic material from the textbooks and we will focus class time on the more complicated concepts. We will typically spend 1/3-1/2 of our class time discussing questions related to the Exercises, and the reading questions will often serve as a starting point for the remainder of class.
  • You will review all homework assignments after they have been returned so you know how to properly complete all of the problems.
  • If you don't understand any of the material, including the exercises (even after looking at solutions), you will ask for clarification in class or in my office.

Advice Here are some comments from students who took the course previously.
  • Be prepared to put a lot of work into this class. It definitely is not the easiest class you'll take, but the work is well worth it. You will learn a lot of information in a short amount of time. This is some of the most important stuff you might learn here.
  • Definitely read everything carefully and do the SRQs/exercises. They really help understand the material.
  • Do the readings and all of the assignments. If you stay on top of that stuff, you have the potential to do very well in the course.
  • Make doing the readings and homework your priority over other things, it takes a few rereadings to understand a lot of the material.
  • Make sure you understand all of the homework exercises, especially if you got them wrong the first time around.
  • Be open to meeting with the professor whenever certain material seems confusing.
  • Enjoy it! The course material is challenging and fun!
  • Stay on top of your work - don't fall behind. Read diligently(multiple times).
  • Don't be afraid to ask questions.
  • Be prepared to spend time outside of class thinking about the material even if you are not actually working on something for the class. Regardless of whether or not you personally enjoy the material you need to act like you do outside of class, so that you will think about the material more to understand it better.
  • Do all of the assigned work and go seek out help when you need it.
  • Don't put off the assignments until the night before.
  • Don't try and cram. Give plenty of time for hw because you can get stuck if you don't understand a concept.
  • Be prepared for a lot of work for the first half of the course and make sure to ask questions if you don't understand the material.