用四叉树和希尔伯特曲线做空间索引概念.doc

用四叉树和希尔伯特曲线做空间索引概念.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
/81106/ 超酷算法:用四叉树和希尔伯特曲线做空间索引 阅读?·? HYPERLINK /tag/%e5%9b%9b%e5%8f%89%e6%a0%91/ 四叉树,? HYPERLINK /tag/%e5%b8%8c%e5%b0%94%e4%bc%af%e7%89%b9%e6%9b%b2%e7%ba%bf/ 希尔伯特曲线,? HYPERLINK /tag/%e7%a9%ba%e9%97%b4%e7%b4%a2%e5%bc%95/ 空间索引,? HYPERLINK /tag/algorithm/ 算法  HYPERLINK /view/270?from=jobboleblog \o Avalon探索之旅基础教程 简单绑定 \t _blank Avalon探索之旅基础教程 简单绑定  HYPERLINK /view/407?from=jobboleblog \o Gopher China 2015 上海大会 \t _blank Gopher China 2015 上海大会  HYPERLINK /view/406?from=jobboleblog \o Android必学-异步加载 \t _blank Android必学-异步加载  HYPERLINK /view/365?from=jobboleblog \o Android必学-BaseAdapter的使用与优化 \t _blank Android必学-BaseAdapter的使用与优化 本文由? HYPERLINK / 伯乐在线?-? HYPERLINK /members/demolpc demoZ?翻译, HYPERLINK /members/huanglimin 黄利民?校稿。未经许可,禁止转载! 英文出处: HYPERLINK /2009/11/Damn-Cool-Algorithms-Spatial-indexing-with-Quadtrees-and-Hilbert-Curves \t _blank 。欢迎加入 HYPERLINK /category/feedback/trans-team/ \t _blank 翻译组。 随着越来越多的数据和应用和地理空间相关,空间索引变得愈加重要。然而,有效地查询地理空间数据是相当大的挑战,因为数据是二维的(有时候更高),不能用标准的索引技术来查询位置。空间索引通过各种各样的技术来解决这个问题。在这篇博文中,我将介绍几种: HYPERLINK /wiki/Quadtree \t _blank 四叉树, HYPERLINK /wiki/Geohash geohash(不要和 HYPERLINK /geohashing/Main_Page geohashing混淆)以及空间填充曲线,并揭示它们是怎样相互关联的。 四叉树 四叉树是种很直接的空间索引技术。在四叉树中,每个节点表示覆盖了部分进行索引的空间的边界框,根节点覆盖了整个区域。每个节点要么是叶节点,有包含一个或多个索引点的列表,没有孩子。要么是内部节点,有四个孩子,每个孩子对应将区域沿两根轴对半分得到的四个象限中的一个,四叉树也因此得名。 图1??? 展示四叉树是怎样划分索引区域的 来源: HYPERLINK /wiki/File:Point_quadtree.svg 维基百科 将数据插入四叉树很简单:从根节点开始,判断你的数据点属于哪个象限。递归到相应的节点,重复步骤,直到到达叶节点,然后将该点加入节点的索引点列表中。如果列表中的元素个数超出了预设的最大数目,则将节点分裂,将其中的索引点移动到相应的子节点中去。 图2??? 四叉树的内部结构 查询四叉树时从根节点开始,检查每个子节点看是否与查询的区域相交。如果是,则递归进入该子节点。当到达叶节点时,检查点列表中的每一个项看是否与查询区域相交,如果是则返回此项。 注意四叉树是非常规则的,事实上它是一种 HYPERLINK /wiki/Trie 字典树,因为树节点的值不依赖于插入的数据。因此我们可以用直接的方式给节点编号:用二进制给每个象限编号(左上是00,右上是10等等译者注:第一个比特位为0表示在左半平面,为1在右半平面。第二个比特位为0表示在上半平面,为1在下半平面),任一节点的编号是由从根开始,它的各祖先的象限号码串接而成的。在这个编号系统中,图2中右下角节点的编号是1101。 如果我们定义了树的最大深度,不需通过树就可以计算数据点所在节点的编号:只要把节点的坐标标准化到适当的整数区间中(比如32位整数),然后把转化后x, y坐标的比特位交错组合。每对比特指定了假想的四叉树中的一个象限。(译者注:不了解的读者可看看

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档