目录结构
VAC-PowerPonit
现有的问题
-
属性限定查询难以估计:对于用户来说,为查询属性指定适当的条件不是一件容易的事情(难以人为规定),如果属性条件设置太苛刻(太多限制),则很可能返回一个空社区;如果属性条件设置太少,则很可能返回的社区过大,失去作用
-
难以适应多类型属性:现有的产品只能够处理单一的属性,无法处理多类型的属性
提出新的问题 VAC问题:
旨在找到最大的联通子图,该联通子图满足下列几个条件
-
包含查询节点集合
-
满足结构紧密度(文章采用k-truss描述)、
-
满足上述两个条件 具有最小的attribute score
-
不存在满足上述三个条件更大的子图
结构紧密度
-
采用k-truss来描述,其中k-truss的每一条边被k-2个三角形包围
属性紧密度
所以这个属性得分的设计还是不够灵活,不适合实际的场景
-
对于地理(数字描述)属性
-
可以采用欧式距离来计算score
-
对于u v两个节点,假设两者都只具有空间属性(数字),利用欧式距离计算u v两个节点之间的Ascore(这里需要默认排序u v两个节点之间的属性)
-
-
对于文本属性
-
利用Jaccard距离去计算两者之间的得分
-
-
假设u v两个节点既具有文本属性,又具有数字属性,权重分配来计算
-
子图的 Attribute Score 任意两点Attribute Score的最大值(最差作为来剪枝条件)
该论文的成就
-
提出新的模型VAC,证明了该问题是NP-Hard的
-
两个Exact算法,第一个算法DFS-based算法(深度优先算法)
-
启发式算法来提升性能,例如利用k-truss的属性来剪枝,利用最小得分的下限来尽早终止搜索(两个常用的方法,同样k-core也具有相同的剪枝特性)
-
approximate algorithm,迭代贪婪删除具有最大属性分数的顶点查询集
-
在真实网络进行大量实验来证明算法的性能
Exact Algorithms
整体框架
-
计算maximal k-truss(根据k-truss的所有k-truss都在最大k-truss里面)
-
在maximal k-truss的基础上(而不是全图的基础上)计算所有包含查询点的k-truss,作为候选集合
-
计算所有候选k-truss的attribute score,最小的attribute score的子图作为返回子图
DFS-based VAC Algorithm
-
Add Branch pruned
-
Ascore(v+M)>Ascore(H*) 意味着当前的得分已经比H *大,无论之后是左枝add还是右枝delete,这个得分永远存在,只会变大而不会变小,所以不可能成为最优结果
-
Ascore(v+M)=Ascore(H*) and |C+M|<|VH *| 如果当前得分和暂优结果相同,并且未来假设最大子图大小小于VH *那么就可以进行剪枝,因为哪怕保持这个得分,最后大小也不可能大于当前子图的得分
-
Ascore(v+M)=Ascore(H) 相当于未来最好的结果也是和H相同
-
-
Delete Branch pruned
-
Vertex Selection Order
BFS-based VAC Algorithm
-
该算法的思路很普遍,就是不断打破最高得分的组合,拆分最高得分的点对,从而不断降低attribute score的大小
-
Lemma 1:对于不断拆分的k-truss,如果Hi是Hj的子集,那么可以安全删除Hj,简而言之,Hi可以由Hj继续拆分得到
2-Approximation Algorithm
-
该算法利用近似的思想简化了问题(实际处理可以采用这样简单的思路,快速出成果)
-
和查询点之间的Ascore作为Ascore