ヒルベルト キューブに関するウィキペディアの記事には、ヒルベルト曲線上の任意の点との間で任意のインデックスをエンコード/デコードする関数が含まれています。これらのアルゴリズムは一定時間ではありません。曲線上の実際のポイント (および、おそらくいくつかの必要な状態) を指定して、次のポイント (および次の状態) を生成する定数時間アルゴリズムはありますか?
正式には、 を適用するたびにヒルベルト曲線の次の点が得られ、それが最適であるように、 typeState
と tupleが必要です。これは、ウィキペディアで提示されているアルゴリズムには当てはまらない可能性があります。ここにあるインクリメンタル計算の機会。図:(initialState, nextState) :: (State, State -> ((Nat, Nat), State)
nextState
nextState
data State = _
initialState :: State
initialState = _
-- This must be optimal
nextState :: State -> ((Nat, Nat), State)
nextState = _
-- Returns the `nth point` of the hilbert curve
hilbertPoint :: Nat -> (Nat, Nat)
hilbertPoint n = iterate (snd.nextState) initialState !! n