https://github.com/becheran/fast-hilbert
Fast Hilbert space-filling curve transformation using a LUT
https://github.com/becheran/fast-hilbert
benchmarking fractal hilbert lut rust space-filling-curves
Last synced: about 2 months ago
JSON representation
Fast Hilbert space-filling curve transformation using a LUT
- Host: GitHub
- URL: https://github.com/becheran/fast-hilbert
- Owner: becheran
- License: mit
- Created: 2021-02-11T22:27:28.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-04-07T20:16:30.000Z (2 months ago)
- Last Synced: 2025-04-07T21:25:38.372Z (2 months ago)
- Topics: benchmarking, fractal, hilbert, lut, rust, space-filling-curves
- Language: Rust
- Homepage:
- Size: 75.2 KB
- Stars: 41
- Watchers: 4
- Forks: 3
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Fast Hilbert
[](https://github.com/becheran/fast-hilbert/actions?workflow=Test)
[](https://docs.rs/fast_hilbert)
[](https://crates.io/crates/fast_hilbert)
[](https://crates.io/crates/fast_hilbert)
[](https://opensource.org/licenses/MIT)Fast Hilbert 2D curve computation using an efficient *Lookup Table (LUT)* and only considering the lowest order for a given input.





* Convert from discrete 2D space to 1D hilbert space and reverse
* Generalized for different unsigned integer input types (thanks [DoubleHyphen](https://github.com/DoubleHyphen) [PR#3](https://github.com/becheran/fast-hilbert/pull/3))
* Speedup via lowest order computation (thanks [DoubleHyphen](https://github.com/DoubleHyphen) [PR#2](https://github.com/becheran/fast-hilbert/pull/2))
* Very fast using an efficient 512 Byte *LUT*
* No additional dependencyBenchmarking the conversion from full 256x256 discrete 2D space to the 1D hilbert space, shows that *fast_hilbert* more than **twice as fast** compared to the fastest 2D hilbert transformation libs written in rust. Benchmarked on a *Intel i5-6400 CPU @ 2.70 GHz, 4 Cores* with *8 GB RAM*:
| Library | Time | Description |
------------------------------------------------------- |------------:| ----------------- |
| **fast_hilbert** | **0.7 ms** | Optimized for fast computation in 2D discrete space using an efficient *LUT*
| [hilbert_2d](https://crates.io/crates/hilbert_2d) | 2.5 ms | Also allows other variants such as *Moore* and *LIU* |
| [hilbert_curve](https://crates.io/crates/hilbert_curve)| 2.0 ms | Implements algorithm described on [Wikipedia](https://en.wikipedia.org/wiki/Hilbert_curve) |
| [hilbert](https://crates.io/crates/hilbert) | 32.1 ms | Allows computation of higher dimensional Hilbert curves |Especially for higher orders **fast_hilbert** outperforms other libraries by using only the next lowest relevant order instead of computing the hilbert curve bit per bit for the given input. See PR [#2](https://github.com/becheran/fast-hilbert/pull/2) and [#9](https://github.com/becheran/fast-hilbert/pull/9) for more details.
For example the computation of `xy2h(1, 2, 64)` is very fast to compute using `fast_hilbert` compared to a higher x,y pair such as `xy2h(u32::MAX-1, u32::MAX-2, 64)`:
| Library | x=1, y=2, order=64 | x=u32::MAX-1, y=u32::MAX-2, order=64 |
----------------- | ------------------: | --------------------------------------: |
| **fast_hilbert** | **4 ns** | **32 ns** |
| hilbert_2d | 73 ns | 72 ns |
| hilbert_curve | 67 ns | 49 ns |
| hilbert | 690 ns | 680 ns |