gpt4 book ai didi

algorithm - 是否有用于递增生成希尔伯特点曲线的恒定时间算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:05:54 25 4
gpt4 key购买 nike

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

最佳答案

如果您的意思是“是否有一种算法可以按每个顶点的 O(1) 成本顺序生成希尔伯特曲线的顶点?”答案是肯定的。这是递归的标准练习。如果您有用于发射顶点的常用海龟图形基元,它看起来像这样:

-- Angle must be + or - 90.0 degrees.
procedure Hilbert(Order : in Natural;
Angle : in Float) is
Step : constant Float := 1.0; -- length of base case edge
begin
if Order > 0 then
Turn(Angle);
Hilbert(Order - 1, -Angle);
Walk(Step);
Turn(-Angle);
Hilbert(Order - 1, Angle);
Walk(Step);
Hilbert(Order - 1, Angle);
Turn(-Angle);
Walk(Step);
Hilbert(Order - 1, -Angle);
Turn(Angle);
end if;
end Hilbert;

开始递归

Hilbert(7, 90.0);

获得 7 阶曲线。

添加

由于您似乎对迭代器模式感兴趣,您可以使用上述逻辑和带有生成器的语言(如 Python 或 Ruby),或者您可以使用常用的递归到迭代代码转换技术自己实现生成器.

关于algorithm - 是否有用于递增生成希尔伯特点曲线的恒定时间算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39195743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com