1.一种位置社交网络中邻近社区的检索方法,其特征在于,包括如下步骤:步骤1、位置社交网络的抽象;
步骤2、初始化查询的待处理结点列表ListV;
步骤3、搜索ListV中的一个结点p相应的区域;到结点列表ListC;
确定一个结点的搜索区域,并对这个区域的子图进行k‑core分解,获得k‑core社区包含的结点列表ListC;具体步骤如下:步骤3‑1:从列表ListV中弹出一个结点p进行操作;
步骤3‑2:获得p结点的搜索区域V’;
V’={v | v∈V & |v,p|<|q,p| & |p,v|≤2r} 式‑(1)式‑(1)中使用的符号“||”表示两点之间的距离,式子定义的区域结点集合V’中包含的结点v具有三个性质:首先v属于V;v与查询点p的距离小于q与查询点p的距离,或者说v结点位于结点p,q之间;v结点与p结点的距离小于等于2r;
步骤3‑3、检查V’中结点的个数是否少于k,如果结点个数少于k,重复执行步骤3‑1;
步骤3‑4、将仅包含结点集合V’的子图G’=(V’,E’)从社交网络图G中分割出来;
步骤3‑5、对子图G’=(V’,E’)进行k‑core分解;
k‑core分解的过程是在子图G’中,按照每个结点的度数进行排序,迭代删除所有度数小于k的结点,以及该结点相邻的边,剩下的图就是k‑core;对获得的k‑core子图使用并查集算法检查其连通性;
步骤3‑6、将步骤3‑5得到的k‑core社区中所有结点插入列表ListC;
步骤3‑7、对列表ListC按结点名称进行排序;
步骤4、检查ListC中任意俩结点和p三点共圆的圆形区域是否包含k‑core社区,圆形区域半径小于r,k‑core社区是社交网络G(V,E)中的一个连通子图C,这个连通子图中的用户结点满足预定义的紧密性标准;即符合下两个条件:一、社区C中所包含的用户结点至少有k个邻接结点,也即在这些用户结点组成的子图中所有结点的度数大于等于k;
二、社区C中的任意两个用户结点之间都存在一条路径,也即社区中任意两个用户结点之间是连通的;
将发现的k‑core社区添加至ListKC;
步骤4‑1、初始化列表ListKC;
步骤4‑2、设置循环变量i为2,执行步骤4‑3、步骤4‑4直至i的值超过|ListC|,|ListC|表示列表中结点的个数;
步骤4‑3、设置循环变量j为1,执行步骤4‑4,直至j的值超过i‑1;
步骤4‑4、本步骤包含以下操作:
取结点p、列表ListC中的结点ListCi、ListCj,使用三点共圆算法确定覆盖这三点的最小半径圆,使用circle表示这个圆;
判断圆circle的半径是否小于r,如果半径小于r,执行以下操作:取得圆circle中按照位置关系包含的所有结点构成的集合S;
对结点集合S构成的子图进行k‑core分解,连通性检查,确定是否包含满足上述定义的k‑core社区;
如果存在一个k‑core社区,将其插入列表ListKC;
重复执行步骤4‑4,直至步骤4‑2、4‑3中循环控制条件为假;
步骤4‑1、初始化列表ListKC;
步骤4‑2、设置循环变量i为2,执行步骤4‑3、步骤4‑4直至i的值超过|ListC|,|ListC|表示列表中结点的个数;
步骤4‑3、设置循环变量j为1,执行步骤4‑4,直至j的值超过i‑1;
步骤4‑4、本步骤包含以下操作:
取结点p、列表ListC中的结点ListCi、ListCj,使用三点共圆算法确定覆盖这三点的最小半径圆,使用circle表示这个圆;
判断圆circle的半径是否小于r,如果半径小于r,执行以下操作:取得圆circle中按照位置关系包含的所有结点构成的集合S;
对结点集合S构成的子图进行k‑core分解,连通性检查,确定是否包含满足上述定义的k‑core社区;
如果存在一个k‑core社区,将其插入列表ListKC;
重复执行步骤4‑4,直至步骤4‑2、4‑3中循环控制条件为假;
步骤5、重复执行直至ListV为空或|ListKC|>k;
步骤6、返回结果列表ListKC。
2.根据权利要求1所述的位置社交网络中邻近社区的检索方法,其特征在于,步骤1的具体步骤如下:将一个社交网络中的所有用户节点抽象,用节点的集合V表示;用户之间的联系表示为两个节点之间的边,使用边的集合E来表示;每个节点v存在一个位置属性positionv。
3.根据权利要求1所述的位置社交网络中邻近社区的检索方法,其特征在于,步骤5包括如下具体步骤:如果列表ListV非空,并且结果列表ListKC的长度小于k,也即还没搜索完成所有结点,并且没有达到查询所要求返回的k‑core 社区数量k,重复执行步骤3、步骤4。