Skip to content

Course website dev notes

All course materials live in my a github repository:
https://github.com/isaacovercast/CSCI232

Building this website

Install mkdocs-material into your current environment.

conda install mkdocs-material -c conda-forge

Move into the repo directory alongside mkdocs.yml and build locally with mkdocs. Changes to the repo will now automatically update in the website being served to localhost:8000.

mkdocs serve

Other good online DS&A materials

  • Crafting Interpreters - Hash Tables (Nystrom): This is actually quite a nice and thorough but still accessible textbook-like approach to the subject (uses C for the example code). This is actually a really nice and modern treatment. It's part of a book about programming language design, so too bad it is not from a DS&A book. Could be a good opportunity to follow this lead and do a whole DS&A book in this style.
  • Visualgo Hash table: A direct link to all the text contained in the E-Learning interactive part of this page, very concise, good details but terse.
  • Grokking Algorithms (Bhargava): This is a very fun and accessible book about algorithms that uses drawings and a conversational style to illustrate concepts. It's really fun to read, maybe a little 'light' overall, but students might like it.

DS&A in python

DS&A in rust

Both of these are freely available online in github repositories

Hash table visualizations

  • Visualgo Hashtable: Very fancy. Has a built in lesson that is quite extensive. Exploration mode is excellent. Developed by National Univ. Singapore. A huge amount of other data structures are covered with similarly cool visualization. Worth looking at.
  • Open Hashing (SF State): Implements mod 13 hashing, it's cool but you have to add one element at a time by hand, maybe useful.
  • Hashing Visualization (ACM): Can choose your hash function and collision resolution policy, maybe good for illustrating linear probing. Has a bunch of other stuff not covered in the book.
  • Virtual Labs - Hash Tables: Less a visualization platform and more of a self-guided learning platform (developed by the Ministry of Education of the Government of India, wow!). It actually does have some interactive parts under the 'Practice' left-navs.

Getting Java working with Jupyter notebooks

It turns out there are not too many options for running java kernels in jupyter. I messed with this for a long time and never got satisfactory results, mostly because I wanted students to do some easy plotting and this is impossible in Java. I did get a java jupyter kernel working though, with some trial and error:

  • IJava: I ended up using this because it was simple to install (conda install -c conda-forge ijava) and it seemed to 'work', but it has few features and is not actively maintained.
  • awesome-jupyter-java maintains a list of kernels (both active and inactive)
  • Kotlin-jupyter seems promising, as kotlin is designed to be backwards compatible with java, so the algs4 code should work, and also it could give access to more plotting functionality.
  • ganymede & rapaio also both seemed promising, but supported by individuals so maybe not robust in the long term.
  • The JetBrains team maintains a lets-plot implementation which works with Kotlin, and theoretically could work in jupyter notebooks but I never got that far.

Materials from past courses

Materials from UIUC CS courses

The Grainger College of Engineering has a massive CS program and all their course materials are standardized and available on their website. It is a treasure trove of useful resources!

VisuAlgo Cheat-sheet

Insert items to generate separate chaining in the text:

90, 80, 51, 71, 62, 52, 2, 42, 53, 44, 24, 14, 45, 85, 15, 26, 56, 67, 17, 18

Items to generate Linear probing in the text:

91, 84, 19, 59, 99