一种对稀疏矩阵进行压缩和查询的方法及系统的制作方法

文档序号:8487826阅读:710来源:国知局
一种对稀疏矩阵进行压缩和查询的方法及系统的制作方法
【技术领域】
[0001] 稀疏矩阵广泛应用在信息安全、内容过滤、图计算等领域,本发明旨在针对于稀疏 矩阵存在的占用空间大,信息稀疏等问题,对稀疏矩阵进行压缩,可支持对稀疏矩阵直接进 行查询访问。
【背景技术】
[0002] 稀疏矩阵可应用在信息安全,内容过滤等多个方面。在内容过滤、信息安全方面, 字符串匹配问题在入侵检测、病毒检测、文本检索、搜索引擎、生物计算等方面都有广泛的 应用。串匹配算法分类方法有很多,按照算法所使用的数据结构,可分为基于查表的匹配 算法和基于自动机的匹配算法:用散列表的形式存储模式串,匹配过程即是查找散列表的 过程,这种方法称为基于查表的匹配算法;基于自动机的匹配算法是将模式串集合用自动 机进行存储,匹配过程就是状态转移过程。由于基于自动机的匹配算法性能稳定,适用范围 广,在许多领域,比如网络数据流处理应用的各个领域中被广泛采用。然而,基于自动机的 方法所需要的存储空间大,匹配速度慢。并且,随着应用需求的不断增长,系统中的规则数 量的也在急剧增加,所以基于自动机的匹配算法空间占用急剧增大,使得匹配性能下降,算 法局部性变差,进而影响了整个系统的吞吐率。由于基于自动机的匹配算法中最终存储大 多以稀疏矩阵的形式展现,所以怎样对稀疏矩阵进行压缩,并且能够快速进行访问日益受 到研宄者的注意。
[0003] 在其他领域中,由于不同场景的产生,稀疏矩阵也应运而生。在图计算领域中,将 网页当作节点,网页之间的链接关系当作转移:若一个页面A链接到另一个页面B,则A到B 的转移边为1,否则为〇。那么就可以将网页的链入链出关系看做是自动机的转移,随着网 页数目的不断增多,往往页面的链入链出关系集中在某些密集的区域,对于整个网络图结 构而言,0的个数也是相当庞大的。所以在存储这些信息时,稀疏矩阵是一种直观而有效的 方式,它能对这些网页信息进行记录,从而使研宄者可以分析网络图之间的结构、行为。在 社交网络中,每个人当作节点,人与人的关系当作转移:当人与人之间是朋友时,他们之间 的转移边为1,否则为0。所以社交网络中人和人的关联也可以看成是网络图结构,而存储 这些节点和边时,往往也用稀疏矩阵来对其记录。在图像处理中,像素点可以看作矩阵单 元,当图像为二值图像(如医疗图像),即矩阵单元只需存储0或1的值,稀疏矩阵也就能存 储图像信息。随着现今数据规模的快速增长,存储空间爆炸等问题出现,稀疏矩阵的压缩也 就越来越受到人们的重视。
[0004] 矩阵中非零元素的个数远远小于矩阵元素的总数则称该矩阵是稀疏矩阵。稀疏矩 阵所占用的空间大,所存储的信息大多是零,现今在数学中对其多数采用三元组的方法进 行存储。然而针对稀疏矩阵空间占用大,信息存储冗余的现象,传统的三元组的方法已经不 能满足现在的需求。
[0005] 因此,研宄稀疏矩阵的压缩方法,并能有效地对其进行直接访问,在现今的图计 算、内容过滤、信息安全等诸多方面都有广泛应用。
[0006] 在文献 " [1] :Nieves R. Brisaboa Susana LadraK2_trees for Compact Web Graph Representation. String Processing and Information Retrieval Lecture Notes in Computer Science Volume 5721,2009, pp 18-30. [2]:Nieves R.Brisaboa Susana LadraCompact Representation of Web Graphs with Extended Functionality. Information Systems 39 (1) : 152-174, 2014?"中研宄者提出了一种 k2_tree 的方法,用来 解决网络图结构中关联矩阵的压缩问题。它的主要思想是将矩阵按照树的结构存储从而减 少不必要的0的个数。为了简便叙述,先讨论矩阵是方阵的情况,矩阵单元的值只有0或 1 (若原来稀疏矩阵中的值除了 0和1外还有其他值,将值转化为1)。方阵是矩阵的一种, 它的特殊之处在于行和列的长度相同。k2-t ree方法分为构建和查询两个过程,具体步骤表 述如下。
[0007] 1)构建过程如下:
[0008] 将方阵的行和列平均分为k块,那么可以将方阵分为k2个子方阵。对于每个子方 阵,若里面含有不全为零的数值,那么这个子方阵对应的节点为1,否则为0。如果节点为1, 那么继续将子方阵分为k 2块,直到边长少于k或者子方阵中的值全为0为止。由此可见, 树的高度为A =「|()匕(n是方阵的宽度)。
[0009] 构建过程中的树结构有以下特点:它根节点的孩子共有k2个节点,这k 2个节点称 之为第〇层,每个节点代表一个子方阵,节点的值为1或者〇 (子方阵中的值全为〇时节点 值为〇,否则为1);值为1的节点又有k2个子节点……直到遍历到方阵中元素。
[0010] 优化策略:增添rank操作
[0011] 在上述两个文献中,为了使得查询简便,研宄者增加了 rank操作。rank操作是为 了减少查询时间所提出的。rank操作原始目的是为了压缩存储k叉树,理论上能在0(1)的 时间复杂度进行。定义Rank (T,m)表示对于数组T,它从第一个位置为1的点到第m个位置 之前1的个数。它的目的是为了在查询过程能够快速定位孩子节点的位置,从而获取孩子 节点的信息。
[0012] 综上所述,构建过程的存储结构分为三个:
[0013] ? T(tree):以比特位的形式存储高度为h-1的所有节点,存储的顺序按照高度递 增的形式从左至右进行。首先存储根节点的k 2个子节点(即第0层),然后存储下一层的 节点,直到第h-2层。
[0014] ? Rank(tree):存储T(tree)中当前位置之前(包含自身)1的个数。
[0015] ? L(leaves):存储最后一层的节点,即第h-1层的节点。它表示原来方阵单元的 真实信息。
[0016] 例如图1 :原方阵是一个行宽为4的矩阵,k = 2。按照k2-tree的方法得到的树结 构如图所示。原始的方阵被分为4个子方阵,其中第二个和第三个子方阵内部的值全为0, 对应的节点值为0 ;其他的子方阵还存在1的值,对应的节点值为1。然后将子方阵阵再次 分割成4个子方阵,得到了第二层节点值,由于新得出的子方阵不能再次分割,所以结束树 结构的构建。其中第〇层的节点为1001,第1层的节点为11011110。每次分成的子方阵存 储的顺序以行优先存储,即为左上、右上、左下和右下。可知:T(tree) = 1001,Rank(tree) = 1112,L(leaves) =11011110。由此。构建过程完毕,当查询原方阵某个单元时,利用前 面所叙述的三个结构,即可以进行直接查找。接下来介绍查询过程的步
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1