问题标签 [hilbert-curve]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1681 浏览

algorithm - 关于 Codility 的 HilbertMaze 任务

谁能给我一个关于如何从 Codility 处理以下任务的提示:https ://codility.com/programmers/task/hilbert_maze/

我可以通过生成迷宫并使用 BFS 搜索最短路径来找到最短路径,但由于最坏情况的时间复杂度预计为 O(N),我认为这不是正确的方法去。BFS 的时间复杂度为 O(|V| + |E]),其中 V 是顶点数,E 是边数。例如,如果 N = 3,我们有一个大小为 17x17 的网格,很明显我们无法在 3 步中找到路径。

因此,指示的时间复杂度是错误的,应该是 M^2 之类的东西,或者有一个快速技巧可以在不使用图形算法的情况下简单地计算两点之间的距离。我找到了一些用于计算 2 个给定点的希尔伯特距离的算法(如果这里需要的话),它们使用位操作等,但根本无法理解它们。此外,我认为任务的目标是自己找出如何计算距离,而不是使用现有的公式。

有没有人解决了这个任务并且可以进一步帮助我?谢谢!

0 投票
1 回答
460 浏览

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

关于希尔伯特立方体的维基百科文章包括对希尔伯特曲线上任意点的任意索引进行编码/解码的函数。这些算法不是恒定时间的。是否有一个恒定时间算法,给定曲线上的一个实际点(可能还有一些所需的状态),生成下一个点(和下一个状态)?

形式上,我想要一个 typeState和一个 tuple (initialState, nextState) :: (State, State -> ((Nat, Nat), State),这样每个应用程序nextState都会为我们提供希尔伯特曲线的下一个点,并且这nextState是最优的,这可能不是 Wikipedia 上提供的算法的情况,因为它可能会错过我们在这里拥有增量计算的机会。插图:

0 投票
0 回答
139 浏览

c - 将勒贝格曲线转换为希尔伯特曲线

我将空间数据映射到一维区间上。首先,我使用填充勒贝格曲线(或 Z 曲线)来连接我的点。这很有效,如果我使用 gnuplot,我会得到以下图:

在此处输入图像描述

然后我想将勒贝格曲线转换为希尔伯特曲线。但它不起作用。这是输出:

在此处输入图像描述

所以它似乎在一开始就起作用。但是过了一会儿奇怪的事情发生了,我不知道为什么。

这是我的代码:

有人看到我错过了什么吗?

0 投票
1 回答
148 浏览

r - 如何将按位函数从 matlab/C 转换为 R?特例:希尔伯特曲线算法

我正在尝试将用 matlab 编写的脚本翻译为 R。该脚本根据希尔伯特曲线将 1D 坐标映射到 2D 坐标。

脚本中有一行我不知道如何翻译成 R:

我认为有一个带有 bitxor() 函数的 R 包,但不确定如何处理 uint8()。

帮助表示赞赏!

完整的 matlab 脚本可以在这里找到:

https://people.sc.fsu.edu/~jburkardt/m_src/hilbert_curve/d2xy.m

脚本中调用的 rot() 函数在这里:

https://people.sc.fsu.edu/~jburkardt/m_src/hilbert_curve/rot.m

C 版本可以在这里找到:

https://en.m.wikipedia.org/wiki/Hilbert_curve

一些背景,以防感兴趣:我是一名业余编码员。通常我只编写我理解从一行代码到下一行代码的逻辑流程的程序。在这种情况下,我不理解逻辑,但我知道我想要它做什么,并且非常希望它能够盲目地完成这项任务。

特别是我不知道 bitxor() 和 unint8() 函数在做什么,尽管我理解 xor 逻辑门原则上是什么。

如果那里有好心人翻译整个剧本,我不会抱怨。

0 投票
0 回答
608 浏览

hilbert-curve - 希尔伯特曲线:实现 N 维

希尔伯特曲线维基百科文章包含一些 C 代码,显示如何将坐标映射到曲线,但它仅适用于二维。我很难找到适用于 N 维的任何示例(曲线示例很多,但映射函数却没有)。有人有任何代码或算法的描述可以分享吗?

我目前在旋转功能上受阻。我可以猜到,但由于我找不到任何类型的论文或其他使用我能理解的语言的描述,所以我无法确定我最终会得到什么。

请注意,我希望看到像维基百科版本一样简单的东西。看来我要进行的突变也应该非常简单。我在将N 维值映射到希尔伯特曲线上的一个点上找到了 SO 帖子,但它是如此复杂,并且与我开始使用的设计相比如此陌生(尽管两者都是非递归的,所以看起来它们应该更相似)它在我看来完全不透明。

0 投票
2 回答
260 浏览

python - 我如何确保我的希尔伯特曲线总是填充同一区域的空间?

我已经制作了 3 个函数来绘制希尔伯特曲线。这更像是一个数学问题,但我会包括编码以防万一。我使用turtle python模块来绘制。

第一个,这个让我推导出一个列表。

第二个,这个派生第n次

第三个函数绘制曲线:

boardrese() 是一个重新初始化绘图板的函数。

这是我必须为课堂做的一个项目。我几乎完成了,但根据我的教授的说法,无论您导出多少次列表,绘图必须始终填充一个大小不变的正方形。

基本上,我需要对绘图函数的长度参数做一些数学运算。我只是不知道是什么。我试过 l/n,l/(“F”出现在最终列表中的次数),l/(最终列表的长度)...

谢谢

0 投票
1 回答
341 浏览

java - 如何在 JFrame 中实现希尔伯特曲线

我正在尝试基于希尔伯特曲线制作一个项目。我能够在 Applet 中使用代码,但我需要它在 JFrame 中工作,因为我需要一次打开多个框架来展示我的项目。我在下面的小程序中有代码,但我不知道如何更改为 JFrame。

在小程序形式中,它就像下面的代码:

我试着自己把它放到 JFrame 中,但我做不到。JFrame 打开,但 HilbertCurve 没有启动。下面是我的代码,我没有更改 SimpleGraphics 类

}

0 投票
1 回答
1281 浏览

3d - 将 3D 坐标转换为空间填充曲线的索引(Peano、Hilbert...)

虽然将 3D 坐标转换为 z 阶曲线相对简单(Fortran 中的高效 z 阶转换),但我很难围绕使用不同空间填充曲线的数学问题,例如 Peano 或 Hilbert。任何有关如何进行转换的实际代码的提示都将不胜感激。目标是有一个子程序,它将 xyz 坐标作为输入,并进行必要的标准化,并返回空间填充曲线的索引。

子程序(x,y,z,space_filling_index)

与此相关:我读到有很多方法可以在 3D 空间中定义希尔伯特曲线,哪一种在局部性方面最好?如果有一个明确的答案...

该应用程序将重新排序笛卡尔计算网格中的单元格,目标是在单元格访问其相邻单元格时增加缓存命中。

0 投票
0 回答
107 浏览

java - 带有坐标矩阵的 Applet 中的希尔伯特曲线

我试图用希尔伯特曲线程序近似解决旅行推销员问题。我必须通过使用小程序来做到这一点。如何在我的代码中添加矩阵,以及如何在 Applet 中显示坐标。我不需要超过一帧。

代码如下:

我需要在矩阵中设置城市,然后当我到达一个城市时在城市之间画一条线,以便找到到达它的最短路径。

0 投票
1 回答
593 浏览

python - matplotlib 不能绘制彩色希尔伯特曲线?

我正在尝试使用 matplotlib绘制彩色 2D希尔伯特曲线。得到xy坐标后,一个平原ax.plot(x,y)给出了正确的曲线,但如果我想使用本文介绍的技术对曲线进行颜色编码它会给我一个空画布(因此未显示)。

奇怪的是,原始答案中显示的随机路径有效。

我的代码如下:

我错过了一些明显的东西吗?

我的设置:

  • python=2.7.14,在 anaconda 4.4.10
  • matplotlib=2.0.2=py27h334a7c2_1,也测试了2.1.2=py27h0e671d2_0
  • numpy=1.14.1