一:定义:
设存在图G=(V,L)(V是结点们,L是边们)。定义n=|V|,m=|L|。则定义子图H=(W,L|W)当且仅当任意Degree_V(V属于H)>=k,且H是一个具有这样的属性的最大子图的时候,称H为结点集合W诱导的K-Core或者说一个K阶核。
一个图的最大阶数的核称为主核,一个结点的核阶数为包含此结点的K-Core的最大的K。
不难发现K-Core 有以下特点:
①:是一个嵌套结构,小阶数的会嵌套大阶数的。即若i<j 则H_i必定包含H_j。
②:Core不一定是连接的子图。
二:算法
Ⅰ:输出每个结点所对应的最大阶数。
递归删除所有度数小于K的结点,删除这个结点的同时删除和他相关联的边,剩下的子图便是一个K阶核。
通过这个算法可以计算出每个结点属于几阶核。(求出每个结点是几阶核之后,就很容易判断不同阶数K-core分别由哪些结点组成的了,一个自身阶数为n的结点在所有k<=n的K-core中都会包含这个结点。所有求一个k-core直接就把所有的符合条件的结点组合成一个子图就可以了)