B-Heap vs. Binary Heap (2010)
queue.acm.org
queue.acm.org
It's worth noting that it was published in 2010, though. The Wikipedia article on B-heaps actually references this article: http://en.wikipedia.org/wiki/B-heap
He's talking about people's everyday understanding of data structures, including his own. That the data structure he described already existed when he banged it out is beside the point; most folks don't know about it, most CS programs don't teach it, and most software doesn't use it.
That's sort of like saying, "Well, all special relativity does is show Einstein's ignorance of Lorentz's work."
It's true in some sense, but ultimately an unproductive sentiment.
I really wish the theory and applied side split off into separate departments or divisions just like how math and applied math go their separate ways.
The audience of this article was a lot of people that knew of the problem, and knew of research into cache-oblivouis algorithms. This is a long ways from not citing somebody, it's preaching to somebody as if they are ignorant when they're a fair ways ahead of you. Quite annoying when encountered.
irrc there is only a constant factor of time difference between the two.
In general there are lots of datastructures that are wonderful on paper but whose constant time factors make them infeasible in practice.
Anyhow, man, comments on HN are tedious sometimes. Everyone's glomming onto citation issues. Bo-ring.
I loved, loved, loved the visual representation of the two different data structures. It makes it really clear what's going on and why you'd want one structure vs. the other depending on memory access patterns. It makes it much easier to put frequently co-accessed and co-manipulated data in the same page of memory.
I'm a shitty systems programmer, but my understanding is that having to hop around among many different pages will cause the OS to barf out page faults. What you wind up saving in user time by optimizing for rebalancing operations you pay for 10-fold in system time.
Is that a correct understanding?
Yes, you want to minimize the number of pages you touch; this is true both in the presence of VM pressure (to avoid page faults) and to a lesser degree even without it (because you want to avoid the cost of TLB misses).
I wonder if current popular libraries like the STL or the Java Collections library have started to take advantage of this work yet or not...
A mergesort can be understood by even a beginner after an hour or less in a language like Haskell. A funnelsort...? Well, I'll put it this way: even after reading the papers, I'm not sure how I would go about implementing it.
They also require fast stable iterators that are cheap to pass by value, constraining the implementation further. For this reason I am fairly confident that every std::map/set ever written will be a balanced tree with parent pointers. There's just no latitude to do anything else.
The article only cites papers from 1961 and 1964, and complains about how CS departments use out-of-date machine models when teaching algorithms. This is just not true at any of the top schools.
[0] https://github.com/varnish/Varnish-Cache/blob/master/lib/lib...