Hilbert Curve Shuffle

カードを正方形のグリッドに並べ、ヒルベルト曲線がたどる順に拾い直すと、1 つの決まったシャッフルが得られます。空間充填曲線が近い場所を近いまま保つ性質が、並びにどう表れるかを見ます。

ヒルベルト曲線

位数 nn のヒルベルト曲線は 2n×2n2^n \times 2^n のグリッドの全マスを 1 度ずつ通ります。マス数は

N=4nN = 4^n

で、隣り合うステップは必ず上下左右に 1 マスだけ動きます。曲線に沿って近い 2 点はグリッド上でも必ず近く、 この「局所性の保存」が空間充填曲線の要です。

曲線に沿って拾う

64 / 64 (x, y) = (7, 0)

グリッドの色は並べたときの位置(左上から右へ、行ごとに虹色)です。曲線が通ったマスだけ濃く表示しています。 拾った順に並べ直すと、下の帯になります。

シャッフル前後

上が並べたときの順、下がヒルベルト曲線で拾い直した順です。色は元の位置を表すので、下の帯の色の乱れ方がそのままシャッフルの強さになります。

シャッフル前

シャッフル後

虹がバラバラにならず、ある程度まとまった色の帯として残るのが特徴です。曲線が局所性を保つため、 近い位置のカードは散らばりきりません。

カードはどれだけ動いたか

位置 ii に来たカードの元の位置を π(i)\pi(i) として、移動距離 π(i)i|\pi(i) - i| を並べたものです。 自己相似な階段状の形が現れます。

  • 最大移動距離: 56
  • 平均移動距離: 19.7 枚(デッキ 64 枚中)

繰り返しシャッフル

1

同じシャッフルを繰り返すと、必ずいつか元の並びに戻ります。戻るまでの回数は巡回置換の各サイクル長の最小公倍数です。(スライダーは 60 回までです)

位数 nデッキ枚数サイクル数最長サイクル動かない枚数元に戻るまで
142313
21666330
3644431774
4256813229,240
51024103202410,667,840

元に戻るまでの全過程

0 回目(並べたまま)から 1 行ずつ、シャッフルを 1 回かけた並びを積み上げたものです。Riffle Shuffle のページと同じ見方で、グラデーションが崩れてまた揃うまでを追えます。

774 回で元の並びに戻ります(最終行が 0 回目と同じ並びです)。

性質

  • 曲線の連続する 2 ステップは必ずグリッド上で隣接するため、 シャッフル後に隣り合うカードは元のグリッドでも隣どうしです。
  • 先頭のカード(位置 0)は必ず動きません。曲線が常に左上から始まるためです。
  • リフルシャッフルと同じく、繰り返せば必ず元に戻ります。ただし戻るまでの回数は デッキの大きさに対して急速に増えます。
  • 局所性を保つ並べ替えなので、画像のタイル分割やデータベースの空間インデックス (Z オーダーの改良版)として実用されています。