Compressing graphs and indexes with recursive graph bisection (2016)
arxiv.org
arxiv.org
I remember when we first experimented with this, the compression improvement compared to our previous heuristic was massive, but the algorithm took a day to run on a double-digit-node Giraph cluster for a single index shard. I was very skeptical we'd ever be able to use it in production, given that we had to run it on thousands of index shards every few days.
Eventually we reimplemented it in C++, optimized all the data structures to make them fit in memory, and we were able to run it in a couple of hours on a single (beefy) machine. Over the years it has been optimized further.
The algorithm has been reproduced externally with an open-source implementation [1], which AFAIR was pretty good when I looked at it.
This is an example of an NP-hard problem that surprisingly broadly applies to everyday situations, just like the bin-packing problem that has been on the front page recently. Do you know of other NP hard problems with surprising applicability to everyday situations?
One that I find very interesting is optimizing function layout in binaries to improve their compressibility [2], which is important for mobile apps.
[1] https://scholar.google.com/scholar?cites=1196492606453931313...
We worked on improvements to this following our reproducibility study including a synchronized iterative version and alternative estimation functions.
You can find the paper here if you're still interested!