Red-Black Trees in a Functional Setting (Okasaki, 1993)(eecs.usma.edu)
eecs.usma.edu
Red-Black Trees in a Functional Setting (Okasaki, 1993)
http://www.eecs.usma.edu/webs/people/okasaki/jfp99.ps
5 comments
It's hard to find a dissertation that reads like a novel
That's why he turned it into a book: http://www.amazon.com/Purely-Functional-Structures-Chris-Oka...Good point. Judging from the table of contents, he added a chapter up front on various types of trees, tacked on Haskell source in the appendix, and mushed all the conclusions together.
But I'm a poor grad student, so I'll read the free dissertation over the $75 book. ;)
But I'm a poor grad student, so I'll read the free dissertation over the $75 book. ;)
This is probably the best explanation of Red-Black trees, even outside of a functional setting.
There is an implementation that is pretty faithful to Okasaki's paper here: http://www.cs.kent.ac.uk/people/staff/smk/redblack/Untyped.h... . I used as a reference once because it also implements delete.
In the same directory, Kahrs develops other versions with stronger constraints coming from the type system, but I never got far enough in to Haskell back then to understand them.
There is an implementation that is pretty faithful to Okasaki's paper here: http://www.cs.kent.ac.uk/people/staff/smk/redblack/Untyped.h... . I used as a reference once because it also implements delete.
In the same directory, Kahrs develops other versions with stronger constraints coming from the type system, but I never got far enough in to Haskell back then to understand them.
I find it particularly interesting that he breaks down the number of neccessary cases to only 4 compared to the standard explanation found everywhere else.
Yes, that's the power of purity. On the syntax side, or-patterns express those remaining four cases very succinctly.
In case anyone needs them, I wrote up Okasaki red-black trees for Scala:
http://matt.might.net/articles/implementation-of-immutable-p...
http://matt.might.net/articles/implementation-of-immutable-p...
Well, thanks, I was just about to take Okasaki's paper and see what an implementation in Scala would look like.
I took his Programming Languages and Translators class when he was at Columbia. It was, hands-down, the best class I've ever taken. His enthusiasm for the subject was evident. The aspect about the class I liked best, and which I try to emulate, it that he rarely ever directly answered a question. He would, with incredible patience, ask you questions in-turn to help lead you to the solution or definition. I always found that impressive from a graduate-level professor.
I think I still have his ML implementation of Red-Black trees he gave the class.
I think I still have his ML implementation of Red-Black trees he gave the class.
bst were the first time i went "holy crap. i love complex problem solving"
http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf
I'd highly recommend it. It's hard to find a dissertation that reads like a novel, but he somehow managed to accomplish such a feat.