On Graph Query Optimization in Large Networks

这是我读的第一篇关于图查询的文章

但是其实跟传统数据库的一些文章研究点还是有很大的差别,我个人感觉更加偏向图论加一个最优化。首先介绍一下这个文章解决的一个问题:给定一张无向图无权图,每个点有一个属性(或者是label),然后每次查询是给一张图,查询这张图在原图中出现的所有次数。这个模型映射到现实可以是,一个人际关系网中把人分成很多职业,那我想找一个(程序员,老师,金融从业者)构成的一个三角形,看看图中有多少个这样的结构。

已经可以证明,这个问题是一个NP-hard问题。那么就考虑怎么剪枝可以降低一下开销。考虑查询图中某一个label为A的点,不加剪枝的话这个点在原图中每个label为A的点都要尝试与之匹配一下。但是现在我们可以考虑,用查询图中一点的周边信息去做文章,因为显然查询图中点的邻域信息会是原图的子集。这个文章给出的一个思路就是:对每个点记录一个k步最短路集合,比如从u出发,到v的最短路是3,那么v在u的3步最短路集合当中。然后使用最短路集合去判断,看看是不是原图的子集,从而达到一个剪枝的目的。

还有一个问题,是我当时看文章想了很久的,就是查询图中的最短路长度,可能比原图中大,这是可能查询图中最短路集合就不是原图的子集了,但是这并不能说明查询图在这个点上不能对应。我们考虑一种情况,查询图和原图完全相等,但是原图多了一条边,这时肯定有的点的最短路会比查询图中要短。这时候文章其实给了一个公式,就是你能选择最大多大的k去判断。当然k肯定越大越好,能筛掉更多的节点。但是在极端情况,k为0,就是单点匹配,最暴力的做法,k等于1,这时候如果查询图的最短路还不是原图的子集,那肯定这个点就不能匹配。因此k等于1是一个最小的k值,但是实验证明即使k等于1也能起到很好的效果。

最后就是有的点k大一些有的k小一些,然后有很多最短路,我们需要覆盖所有点,这里应用了一个最小路径覆盖,也是我们很熟悉的东西,就不过多介绍了。

posted @ 2025-04-08 01:52  Slr  阅读(9)  评论(0)    收藏  举报