← ギャラリーへ

ヒルベルト曲線 — 1 本の線が正方形を埋めるとき、守れる「近さ」は片方だけ

藍色の1本の線が折れ曲がりながら正方形を隙間なく埋めている。64×64のマスを4,096歩でたどるヒルベルト曲線
次数 6 のヒルベルト曲線。64×64 = 4,096 マスを、隣のマスへ 1 歩ずつ、1 本の線で全部通る。線を太くすると迷路にも織物にも見える

なにか

線は 1 次元、面は 2 次元——なのに 1 本の線で正方形を「埋め尽くす」ことができる。1890 年に Peano が式で示し、1891 年に Hilbert が図で描ける形にした。作り方は自己相似で、正方形を 4 つに割って小さい曲線を回して置き、それを繰り返す。次数を上げるほど線は面に近づき、極限では正方形のすべての点を通る。身近には、刺繍やプリント基板の一筆書き、画像の走査順、地図の検索索引(近い場所を近い番号にする)に使われる。

「近さ」は 2 方向ある

16×16を埋める4本の線(ヒルベルト・Moore・蛇行・Z順)と、次数を上げたときの2つの局所性のグラフ
上=同じ 16×16 を埋める 4 本の線(番号順に色を薄く)/下=次数 n を上げたときの「番号が近い→場所が近い」と「場所が近い→番号が近い」の物差し

線でマスに番号をつけるとき、望みは 2 つある。番号が近ければ場所も近い(線をたどれば近くにいる)と、場所が近ければ番号も近い(隣のマスは番号も隣)。この 2 つを、ヒルベルトと、行ごとに折り返す蛇行、ビットを交互に並べる Z 順(Morton)で測った。

★前者を守るのはヒルベルトだけだった。全対で |Δp|²/|Δi| の最大をとると、次数 2〜6 で 2.5 → 3.6 → 4.5 → 5.2 → 5.6 と頭打ち(蛇行は 63・Z 順は 3,970 と、マスの数 N とともに伸びる)。この頭打ちの値は Hölder 1/2 の定数で、文献の 6 に下から近づいている(6 は伝聞)。

★後者はどの線も守れない。隣り合うマスの番号差の最大は、ヒルベルト ⌊5N/6⌋・Z 順 (N+2)/3・蛇行 2√N−1(n=3〜7 で式に一致)。つまりヒルベルトがいちばん悪く、蛇行がいちばんよい。1 本の線には端が 2 つしかないので、面を埋めればどこかで隣のマスが遠い番号になる——ヒルベルトはその代わりに「線をたどれば近い」方を定数で守っている。

作り方は 2 経路で照合した。L-system の亀(A → +BF−AFA−FB+, B → −AF+BFB+FA−)とビット演算(番号 d を 2 ビットずつ読んで回転・鏡映)が、次数 1〜5 の 4〜1,024 点で完全一致。⚠️ 全対の最大は 4ⁿ 点の総当たりなので n=6(840 万対)まで。⚠️ Moore 曲線(次数 n−1 のヒルベルト 4 本を回して閉じる)は最後の点が最初の隣に戻る輪で、一筆書きの刺繍に向く。

→ ドラゴン曲線(同じく 1 本の線が面を埋める。こちらは折り紙から)

→ フィボナッチ・ワード(置換で伸びる、もうひとつの 1 次元)

→ コーラム(一筆書きの、もうひとつの型=輪をつなぎ替える)

どう作ったか

generators/hilbert.js。ヒルベルトは L-system とビット演算の 2 実装、対照に蛇行・Z 順・Moore。機械検査は 10 件: 2 経路の点列が完全一致、順列+歩幅 1(次数 2〜7)、自己相似、Moore が閉じる、箱数え 4^k、★Hölder 比が単調で 6 未満・対照は伸びる、★隣の番号差の最大が 3 曲線とも閉じた式に一致、出荷SVG 2 枚。

出典

数理
D. Hilbert, "Über die stetige Abbildung einer Linie auf ein Flächenstück", Math. Ann. 38 (1891)/G. Peano (1890)/E. H. Moore (1900)。⚠️ Hölder 1/2 の定数「6」は伝聞で、ここでは測った値が下から近づくことだけを示した
親戚
ドラゴン曲線フィボナッチ・ワードコーラムペンローズ(置換で作る自己相似)
生成
generators/hilbert.js(hilbert.svg 次数 6・hilbert-book.svg 4 本の線と 2 つの局所性)