最近邻居搜索——压缩存储

原创 2013年12月03日 16:38:09

1. 问题定义

最近邻搜索就是在空间数据库中找出包含查询关键字且离查询点最近的k个数据点,其中k为常数。

2. 现有方法

2.1IR2-tree(Information Retrieval R-tree)

基本思想:

(1) 利用哈希将每个关键字映射为位串(bit string);

(2) 用R树将组织所有数据;

(3) 将位串信息嵌入到R树结点中作为关键字信息,叶子结点的关键字信息为该点的位串,非叶子结点中关键字信息为其所有孩子的关键字信息的与(&)。

如图2-1所示,关键字映射的位串如表2-1所示,建立的IR2-tree结构如图2-2所示。


图2-1 数据图

表2-1 关键字位串映射表


图2-2 IR2-tree

检索过程:

(1) 求出所有查询关键字的“与(&)”Qk

(2) 从IR2-tree树根开始遍历关键字信息与包含Qk的所有结点且离查询点较近的结点(非叶子指到矩形的距离);

(3) 当该结点为叶子结点时需验证是否确实包含所有关键字,若包含则为结果;反之继续计算,直到找到k个结果。

2.2Inverted Index

基本思想:

(1) 建立关键字倒排表;

(2) 查找包含关键字的倒排,对链表求交集可得包含全部关键字的结点。

(3) 计算节点到查询点的距离,可得top-k。

例,如图2-3 a为数据图,图2-3 b为结点包含的关键字信息,其倒排表如图2-4所示。


图2-3


图 2-4 倒排表

3. 作者

现有方法分析:IR2-tree存在错误命中(false hit)的问题造成多次的无效访问;Inverted Index方法需要多次的I/O操作去得到位置信息。针对于此作者提出了SI-index(SpatialInverted list)结构并利用z-curve对倒排表进行了压缩存储。

作者的SI-index倒排中除了存储结点id外还保存了位置信息,如图3-1所示为图2-3 a的SI-index。检索方法与InvertedIndex类似,不再重复。


图 3-1 SI-index

压缩原理:如有一组有序数12 , 15 , 23 , 24 , 41 , 50 , 52 , 59,若直接存储需要log259 = 6个bit位。如果只存储第一个数,其它数只存与它前一个的差值,即存储序列:12 , 3 , 8 , 1 , 17 , 9 , 2 , 7,仅需要⌈log217⌉ = 5个bit位。

以二维空间作为例子叙述压缩存储空间全过程。对于图2-3中的结点p4 = (5, 4) = (010,100),令Z-value(p4) = 011000,注意到红色的部分来自x坐标,黑色的为纵坐标。类似可将每一个结点的坐标转化为一个数。随后将这些数排序,按照压缩原理进行压缩存储。给从新排序的结点以新的id,从而id也可以压缩且与坐标保持一致性。如图3-2为图2-3的压缩存储结果。


图 3-2 压缩存储结果

为了方便查询,进一步将压缩存储结果进行了分块存储,每一块开始均为真实值。

检索过程与Inverted Index类似,但需要解压缩。

4. 个人思考

采用压缩的方式“提升”了内存存储的信息量,或可将全部信息放入内存,只在必要时对相应的信息进行解压缩,但对于I/O操作还是具有绝对的优势。

作者的编码方式是基于z-curve的,按照z-curve组建的线性空间应该能保证在实际空间相近的点在线性空间也应该靠近。但作者给出的答案貌似不是特别相符,思考中……

 

 

 

论文:Fast Nearest NeighborSearch with Keywords

版权声明:本文为博主原创文章,未经博主允许不得转载。

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

剪辑近邻法及压缩近邻法-matlab实现

% =====================压缩剪辑近邻算法(Condensing)==================== % s: 划分的子集数目 % Xn: 当前样本集 % Xcur: 当前...

R语言与机器学习学习笔记(分类算法)(1)K-近邻算法

前言 最近在学习数据挖掘,对数据挖掘中的算法比较感兴趣,打算整理分享一下学习情况,顺便利用R来实现一下数据挖掘算法。 数据挖掘里我打算整理的内容有:分类,聚类分析,关联分析,异常检测四大部分。其中分类...

KNN最近邻算法(K-NearestNeighbor)

KNN最邻近算法

近似最近邻算法总结

当数据个数比较大的时候,线性搜索寻找KNN的时间开销太大,而且需要读取所有的数据在内存中,这是不现实的。因此,实际工程上,使用近似最近邻也就是ANN问题。 这里总结下常见的使用方法和相关的论文。...

近似最近邻问题相关算法总结

当数据个数比较大的时候,线性搜索寻找KNN的时间开销太大,而且内存开销也比较...
  • guoyilin
  • guoyilin
  • 2014年09月29日 13:14
  • 10737

Phase 1:HHVBF+UWALOHA,为每个节点存储邻居节点的信息

统计RTS/CTS等信息 张蕾老师提的建议,因为现在broadcast获取周围信息不太靠谱,可以在节点内部存储邻居节点的信息,然后进行RTS/CTS的包统计,根据统计结果判断信道信息。 思路:...

Frogs' Neighborhood——(青蛙的邻居)

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 7882   Accept...

重温OSPF——OSPF邻居建立

OSPF:OpenShortestPathFirst OSPF路由协议是由IETF组织开发,作为RIP路由协议的替代协议,解决RIP路由协议的固有问题。是IETF组织推荐使用的IGP协议。OSPF路...
  • kuntju
  • kuntju
  • 2015年11月08日 16:53
  • 579
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最近邻居搜索——压缩存储
举报原因:
原因补充:

(最多只允许输入30个字)