论文部分内容阅读
图是计算机科学技术中一种重要的数据结构。随着计算机科学技术的不断发展,出现了越来越多的以图为逻辑表达的数据。例如社会网路,蛋白质交互网络,分子化学式等等。而且,这些图数据的数量也在不断地增加,例如社交网站上的注册用户多达几千万甚至是上亿,从而产生了基于互联网的大规模社会网络数据。如何有效地管理这些数据,已逐渐成为信息化领域中热门研究问题之一。对图的操作具体包括:(1)如何建立有效地存储机制和索引策略,(2)如何在海量图数据库中进行高效的查询。在图上进行子图查询是图数据管理的基本操作之一。子图查询的定义是:给定一个查询图Q和一个数据图G,在数据图G中寻找所有与查询图Q匹配的子图。目前的子图查询算法多数采用子图同构算法,由于子图同构算法是典型的NP-完全问题,其查询效率非常低。为了改善子图查询算法的效率,本文提出了一种基于顶点编码的方式来创建数据图的索引,在这种索引基础上进行子图查询操作。为了降低查询匹配的次数,首先对索引结构进行剪枝,然后根据查询顶点信息查找顶点匹配对,最后在顶点匹配对中查找匹配子图。由于基于顶点编码的索引结构是以整个数据图为单位创建的,索引结构不易更改而且索引表所占内存空间比较大。为了减少索引空间的利用,本文对基于顶点编码的子图查询进行改进,提出了一种基于代码块的子图查询算法,这种算法的基本思想是:将数据图分割成无数小的分区,然后再在这些小的分区中查找子图。由于这种算法存在匹配过界问题,所以我们对交叉边也进行存储。并且在查询过程中,遍历交叉边索引,如果交叉边两端的顶点与查询顶点匹配,则以交叉边两端的顶点为起点进行深度优先遍历,其深度是查询图的深度,形成一个新的块,并将其放入数据图索引中。最后,调用基于顶点编码的子图查询算法,输出与查询图匹配的所有匹配子图。经过实验分析,文中提到的算法的索引创建方法比较简单,空间利用率较高,查询效率相对较高,适合海量数据图的存储以及在海量数据图中进行子图查询。