Welcome to the Spring 2021 Algorithms and Data Structures course.
Let's start by introducing ourselves ...
Recording is that OK with everyone? I do want these meetings to involve all you, not just me as a talking head. So I'm only recording if you all agree to still participate and speak up.
Then I'll walk through the syllabus and explain what this course is all about ...
What is an algorithm? A data structure? And why are we doing both at once?
Questions?
If you're not sure about anything, email me : jimmahoney@bennington.edu .
I'll be assigning weekly study topics which you can read about in several places, especially those listed on the resources page.
Skienna's book is one of the better options , and there is an extensive set of his video lectures and slides online. (I will be using some of those to walk through some of these ideas.)
We'll be using two different programming languages this semester, run in either a unix command shell or a jupyter notebook. You have access to both at jupyter.marlboro.college (and which we'll use for some in-class work), or you can work on your own computer - all these tools are free and available for you to install.
The Python programming language is what I use in my Intro CS course; it's a popular and fairly mainstream high level language. It's also straightforward to generate plots and numeric visualizations using python within a jupyter notebook. Python also has many powerful data structures such as hash tables, sets, and priority queues built-in or available in the standard library.
However, Python is also fairly slow in many situations, and its high level abstractions can hide what's going on at the machine level. In this course we want to understand how things like hash tables work, not just how to use a built-in one.
The second programming language we'll use is C, which has a programming and data model (memory addresses and bytes) that's much closer to the machine hardware.
I'll do a show-and-tell of the basics of both of these using jupyter.bennington.college later today.
We will be doing some math this term: some logs, a few limits, induction, counting and combinatorics, and perhaps even a proof here and there.
I'd be glad to explain any of that as we go along; please do ask questions if you don't understand anything, and we'll dig in deeper as needed.
Your first assignment is a brute-force search which I'd like you to implement in both Python and C, and time both for a variety of cases, collecting your results into text files.
I'm assigning this as both a diagnostic so that I can see where you are, and as a warm-up so you can see some of the tools that we'll be using.
Next week we'll then head into "algorithm analysis", looking into how we should measure whether an algorithm is a good one or not, in part with what's called "big O" notation.
\[ O(1) \subset O(\log n) \subset O(n) \subset O( n^2 ) \subset O( 2^2 ) \subset O(n!) \]
We'll also do some numerical experiments and make some graphical plots of these things in order to understand them better.
jupyter.benningt.college is running a jupyterhub cloud server, which provides
I'll do a demo, including
If time allows, I'll ask you to try that during class time and ask questions if anything isn't clear.
And if we still have time (and aren't too zoomed out), we'll go over some data types and syntax for python and C.