一种基于聚类和K制造技术

技术编号:22722578 阅读:11 留言:0更新日期:2019-12-04 05:32
本发明专利技术公开一种基于聚类和K

A method based on clustering and K

The invention discloses a method based on clustering and K

【技术实现步骤摘要】
一种基于聚类和K2-tree的大规模图数据表示方法
本专利技术涉及图数据
,具体涉及一种基于聚类和K2-tree的大规模图数据表示方法。
技术介绍
图作为表示数据之间关系的基本结构,在web网络分析,生物数据分析,社会团体分析等领域有着广泛应用。传统的图数据表示方法主要分为邻接矩阵和邻接表。根据GloabalWeb统计,2019年Facebook的用户量已经超过300亿,平均每个人的好友超过300位,若采用邻接表来存储,需要接近4TB的空间。根据CNNIC统计,2019年中国网页的数量已经达到2816亿个,超链接的数量估计超过1016,若采用邻接表来存储,需要1*106TB的空间。为了支持快速的查询,通常将整个邻接表加载到内存中,但是在实际情况下,这会面临存储空间过大的问题,同时随着用户量的快速增长,图数据的存储问题也只会变得越来越严峻。可见,随着图数据的不断产生和累积,传统的图数据表示方法已经不能支持上百万个节点和边的图的存储和操作。为了解决大规模图数据的表示问题,研究者提出了K2-tree和K2-BDC大规模图数据表示方法。然而,这两种大规模图数据表示方法,分别存在以下缺陷:K2-tree机械式的划分邻接矩阵,不考虑邻接矩阵的内部结构,这将导致邻接矩阵中的稠密区域被分割,额外增加存储开销。此外,K2-tree的节点邻居查询时间跟图顶点的数目成正比,针对于上百万个节点和边的图数据,查询时间需要进一步的改善。K2-BDC仅仅考虑沿着主对角线划分邻接矩阵,远离对角线外的稠密区域不能很好的捕获。此外,K2-BDC采用DAC编码技术来进一步压缩k2-tree对应的T向量和L向量,这可能会增加节点邻居查询时间。再者,K2-BDC不能方便的压缩其他类型的图数据,其方法仅仅考虑主对角线上的分布,没有实现真正的聚类。
技术实现思路
本专利技术所要解决的是现有K2-tree和K2-BDC在表示大规模图数据的不足,提供一种基于聚类和K2-tree的大规模图数据表示方法。为解决上述问题,本专利技术是通过以下技术方案实现的:一种基于聚类和K2-tree的大规模图数据表示方法,具体包括如下步骤:步骤1、先将图数据转化为邻接矩阵表示,再将邻接矩阵划分成n2/k2个网格;步骤2、统计每个网格的密度,并将密度大于预设网格密度阈值的网格纳入到网格记录表中;步骤3、对于网格记录表中的每一个网格,计算当前网格和其它网格之间的距离:将与当前网格的距离大于预设距离阈值的网格,直接放入到簇记录表中;将与当前网格的距离小于等于预设距离阈值的所有网格,与当前网格进行合并形成新的网格后,放入到簇记录表中;步骤4、对于簇记录表的每一个网格,计算当前网格和其它网格之间的距离,并将与当前网格的距离小于等于预设距离阈值的所有网格,与当前网格进行合并形成新的网格,以此更新簇记录表;步骤5、递归重复步骤4的网格合并过程,直至簇记录表中的网格无法再合并;此时,将簇记录表中每个网格的位置即起始行、终止行、起始列和终止列形成一条记录,保存在边界表中;步骤6、将簇记录表中的每个网格转化为K2-tree表示,由此完成图数据的表示;上述n为图节点的个数,k为设定的划分参数。上述步骤6的具体过程如下:步骤6.1、对于簇记录表中的每个网格,计算当前网格的边长s:若当前网格的边长s不等于k的幂,则先增加当前网格的行和列使得当前网格的边长s等于k的幂,其中增加的行和列的元素用0进行填充,再将网格划分成s2/k2个大小相同的子矩阵;若当前网格的边长s等于k的幂,则直接将当前网格划分成s2/k2个大小相同的子矩阵;步骤6.2、先将元素中至少有一个为1的子矩阵标记为1,将元素中全为0的子矩阵标记为0;再按照子矩阵自上而下,自左而右的顺序排列上述标记值,以形成K2-tree的第一层节点;步骤6.3、对标记为1的子矩阵,先进一步划分成s2/k2个大小相同的子矩阵;再将元素中至少有一个为1的子矩阵标记为1,将元素中全为0的子矩阵标记为0;后按照子矩阵自上而下,自左而右的顺序排列上述标记值,以形成K2-tree的下一层节点;步骤6.4、递归重复步骤6.3的子矩阵划分,并形成K2-tree各层节点的过程,直到子矩阵全为0或者已经划分到单个元素为止,由此而得到当前网格的k2-tree表示;上述k为设定的划分参数。上述步骤6之后,还进一步包括查询给定节点的直接邻居的过程:对于行编号为number-line的给定节点,首先查询边界表中的每一条记录的起始行start-line和终止行end-line,并找出所有start-line≤number-line并且end-line≥number-line的所有记录;接着在簇记录表中,选出上述所找出的记录所对应的网格的K2-tree;最后对每个K2-tree均调用K2-tree的查询算法,由此得到行编号为number-line的给定节点的所有直接邻居。上述步骤6之后,还进一步包括查询给定节点的反向邻居的过程:对于列编号为number-column的给定节点,首先查询边界表中的每一条记录的起始列start-column和终止列end-column,并找出所有start-column≤number-column并且end-column≥number-column的所有记录;接着在簇记录表中,选出上述所找出的记录所对应的网格的K2-tree;最后对每个K2-tree均调用K2-tree的查询算法,由此得到列编号为number-column的给定节点的所有反向邻居。与现有技术相比,本专利技术提出了一种基于聚类和K2-tree的大规模图数据表示办法,其先采用了网格聚类算法充分的邻接矩阵中的稠密区域,从而使得大量的1值被包含在稠密区域中。相比于原始邻接矩阵,每个稠密区域的边长大大降低,减少了K2-tree查询操作中从顶层到叶子节点需要的递归次数,增加了存储空间利用率。在处理上百万个节点和边的图数据时,本方法能够对其高效紧凑准确的表示,并且还能支持节点邻居查询操作。附图说明图1是一种大规模图数据表示方法的流程图。图2是图G1对应的邻接矩阵。图3是经过网格聚类处理后的图G1邻接矩阵,其中灰色的部分为稠密区域。图4是对经过网格聚类处理后的邻接矩阵的K2-tree表示,其中(a)为cluster[0]的K2-tree表示,(b)为cluster[1]的K2-tree表示,(c)为cluster[2]的K2-tree表示,(d)为cluster[3]的K2-tree表示,(e)为cluster[4]的K2-tree表示。图5是传统的K2-tree表示。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚明白,以下结合具体实例,对本专利技术进一步详细说明。需要说明的是,实例中提到的方向用语,例如“上”、“下”、“中”、“左”“右”、“前”、“后”等,仅是参考附图的方向本文档来自技高网
...

【技术保护点】
1.一种基于聚类和K

【技术特征摘要】
1.一种基于聚类和K2-tree的大规模图数据表示方法,其特征是,具体包括如下步骤:
步骤1、先将图数据转化为邻接矩阵表示,再将邻接矩阵划分成n2/k2个网格;
步骤2、统计每个网格的密度,并将密度大于预设网格密度阈值的网格纳入到网格记录表中;
步骤3、对于网格记录表中的每一个网格,计算当前网格和其它网格之间的距离:将与当前网格的距离大于预设距离阈值的网格,直接放入到簇记录表中;将与当前网格的距离小于等于预设距离阈值的所有网格,与当前网格进行合并形成新的网格后,放入到簇记录表中;
步骤4、对于簇记录表的每一个网格,计算当前网格和其它网格之间的距离,并将与当前网格的距离小于等于预设距离阈值的所有网格,与当前网格进行合并形成新的网格,以此更新簇记录表;
步骤5、递归重复步骤4的网格合并过程,直至簇记录表中的网格无法再合并;此时,将簇记录表中每个网格的位置即起始行、终止行、起始列和终止列形成一条记录,保存在边界表中;
步骤6、将簇记录表中的每个网格转化为K2-tree表示,由此完成图数据的表示;
上述n为图节点的个数,k为设定的划分参数。


2.根据权利要求1所述一种基于聚类和K2-tree的大规模图数据表示方法,其特征是,步骤6的具体过程如下:
步骤6.1、对于簇记录表中的每个网格,计算当前网格的边长s:
若当前网格的边长s不等于k的幂,则先增加当前网格的行和列使得当前网格的边长s等于k的幂,其中增加的行和列的元素用0进行填充,再将网格划分成s2/k2个大小相同的子矩阵;
若当前网格的边长s等于k的幂,则直接将当前网格划分成s2/k2个大小相同的子矩阵;
步骤6.2、先将元素中至少有一个为1的子矩阵标记为1,将元素中全为0的子矩阵标记为0;再按照子矩阵自上而下,自左而右的顺序排列上述标记值,以形成K2-tree的第一层节点;
步骤6.3、对标...

【专利技术属性】
技术研发人员:李凤英杨恩乙
申请(专利权)人:桂林电子科技大学
类型:发明
国别省市:广西;45

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1