“consistent in-universe rules for how glasses work”



This is the final week showcasing material from Sammy’s archive. I saved some of my favourites for this one =)
~Aljoscha


Dear readers, I am kind of back. I had surgery a few weeks ago, and until today you could always hear the faint warning beep of having only a single heart container filled. Today I have just enough hearts to write a short editorial for famous music blog worm-blossom.org!
Outside of sleeping, eating, napping, and reading, I haven’t been up to much. Certainly no computering, or even drawing. But I’ve been walking. This is walking for the sake of it, without a purpose (getting bread) or a destination (my studio). I just wander around the neighbourhood, ambling down different streets, taking inefficient detours. I love how automatic walking is, you put one foot in front of the other and pretty soon they don’t need your supervision anymore. And then your mind starts wandering along with them, peeking down inner side streets.
My walks right now aren’t like how I imagine Aljoscha’s are. There are no ideas or insights, only impulses, quiet excitement, images. Maybe, someday, they’ll assemble into something which can be used, but for now all I have (all I need?) is forward propulsion into the next week.
~sammy



Yay, Sammy is (kind of) back! Though I feel like she needs to catch up with a couple of changes: clearly worm-blossom.org is not a popular music blog but a popular data structure blog. So let me tell you more about data structures! (I’m sorry, but this is what I thought about this week...)
- I think I made a mistake with the two-dimensional skip-list of last week: the links from top-right and bottom-left sublists back to the pivot are not needed. The variant without them should actually be the default. In particular, this is not connected to the two-kinds-of-edges observation about one-dimensional skip-lists, I got something mixed up there. And while removing these edges destroys unilateral connectivity, you gain the property that there is a unique path from the "least" vertex to any other vertex.
- I made some progress to generalising G-trees to the multidimensional setting. In the one-dimensional setting, you can pair up each item in a G-node with a lesser subtree, and then you add to the G-node the single subtree of items of lesser rank that are greater than the greatest item in the G-node. In the two-dimensional case, things are more tricky. You can pair items with a bottom-left and a top-left subtree of lesser-ranked items, and this works fine. But what do you do about the items that lie to the right of any items of the G-node? If you add a single right-subtree to the G-node, you end up not generalising the 2d-zip-trees; to do that you'd need to also split up those right items along the y axis. But then you get a number of right subtrees scaling with the number of (terminal) items in the G-node. And how do you (elegantly) store this variable number of subtrees?
- A more fun observation regarding multidimensional G-trees: you get 1d-zip-trees by instantiating 1d-G-trees with sorted linked lists as the inner set datastructure. And it just so happens that sorted lists are what the layers of a skip-list are. And for the multidimensional case, it looks very much like you need to indeed instantiate k-dimensional G-trees with k-dimensional skip-list-layers to obtain the k-dimensional zip-trees. Well, assuming the whole right-subtree problem had been solved =S. But this feels very, very neat to me!
- Let me get out one more point that requires good understanding of G-trees: I came up with a new interesting instantiation, and a painfully-obvious-in-retrospect one at that: use almost-complete binary search trees as the inner set data structure. Where zip-zip-trees try reduce the height penalty of having successive items of equal rank (i.e., with no item of higher rank in between them), this instantiation simply defines the problem away by always using a minimal-height tree to arrange such sequences. Maintaining these is inefficient (you cannot do insertions and deletions on almost-complete binary search trees in logarithmic time), but we know that G-nodes are small with high probability, so we do not need to care. This instantiation is still history-independent (because almost-complete trees are required to “fill the lowest layer from the left”, they are uniquely defined for any item set — and if I'm missing something here, then you can always redefine them in a history-independent way). The only drawback I see, aside from somewhat complicated insertion and deletion algorithms, is that this instantiation is not clamping-invariant.
- Finally, a short observation on skip-lists: the same generalisation that goes from zip-trees to G-trees also works for skip-lists. And it is a lot more simple and obvious for skip-lists even: you keep the inter-layer connections, but instead of using sorted linked lists as individual layers, you use arbitrary set data structures as the individual layers. I've seen some papers that do this with specific replacement data structures, but none that actually works out generalised algorithms, and the algorithms that the underlying set data structure has to provide. This should be fairly simple though; certainly less elaborate then the G-tree case. And from this, you get at least one immediately interesting data structure: the skip-skip-list, which uses skip-lists for its layers (fully analogous (and properly isomorphic to) zip-zip-trees).
I'm starting to think I should do my phd about this sort of stuff, instead of older research that grew out of append-only logs and that I barely care about any more...
~Aljoscha












































