Think of them as double ended priority queues. O(n) construction with O(lgN) mutations. Both the min and max elements are quick to get O(1).
The paper is short and the data structure is elegant. I read it a few years ago in uni and made me appreciate how greatly useful can be implemented very simply.
It is a succinct summary of what, with the benefit of hindsight, many people thought was important in their lives and what they should have done better.
Absent is "I should have worked harder" and "I should have spent more time at the office".
Oh man. This course brings back so many memories of suffering through this material. But I can't emphasize how important this stuff is to know if you want to know anything significant in Computer Science.
What helped me ace the the exam was doing a hundreds of problems. I couldn't answer them most of the time, so I'd need an answer key nearby to get unstuck.
Drill, drill, drill. Just like you'd expect to drill for calculus, you can drill for this class.
What I found helpful was Rosen's "Discrete Mathematics and Its Applications". The material wasn't the best, but the problems are excellent. You can buy an older edition of the book and its solution manual for next to nothing on used book sites like abebooks.com
It is Carleton University's freshman/first year Discrete Structures/Math course (COMP1805). They cover a lot of the same material, but at a more leisure pace and assume a lot less background.
This textbook is being taught as a second year discrete math course at Carleton University. I found it to be really high quality, and on par with similar sections from the Rosen or Epp texts.
Actually, the first class is now Java and C++. Morin isn't teaching Python any more.
"Functional" programming is taught in third year (COMP 3007), but you don't get too deep into it.
My issue with the listed classes isn't the chosen languages. A commenter mentioned that you can learn a lot of functional (and other) concepts in a procedural or object oriented language. My issue is that I basically learned the same concepts over and over again, just using different programming languages. You learn to iterate over a multidimensional array in Java, and then you do so again with C, but you have to deallocate and reallocate, and then you do it in C++, but you create an object for the array. It's all the same stuff.
99% PI is what introduced Kowloon. The show did an amazing job of conveying just how special that place was. It is an great pod cast that captures the majesty of day to day design and architecture.
It is unfortunate that the images don't work on the episode page.
I'm in my last year of Comp-Sci. I started the program as a self taught adult. I can say that very little I've learned in school has been useful for the internships and jobs I've since had. That being said, I would never trade the CS experience for anything. It gave me context and a greater understanding of the field. I can now tackle harder problems because the program gave me the tools to do so.
But this is all stuff you can learn on your own. Assuming you know how to program already, my suggestion is find out what a local university teaches 2nd year students. Find their curriculum and see the classes they offer.
Typically, 2nd year is when you go beyond the basics of programming and start scratching the surface of really cools stuff like fundamental algorithms and data structures. If you can learn this stuff, you'll have enough context to determine what else you need to learn.
Think of them as double ended priority queues. O(n) construction with O(lgN) mutations. Both the min and max elements are quick to get O(1).
The paper is short and the data structure is elegant. I read it a few years ago in uni and made me appreciate how greatly useful can be implemented very simply.
https://dl.acm.org/doi/pdf/10.1145/6617.6621