Fall 2023
Documents
 Syllabus and Schedule  revised September 3, 2023
 History and Advice
 Tetris as a font from Erik Demaine
 About Laptops and Phones in Class
 Course Policies
 General Academic Calendar
 Academic Honesty
 School of Computer Science and Mathematics Department of Computing Technology Goals
 Writing Center
 Counseling Services
 Title IX at Marist
 Title IX Student Bill of Rights and IX Reporting Options
 Academic Learning Center for tutoring and more
Books
 Our Textbook
 Introduction to Algorithms, Third edition or Fourth edition by Cormen, Leiserson, Rivest, and Stein
 Other Algorithms Books
 Algorithms by Jeff Erickson  FREE
 Web resources for Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
 Related Books
 Open Data Structures books by Pat Morin  FREE
 Computational Complexity: A Modern Approach by Sanjeev Arora and Boaz Barak  FREE draft
 Discrete Mathematics: An Open Introduction, 3rd ed by Oscar Levin
Assignments
 Embrace scholarship and write your labs using LaTeX. OverLeaf is probably the easiest way to do this. I've written a lab example you can use as a template. There are more LaTeX resources below.
 Assignment Zero  Limericks in LaTeX
 Assignment One  Data Structures and Sorting for magic items.
 Assignment Two  Searching and Hashing magic items.
 Assignment Three  Graphs and Trees (and magic items to find in your BST)
 Assignment Four  Dynamic Programming (graphs) and Greedy Algorithms (spice)
Academic Examples
 Asymptotic Curves
 Hash code tests and analysis as text and as Java code
 AVL Balanced Trees from David Galles
 Algorithm Visualizations  VisuAlgo, from Dr. Steven Halim and some of his students from the National University of Singapore
 Visualizing Algorithms by Mike Bostock, creator of d3
 Sorting Algorithm Animations  Visual demos by David R. Martin
 The Sound of Sorting  Sorting Algorithm Audibilization and Visualization, by Timo Bingmann
 Data Structure Visualization Tool from David Galles
 Alan's Algorithms Course
Examples from The Internet
A note about these examples: As you know, not everything on the Internet is true. Accordingly, not all of these examples are perfect, or even correct. In fact, some are misleading and a few are precisely wrong. Be careful. Always verify with our books.
 Common Sorting Algorithms with animations
 More Common Sorting Algorithms from Rosetta Code
 A Collection of Common Algorithms from The Algorithms, an open source collection
 The Sorter Selection sort and Quicksort not by Kenny Rogers
 Hungarian Folk Dance Quicksort
Resources
 Desmos  graphing calculator
 Stanford Algorithms YouTube channel
 NIST Dictionary of Algorithms and Data Structures
 LaTeX
 Comprehensive TEX Archive Network
 Overleaf (formerly ShareLaTeX)
 LaTeX Tutorial from Overleaf
 TeX Stack Exchange
 TikZ package tutorial (for drawing DFAs and NFAs)
 Git
 GitHub Desktop
 A Gentle Introduction to Git and GitHub from Alan
 Git from the Bottom up by John Wiegley
 Git Basics
 Try Github
 GitHub Guides
 Advanced: Git From the Inside Out
 Visualizing Git Concepts
 How to Write a Git Commit Message  pretty good advice
 The Issues Feature on GitHub
 Dangers of GitHub and Amazon
 Java
 IntelliJ IDEA
 Virual Studio Code
 NetBeans
 Eclipse
 Debugging Java in IntelliJ IDEA
 Debugging Java in Visual Studio Code
Sun'sOracle's Java Documentation Oracle's "New to Java Programming" Center
 Java tutorials
 Java Coffee Break  Getting started
 The Java tag at Stack Overflow
 Memory usage in Java
 JVM Anatomy Quarks
 JVM Internals
 A JVM Does That? by Cliff Click
 C++
 C++ PLDB Entry
 GCC
 CLion
 Qt
 g++ cheatsheet from USC
 makefile cheatsheet from USC
 Boost Libraries
 Abseil  C++ docs and libraries from Google
 Super helpful resource on Templates in C++
 Software Development
 Software Engineering at Google a book by Abseil
 Ideas about Software Development  6 years later
 Software Development Developments at Microsoft
 Exploding Software Engineering Myths  more from Microsoft Research
 A Microsoft Code Review  with Marist alum Jon Miller
 A big list of naughty strings  Great for testing
 Comments on Comments

Great books about writing software
 Code Complete by Steve McConnell
 Beautiful Code by Andy Oram & Greg Wilson
 Coders at Work by Peter Seibel
Notes
 Studying Algorithms
 Elementary Data Structures
 Growth Functions
 Sorting, part one
 Sorting, part two
 Searching
 Graphs in theory
 Graph in practice
 Depthfirst Search / Traversal
 Breadthfirst Search / Traversal
 Greedy Algorithms with a Knapsack
 Dynamic Programming with Bellman and Ford
 The Master Method
Articles
 50 Years of Complexity Theory
 The Stable Marriage Problem  a former final project and additional research from this class
 Covid on Campus  a former final project and additional research from this class
 The FisherYates Shuffle and Spotify
 Machine Learning Endangers the Building Blocks of Computing
 Patterndefeating Quicksort  a clever hybrid
 Algorithms and Data Structures vs Machine Learning  specifically, indexing.
 P vs. NP explained by Scott Aaronson
 The State of P vs. NP today by Scott Aaronson
 P vs. NP paper by Stephen Cook University of Toronto
 Bubblesort, Rocksort, and Cocktailshaker Sort
 What the hell is a Bloom filter? by Onat Yigit Mercan
 Bloom Filter Basics in 16 minutes from the Stanford Algorithms YouTube channel
 Less Hashing, Same Performance: Building a Better Bloom Filter by Adam Kirsch and Michael Mitzenmacher
 Scott Aaronson on Complexity, Computation, and Quantum Gravity from Sean Carroll's Mindscape podcast
 A summary of runtime complexity
 Big O and Friends
 Some Essential Algorithms
 Donald Knuth, The Yoda of Silicon Valley
 Incompleteness Ex Machina
 ChurchTuring Thesis from Communications of the ACM
 Ineffective Sorts from XKCD
 A General Method for Solving DivideandConquer Recurrences by Jon Bentley et. al in 1980  basis for the master method. Here's an earlier version from CMU / Naval Research in 1978
I reserve the copyright for all parts of my courses.
Commercial reproduction of any course material, including lecture notes
taken by students, without my EXPRESS WRITTEN consent, is prohibited.
Seriously.