希尔伯特空间填充曲线
- 格式:doc
- 大小:6.23 KB
- 文档页数:2
希尔伯特曲线及性质的形式化理解希尔伯特曲线是⼀条填满整个平⾯的神奇曲线, 其构造⽅式是把前⼀阶的曲线复制四份, 将左下⾓和右下⾓的曲线做⼀个沿对⾓线的翻转, 然后增加三条线段把这四份连起来.这些曲线的极限就是希尔伯特曲线.n阶的希尔伯特曲线是从[0,1]区间到[0,1]×[0,1]平⾯区域的映射f n, 把0和1映射到区域左下⾓和右下⾓:f n(0)=(0,0),f n(0)=(1,0)并且, 通过适当的调整,让每个1/4的⼩区间映射到4个区域内.填充整个区域的希尔伯特曲线是这样的函数f, 使得函数列f n逐点收敛到它. 即:f(x):=limn→∞f n(x)下⾯将说明这样的定义符合直观理解——填充区间, 曲线.1. Hilbert曲线的性质良定义⾸先要说明这个定义是well-defined, 即对于所有的x, f n(x)确实收敛. 我认为这个可以从区间套来说明. 不管x取定义域中的什么值, 都可以不断将区间四等分, ⽤长度为1/4,1/16,1/64的区间套来套住, 由于不同阶Hilbert曲线的定义, 对应的函数值也落在相应的区域套内. 这样形成⼀系列闭区域的套, 总有⼀个确定的极限值.这⾥有个问题就是,当x是两个四等分区间的交点时应该取左边的区间继续等分,还是取右边的区间继续等分. 这⾥应该能够证明取哪个得到的极限都是⼀样的, 这也是曲线连续性的要求.填充整个区间是的, Hilbert函数的取值遍布整个单位平⾯区域. 不信的话在[0,1]×[0,1]⾥⾯随便选⼀个点(x,y), 将平⾯不断四等分为上下左右四个闭区域, ⽤同样的⽅法, 能对应到定义域⾥的闭区间, 最后套出⼀个⾃变量x0来, 使得f(x0)=(x,y) .这⾥要是选择的点落在边界上应该选哪个区域继续四等分呢? 这时选不同的点就不⼀样了. ⽐如(1/2,0)点,其实会有左右两个x,都能逼近这个点. 这恰恰说明, Hilbert曲线, 是满射(映上的), 不是单射(1-1的), 所以也不是双射.仍然是曲线曲线要求是[0,1]到R2上的连续映射. 这⾥的连续性还⽐较好说. 对于值域中的点(x,y), 选择⼀个任意⼩的ϵ邻域,都可以在⾥⾯找到更⼩的1/4k×1/4k⼤的(对齐的)闭区域, 对应到定义域是⼀个闭区间, 然后找到更⼩的δ开区间, 这⾥的所有点都会映射到ϵ领域中.因为Hilbert曲线不是单射, 故不存在逆映射. 不能说Hilbert曲线让直线段和平⾯区域拓扑同胚了.2. 应⽤有了填满单位区域上的曲线, 将它螺旋填充就能找到填满整个平⾯的曲线了.这⾥找到了⼀个满射, 说明集合R的势⾄少和R2⼀样⼤. 其实这两个是等势的. 不过Hilbert不是⼀个双射. 确实存在这两个集合的双射, 好像也有⼈也证明了这两者的双射也不会连续.这⾥的Hilbert曲线弯曲太多, 有了⽆穷⼤的长度, 甚⾄都占据了⾯积. 这有点分形的味道. 在上⾯的视频⾥也有更多说明. 感兴趣的可以去看看.视频⾥⾯还说到⼀种神奇的应⽤: 通过⽿朵来产⽣视觉, 脑洞很⼤很有趣.3. 附录把Hlibert曲线着⾊以后是这样的, 从紫⾊到蓝⾊再到绿⾊和黄⾊, 说明了⾃变量x不断增⼤:本⽂中两图的⽣成脚本如下:from matplotlib import pyplot as pltimport numpy as npimport math# generate psedo Hilbert curve - the function from 1d to 2dorder = 11phc = [[[0,0]] # order 0]for o in range(order):new_phc = []new_phc += [[y, x] for x, y in phc[o]] # left bottomnew_phc += [[x, y + 2**o] for x, y in phc[o]] # left topnew_phc += [[x + 2**o, y + 2**o] for x, y in phc[o]] # right topnew_phc += [[2**o - 1 - y + 2**o, 2**o - 1 - x] for x, y in phc[o]] # right bottomphc.append(new_phc)# plot these curvesfor o in range(order):fig = plt.figure(o, figsize=(6,6))plt.axis('off')plt.plot(list(map(lambda p:p[0], phc[o+1])),list(map(lambda p:p[1], phc[o+1])))fig.savefig('order_{}.png'.format(o+1))if o+1 != order:plt.close(fig)plt.show()# colorize the pixels in order, for visualizationsize = 2**orderimax = size*sizeimage = [[0]*size for i in range(size)]i = 0for x,y in phc[order]:image[size-1-y][x] = ii += 1plt.imshow(image)plt.show()plt.imsave('hilbert.png', image)Loading [MathJax]/jax/output/HTML-CSS/jax.js。
希尔伯特曲线transformer
希尔伯特曲线(Hilbert Curve)是一种空间填充曲线,具有一定的连续性和局部性质。
在Transformer模型中,希尔伯特曲线被用作序列数据的重新排列方法,以改善模型对输入序列的理解。
在Transformer中,序列数据通常以一维形式输入,例如自然语言处理中的文本序列。
希尔伯特曲线通过将一维序列映射到二维空间中的曲线路径,然后再将其展平,从而对序列的局部和全局关系进行更好的编码。
以下是使用希尔伯特曲线进行序列数据重排的一般步骤:
1.序列映射到坐标:将一维序列中的每个元素映射到希尔伯特曲
线上的二维坐标。
这通常涉及到计算元素在曲线路径上的位置。
2.坐标排序:对映射到二维坐标上的序列进行排序,以便确保相
邻的元素在曲线上也是相邻的。
3.展平:将排序后的二维坐标重新映射回一维序列。
这样,原始
序列中相邻的元素在展平后仍然保持相邻,但其在希尔伯特曲线上的位
置可能有所不同。
通过这种方式,希尔伯特曲线的使用可以使模型更好地捕捉序列中的局部和全局关系,从而提高其性能。
这种技术在处理长序列数据时尤为有用,因为它有助于减轻模型对长距离依赖性的建模问题。
希尔伯特曲线是一种空间填充曲线,它能够以连续的方式覆盖一个完整的正方形区域。
这种曲线是由德国数学家大卫·希尔伯特在19世纪末发现的,它是数学和计算机图形学中的重要概念之一。
在本文中,我们将使用Mathematica 软件来生成和可视化希尔伯特曲线。
首先,我们需要了解如何生成希尔伯特曲线。
希尔伯特曲线的生成算法可以使用递归函数来实现。
具体来说,我们可以将一个正方形分成四个相等的小正方形,并对每个小正方形应用相同的变换,然后将它们组合在一起以形成更大的正方形。
通过递归地应用这个过程,我们可以生成任意阶数的希尔伯特曲线。
以下是一个用 Mathematica 实现希尔伯特曲线的示例代码:```mathematicaHilbertCurve[n_] :=Module[{t = (1 + 3 I)/2, points = {{0, 0}}},Do[points =Flatten[Table[t^(n - k) (points + {j, j} + {0, 1}) + {j, j}, {j, 0,2^(k - 1) - 1}, {k, n, 1, -1}], 1];, {i, n}]; points]```在上面的代码中,`n` 是希尔伯特曲线的阶数,函数使用递归的方法计算出曲线上的点坐标并返回它们。
接下来,我们可以使用`ListPlot` 函数将这些点连接起来并可视化曲线:```mathematican = 4;points = HilbertCurve[n];ListPlot[ReIm[points], Joined -> True, AspectRatio -> Automatic]```在上面的代码中,我们将`n` 设置为4,这意味着我们将生成一个四阶的希尔伯特曲线。
然后,我们使用`ReIm` 函数将复数坐标转换为实数坐标,并使用 `ListPlot` 函数将它们连接起来并显示图形。
希尔伯特曲线是一种连续的空间填充曲线,由德国数学家David Hilbert在19世纪90年代提出。
它是一种在二维平面上构造的路径,通常被用于计算机图形学、信号处理和数值分析等领域。
希尔伯特曲线具有以下特点:1.连续性:希尔伯特曲线是连续的,这意味着在曲线上的任何一点都可以平滑地过渡到其他点。
2.空间填充性:希尔伯特曲线具有空间填充性,即曲线可以填充整个平面或空间,使得相邻曲线之间没有空隙。
3.自相似性:希尔伯特曲线具有自相似性,即曲线的不同部分以相同的方式重复出现。
这意味着希尔伯特曲线可以通过递归地分割和细化来生成更小的曲线段。
4.计算效率:希尔伯特曲线具有较高的计算效率,因为它可以通过递归算法快速生成。
希尔伯特曲线的生成算法通常采用分治策略,将平面分成若干个小正方形,然后递归地生成填充这些正方形的曲线段。
希尔伯特曲线分为三种类型:1阶、2阶和n阶。
1阶希尔伯特曲线是最简单的,它仅包含一个正方形;2阶希尔伯特曲线包含4个正方形,并以“H”形状连接;n阶希尔伯特曲线包含2^n个正方形,并以更复杂的模式连接。
希尔伯特曲线的生成过程可以通过程序实现。
下面是一个简单的Python代码示例,用于生成2阶希尔伯特曲线:pythonimport matplotlib.pyplot as pltimport numpy as npdef hilbert_curve(level, x, y, direction):if level == 0:returnelse:x1 = x + 0.5y1 = y + 0.5x2 = x1 - 0.5 * directiony2 = y1 + 0.5 * directionx3 = x - 0.5 * directiony3 = y + 0.5 * directionx4 = x + 0.5 * directiony4 = y3 - 0.5 * directionplt.plot([x, x1, x2, x3, x4, x], [y, y1, y2, y3, y4, y], "b") # "b"代表蓝色plt.pause(0.05)hilbert_curve(level - 1, x1, y1, direction)hilbert_curve(level - 1, x2, y2, direction)hilbert_curve(level - 1, x3, y3, direction)hilbert_curve(level - 1, x4, y4, direction)def draw_hilbert(level):plt.figure(figsize=(5, 5))plt.axis("off") # 不显示坐标轴x = 0.5y = 0.5direction = 1 # 正方向或负方向hilbert_curve(level, x, y, direction) plt.show()。
希伯特曲线1. 了解希伯特曲线希伯特曲线,又称希尔伯特曲线,是一种连续、自避免、无穷曲线,具有一些独特的几何特性。
它最初由德国数学家大卫·希尔伯特于1891年提出,是众多空间填充曲线中的一种。
2. 希伯特曲线的生成希伯特曲线可以通过递归的方法生成。
首先,以一条线段为起点,根据一定的规则分成四段等长的线段,并使它们组成一个正方形。
接下来,对每个小正方形重复这个过程,将每个小正方形分成四段等长的线段,并使它们组成更小的正方形。
如此循环下去,直到无穷。
3. 希伯特曲线的性质3.1 空间填充性质希伯特曲线具有空间填充的性质,即曲线能够穿过二维或三维空间中的所有点。
这意味着希伯特曲线可以在有限的空间内覆盖无限数量的点。
3.2 曲线长度希伯特曲线是一种无穷曲线,其长度也是无穷的。
无论在何处对曲线进行测量,其长度都会趋于无穷大。
这个性质使希伯特曲线成为一个有趣的数学现象。
3.3 自相交性质希伯特曲线具有自相交的性质,即曲线在某些点上会与自身交叉。
这种自相交的特性使得希伯特曲线具有很多奇特的形状和结构。
3.4 连续性质希伯特曲线是一种连续的曲线,不含有任何间断点。
无论对于二维还是三维空间,希伯特曲线上的点都是连续的,没有任何断裂。
4. 应用领域4.1 图像处理希伯特曲线在图像处理领域有着广泛的应用。
通过将图像按照希伯特曲线进行排序,可以有效地减少图像的存储空间,并加速图像的检索和处理过程。
此外,希伯特曲线还可以用于图像压缩和图像加密等方面。
4.2 数据可视化希伯特曲线可以用于数据的可视化和压缩。
通过将数据点按照希伯特曲线进行排列,可以将数据在二维或三维空间中可视化。
这种排列方式可以有效地减少数据的维度,并展示出数据的内在结构。
4.3 路径规划希伯特曲线也可以应用于路径规划领域。
通过将路径按照希伯特曲线进行编码,可以减少路径的长度和复杂度,从而提高路径规划的效率和准确性。
5. 总结希伯特曲线是一种具有特殊几何性质的连续曲线,可以在有限空间内覆盖无限数量的点。
超酷算法:用四叉树和希尔伯特曲线做空间索引阅读·四叉树, 希尔伯特曲线, 空间索引, 算法∙Avalon探索之旅基础教程---- 简单绑定∙Gopher China 2015 上海大会∙Android必学-异步加载∙Android必学-BaseAdapter的使用与优化本文由伯乐在线 - demoZ翻译,黄利民校稿。
未经许可,禁止转载!英文出处:。
欢迎加入翻译组。
随着越来越多的数据和应用和地理空间相关,空间索引变得愈加重要。
然而,有效地查询地理空间数据是相当大的挑战,因为数据是二维的(有时候更高),不能用标准的索引技术来查询位置。
空间索引通过各种各样的技术来解决这个问题。
在这篇博文中,我将介绍几种:四叉树,geohash(不要和geohashing混淆)以及空间填充曲线,并揭示它们是怎样相互关联的。
四叉树四叉树是种很直接的空间索引技术。
在四叉树中,每个节点表示覆盖了部分进行索引的空间的边界框,根节点覆盖了整个区域。
每个节点要么是叶节点,有包含一个或多个索引点的列表,没有孩子。
要么是内部节点,有四个孩子,每个孩子对应将区域沿两根轴对半分得到的四个象限中的一个,四叉树也因此得名。
图1 展示四叉树是怎样划分索引区域的来源:维基百科将数据插入四叉树很简单:从根节点开始,判断你的数据点属于哪个象限。
递归到相应的节点,重复步骤,直到到达叶节点,然后将该点加入节点的索引点列表中。
如果列表中的元素个数超出了预设的最大数目,则将节点分裂,将其中的索引点移动到相应的子节点中去。
图2 四叉树的内部结构查询四叉树时从根节点开始,检查每个子节点看是否与查询的区域相交。
如果是,则递归进入该子节点。
当到达叶节点时,检查点列表中的每一个项看是否与查询区域相交,如果是则返回此项。
注意四叉树是非常规则的,事实上它是一种字典树,因为树节点的值不依赖于插入的数据。
因此我们可以用直接的方式给节点编号:用二进制给每个象限编号(左上是00,右上是10等等译者注:第一个比特位为0表示在左半平面,为1在右半平面。
三维矩阵变成二维矩阵希尔伯特曲线一、三维矩阵变成二维矩阵三维矩阵是指具有三个维度的矩阵,通常用于表示三维空间中的数据或信息。
而二维矩阵则是指只具有两个维度的矩阵,通常用于表示平面上的数据或信息。
那么,如何将三维矩阵转换成二维矩阵呢?这涉及到一个重要的数学概念——平铺。
平铺是指将多维数据映射到低维度的过程,其中希尔伯特曲线是一种常用的平铺方法。
希尔伯特曲线(Hilbert Curve),最早由德国数学家大卫·希尔伯特于1891年引入,是一种连续、分形的空间填充曲线。
利用希尔伯特曲线,我们可以将三维矩阵中的数据映射到二维矩阵上,实现从三维空间到二维平面的转换。
这种转换方式能够保持数据的空间局部性,即相近的数据在二维平面上仍然保持相邻的关系,有利于后续的数据分析和可视化。
二、希尔伯特曲线的应用希尔伯特曲线不仅在数学领域有重要应用,也被广泛应用于计算机图形学、数据压缩和地理信息系统等领域。
在计算机图形学中,希尔伯特曲线常被用于生成具有连续性和局部性的纹理坐标,从而实现更自然的渲染效果。
在数据压缩领域,希尔伯特曲线可用于提高数据存储和传输的效率,减少数据的冗余性。
在地理信息系统中,希尔伯特曲线能够帮助我们更好地理解地球表面的分布规律,实现对地理数据的高效管理和分析。
三、希尔伯特曲线的个人见解作为一种重要的空间填充曲线,希尔伯特曲线在数据处理和可视化方面具有重要价值。
通过将多维数据映射到一维或二维空间,希尔伯特曲线能够帮助我们更好地理解数据的内在结构和规律,为数据分析和可视化提供了新的思路和方法。
我个人认为,希尔伯特曲线的应用将会在未来得到更广泛的拓展,为数据科学和人工智能领域带来更多的创新和突破。
总结通过本文的讨论,我们深入探讨了如何将三维矩阵转换成二维矩阵,以及希尔伯特曲线在这一过程中的重要作用。
希尔伯特曲线作为一种重要的空间填充曲线,不仅在数学领域有重要应用,还在计算机图形学、数据压缩和地理信息系统等领域发挥着重要作用。
基于Hilbert空间填充曲线的WSN移动汇聚节点轨迹设计作者:李欣王亚娟来源:《现代电子技术》2016年第23期摘要:针对无线传感器网络(WSN)中部分节点不能被访问而导致数据丢失率和能耗较高的问题,提出了利用Hilbert空间填充曲线的WSN移动汇聚节点轨迹设计方法。
首先,利用依赖于网络大小的Hilbert曲线分析移动汇聚节点的轨迹;然后,基于节点密度计算Hilbert曲线的阶次以确定汇聚节点轨迹的维度;最后,利用NS⁃2仿真评估该方法在网络覆盖和可扩展方面的有效性。
仿真结果表明,随着网络中节点数的增加,移动节点覆盖率降低,提出的基于密度的Hilbert曲线在网络覆盖、数据包投递率和平均能耗方面均优于基于尺寸的Hilbert曲线。
关键词:数据传输率; Hilbert曲线;移动汇聚节点;网络覆盖;无线传感器网络中图分类号: TN92⁃34; TP393 文献标识码: A 文章编号: 1004⁃373X(2016)23⁃0017⁃05WSN mobile aggregation node track design based on Hilbert space filling curveLI Xin1, WANG Yajuan2(1. Department of Computer Engineering, Xinjiang Institute of Engineering, Urumqi 830000, China;2. Department of Information Security Engineering, Xinjiang Police College, Urumqi 830013, China)Abstract: Since the data loss rate and energy consumption are high due to that some nodes in wireless sensor network (WSN)can′t be accessed, a novel approach of using Hilbert space filling curve to design the mobile aggregation node track for WSN is proposed. The Hilbert curve depending on the size of network is used to analyzed the mobile aggregation node track. The order of Hilbert curve is calculated based on node density to determine the dimension of the aggregation node track. The NS⁃2 simulation is used to evaluate the effectiveness of network coverage and scalability. The simulation results show that the mobile node coverage rate is reduced with the increase of the nodes quantity of the whole network, and the proposed Hilbert curve based on density is superior to the Hilbert curve based on size in the aspects of network coverage, packet transfer ratio and average energy consumption.Keywords: data transfer ratio; Hilbert curve; mobile aggregation node; network coverage; wireless sensor network0 引言无线传感器网络(Wireless Sensor Network,WSN)[1⁃2]已在许多领域得到广泛应用,然而,由于部分节点没有被访问而导致数据丢失,并引起传输延迟[3],因此,需要为移动汇聚节点找到一种较好的轨迹设计方法,以有效的方式覆盖整个区域[4⁃5]。
GoogleS2,球⾯⼏何,希尔伯特曲线⾸发于/s2-geometry-sphere-cells-hilbert-curve/–翻译⾃Google’s S2, geometry on the sphere, cells and Hilbert curve–Google S2 库是个珍宝,不仅因为它在空间索引⽅⾯的优秀表现,也因为它已经诞⽣4年多却没有受到应有的重视。
S2库被⽤在Google Map、MongoDB、Foursquare上;但除了Foursquare的⼀篇论⽂、Google的幻灯⽚以及源代码的注释,你不能找到任何相关⽂章或⽂档。
你也许在努⼒的寻找S2的bingding,但官⽅代码库已经丢失了Python库的Swig⽂件,感谢⼀些fork使我们还能获取Python的⼀部分binging。
据说最近Google正积极的对S2进⾏开发,也许不久我们就能获得这个库更详细的信息,但我决定分享⼀些使⽤该库的样例,还有该库这么酷的原因。
了解cell你会在整个S2代码⾥⾯看到cell的概念。
Cell是球⾯(对我们来说是地球,但不局限于此)层次分解之后对region和point的紧凑的表⽰。
Region也可以使⽤同样的Cell近似表⽰,这种Cell有不少优秀的属性:特别紧凑(由64-bit整数表⽰)具有地理特性上的解决⽅案(译者注:resolution for geographical features)分层的(具有不同level,相似level含有相似的范围)对任意region的包含查询⾮常快⾸先,S2将球⾯上的point/region投影到⽴⽅体上,⽴⽅体的每个⾯都有⼀棵四叉树,球⾯上的点就投影在这棵四叉树上。
然后,进⾏⼀些转换(详细原因查看Google的幻灯⽚)将空间离散。
接着,Cell被映射在希尔伯特曲线上,这也是S2如此优秀的原因。
希尔伯特曲线是⼀种空间填充曲线,它将多维转为⼀维,并拥有特殊的空间特征:含有局域性信息。
希尔伯特空间填充曲线希尔伯特空间填充曲线,又被称为希尔伯特曲线、狄利克雷-费根鲍姆填充曲线,它是一个具有特殊性质的折线,可以游走于任意给定的有限维欧几里得空间,并把欧几里得空间中的所有点都遍历一遍,直到把空间填满为止。
希尔伯特空间填充曲线由德国数学家大卫·希尔伯特于1891年提出,是一种重要的数学曲线,被广泛应用于计算机科学中的曲线绘制、计算机制图、图形学等领域。
希尔伯特空间填充曲线是一条无限长的连续折线,其定义方式类似于康托尔雪花集合。
首先,从欧几里得空间中的某一点出发,绘制一条长度为1的线段。
接着,从这条线段的终点出发,绘制一条新的线段,使其与第一条线段成直角,并且长度也是1。
再从第二条线段的终点开始重复这个过程,每次向右拐弯。
直到填满整个空间之后,将会获得一个具有强继承性和可逆性的曲线,也就是希尔伯特曲线。
具体来说,如果定义希尔伯特曲线为H(x),则对于有限维欧几里得空间中的任意一点p,H(x)经过的某一段连续曲线(记为C(x))必然包含p点。
而且,对任意两个不同的点p和q,H(x)都会通过包含它们的不同线段序列。
希尔伯特曲线的应用非常广泛,特别是在计算机科学中。
首先,希尔伯特曲线具有分形特性,即它可以通过不
断细分来无限放大。
因此,它可以用于图像的压缩和分析,特别是在数字信号处理和图像处理中。
此外,希尔伯特曲线的“可遍历性”特性也使其成为计算机制图和虚拟现实等领域的一种重要曲线。
在计算机制图中,希尔伯特曲线可以用于平面图案的设计和绘制;在虚拟现实领域,希尔伯特曲线可以用于构建虚拟环境的框架。
在实际应用中,由于希尔伯特曲线具有严格的数学定义,因此计算机可以使用数学公式来对其进行处理和绘制。
多项式曲线拟合和分形变换等技术也可以被用来生成希尔伯特曲线。
总而言之,希尔伯特空间填充曲线是一个重要的数学曲线,具有分形特性和可遍历性特性,被广泛应用于计算机科学中的曲线绘制、计算机制图、图形学等领域。
在实际应用中,希尔伯特曲线可以被用于图像的压缩和分析、平面图案的设计和绘制、虚拟环境的构建等方面,具有重要的应用价值和研究意义。