Hacker News new | ask | show | jobs
by jackhalford 11 days ago
Is « cacheability » a property of the data structure or of the lookup algorithm?
2 comments

Both. The hypothesis with Eytzinger is that you're doing vanilla binary search on a data structure where each hop is one operation. It doesn't, by itself, do anything to optimize around particular hot leaves, so assuming you aren't doing a weighted rebalance operation before construction it additionally assumes access patterns are somewhat uniform. That's the algorithm and input pattern whose cachability we're trying to optimize.

Imagine, e.g., doing a b-tree lookup on a binary Eytzinger layout. You would always grab more cache lines than optimal. Even more obviously, consider an inorder traversal. The properties of an algorithm and data structure depend properly on both components.

Locality is a property of how data is arranged, so it's a property of the data structure, no?
It's a combination of both. Your data layout could be very cachable for one algorithm, but very much not so for another algorithm.
It has to be both. You can lay things out in memory so they are tightly packed together and thus ostensibly cache efficient but that doesn't help you if you index into that data structure in such a way that every new index loads a new cache line.
Data arrangement and data structure are the same word...
Kind of. Many dynamic set data structures do not require the set elements to be in some layout inside an array; the storage is abstracted.

When we put the binary tree nodes into an array and move from the parent to children using indexing calculations, rather following pointers that could go anywhere, then it's an explicit part of the data structure.