3 ms·
You can even build them with basically one line of code by sorting points using Morton / Z-curve order. It's linear time if you use a counting/radix sort. Edit
by pixelpoet 11mo ago
You can even build them with basically one line of code by sorting points using Morton / Z-curve order. It's linear time if you use a counting/radix sort.
Edit: lol, downvoted for this post. Never change, HN.
- pavlov 11mo agoIt’s super easy to click the downvote button by accident on mobile when you meant to upvote. And this UI will never be fixed because this is HN after all.
- craftkiller 11mo agoThis is precisely the reason that I do not log in to HN on my phone. My phone is read-only and if I want to upvote or comment then I have to switch to my laptop. Pretty easy with firefox because I can send tabs to other devices.
- jasonjmcghee 11mo agoZoom in or unvote/revote
- acters 11mo agoThat is why I like harmonic app, there is an invite button separating the upvote and downvote. Never going to have this kind of issue
- proc0 11mo agoI just implemented an HN UI. This is good feedback as I'm aiming to have a mobile friendly web version. https://proc0.github.io/HackerZen https://proc0.github.io/HackerZen (it's also open source)
- kristianp 11mo agoThis is true, however you can see if you downvoted by the "undown" link displayed instead of "unvote".
- deleted 11mo ago[deleted]
- quibono 11mo agoI'd love to see that. Could you link me to an implementation or explain this in more detail please?
- johnisgood 11mo agoI would like to know about this more, too. Is there a code anywhere, ideally with comments? But I am fine without comments, too, I would just like to see the code and possibly with an example usage.
- quibono 11mo agoOkay, I was intrigued and I did some digging. Morton / Z-order is all about interleaving the individual bits of the x and y coordinates. You end up grouping by quadrants. Python one liner: points.sort(key=lambda p: sum(((p[0]>>i&1)<<(2*i))|((p[1]>>i&1)<<(2*i+1)) for i in range(16)))
- _jackdk_ 11mo agoHere's a 3D version used in the creation of sparse voxel octrees: https://forceflow.be/2013/10/07/morton-encodingdecoding-through-bit-interleaving-implementations/ https://forceflow.be/2013/10/07/morton-encodingdecoding-thro... Here's an example from AWS, where lat/long pairs are put into a Z-index, which is used as a DynamoDB sort key, letting you efficiently query for items near a point. https://aws.amazon.com/blogs/database/z-order-indexing-for-multifaceted-queries-in-amazon-dynamodb-part-1/ https://aws.amazon.com/blogs/database/z-order-indexing-for-m...
- rdtsc 11mo agoYeah good point, they are downsides for sure but it's a simple enough approach and most of all it can be shoved in a database (or b-tree or any 1d-sorted data structure). And for a z-curve, the order is basically a depth-first traversal of a quadtree.