Fall 2024
Documents
- Syllabus and Schedule - revised September 1, 2024
- 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 in Java as text and in Java as code and in C++ as text
- 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
- Depth-first Search / Traversal
- Breadth-first 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 Fisher-Yates Shuffle and Spotify
- Machine Learning Endangers the Building Blocks of Computing
- Pattern-defeating 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 Cocktail-shaker 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
- Church-Turing Thesis from Communications of the ACM
- Ineffective Sorts from XKCD
- A General Method for Solving Divide-and-Conquer 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.