【发布时间】:2017-01-04 20:44:57
【问题描述】:
希尔伯特立方体上的Wikipedia Article 包括对希尔伯特曲线上任意点的任意索引进行编码/解码的函数。这些算法不是恒定时间的。是否有一个恒定时间算法,给定曲线上的一个实际点(可能还有一些需要的状态),生成下一个点(和下一个状态)?
形式上,我想要一个类型State 和一个元组(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
【问题讨论】:
-
当您说“动态生成点”时,您的意思是“在希尔伯特曲线上生成随机点”还是别的什么?
-
@templatetypedef 也许我是模棱两可的,所以我在问题上添加了冗余层以使其尽可能具体。
-
您能否详细说明“曲线上的下一个点”是什么意思?曲线是连续的。
-
@templatetypedef Wikipedia 文章有一个函数
d2xy : Int -> Int -> (Int, Int)将整数转换为希尔伯特曲线上的二维点,该正方形被划分为n by n单元格。map (d2xy n) [0..]是我要增量生成的点列表。 -
@Gene 你为什么要删除你的答案?我发现它非常有用。
标签: algorithm haskell functional-programming hilbert-curve