本發(fā)明屬于圖和社區(qū)網(wǎng)絡(luò)的社交挖掘技術(shù)領(lǐng),尤其涉及一種k-core-truss社區(qū)模型及分解、搜索算法。
背景技術(shù):
隨著科學(xué)技術(shù)的迅猛發(fā)展,社會上的各行各業(yè)都積累和采集了大量的圖數(shù)據(jù),例如在線社交網(wǎng)絡(luò)中的社交圖譜、因特網(wǎng)的網(wǎng)絡(luò)拓?fù)?、銀行信貸網(wǎng)絡(luò)、蛋白質(zhì)交互網(wǎng)絡(luò)、公路交通網(wǎng)絡(luò)、無線傳感器網(wǎng)絡(luò)、通訊網(wǎng)絡(luò)、以及智能電網(wǎng)等等。這些圖數(shù)據(jù)有兩個較為顯著的特性:一是它們的規(guī)模龐大,圖中頂點(diǎn)的數(shù)目往往都是千萬乃至十億級別,比如社交網(wǎng)絡(luò)的臉書圖譜、騰訊QQ網(wǎng)絡(luò)以及新浪微博圖譜等;二是這些圖數(shù)據(jù)中往往都存在頂點(diǎn)之間緊密相連的凝聚子圖(cohesive subgraph)結(jié)構(gòu)。
近年來,對圖和社交網(wǎng)絡(luò)中的社區(qū)挖掘問題引起學(xué)術(shù)界和工業(yè)界了廣泛的關(guān)注。在社區(qū)挖掘問題上,大多數(shù)的研究工作僅致力于探測原圖中的社區(qū)結(jié)構(gòu)。然而,在很多應(yīng)用情景中,我們關(guān)心的是找出包含查詢節(jié)點(diǎn)的社區(qū)結(jié)構(gòu)。例如,在一個社交網(wǎng)絡(luò)中,我們要查詢某個或者幾個用戶所在的社區(qū)結(jié)構(gòu),進(jìn)而了解他們的共同興趣愛好,或者團(tuán)體活動等;再比如在電話通信網(wǎng)絡(luò)中,我們要查詢一個用戶與其緊密聯(lián)系的一個社群,進(jìn)而了解其的社會關(guān)系網(wǎng)絡(luò),這一應(yīng)用有助于幫助公安刑偵,打擊團(tuán)伙犯罪,恐怖組織等。這些應(yīng)用都需要解決對于給定的一個或者多個查詢節(jié)點(diǎn)的社區(qū)搜索問題。
在圖的社區(qū)搜索上,主要包括兩種代表性的模型,k-核(k-core)及k-truss。k-core的概念是由Seidman首次提出的。k-core是一個誘導(dǎo)子圖,該子圖中的頂點(diǎn)的度都大于或等于k,且該子圖是具備這種性質(zhì)的最大子圖。為了求解大圖數(shù)據(jù)的k-core分解問題,Vladimir和Matjaz率先提出了一個線性時間算法。該算法依次從圖中刪除度最小的頂點(diǎn),并利用一個類似于桶排序的數(shù)據(jù)結(jié)構(gòu)來組織頂點(diǎn),從而實(shí)現(xiàn)快速的k-core計(jì)算。該算法首先是發(fā)現(xiàn)core數(shù)較低的頂點(diǎn),然后依次發(fā)現(xiàn)core數(shù)較高的頂點(diǎn)。正因?yàn)镵-core主要關(guān)注圖中度數(shù)較高的節(jié)點(diǎn),往往會忽略一些度數(shù)較低但卻在現(xiàn)實(shí)中有關(guān)聯(lián)的社區(qū)。
相對于k-core,k-truss是一個較新的概念,這一概念是由Cohen首次提出。同樣的,k-truss也是一個誘導(dǎo)子圖,該子圖中的任意一條邊都至少包含在k-2個三角形中,且該子圖是具備這種性質(zhì)的最大子圖。最大k-邊連通子圖同樣也是一個誘導(dǎo)子圖,該子圖中的任意兩個頂點(diǎn)都至少存在k條邊不相交的路徑,且該子圖是具備這種性質(zhì)的最大子圖。值得注意的是,一個k-truss是一個(k-1)-core,反之不一定成立。由此可見,k-truss是一種精煉的k-core結(jié)構(gòu)。然而,與k-core不同的是,k-truss的定義是基于圖中頂點(diǎn)所形成的三角形結(jié)構(gòu)。因此,對于那些三角形較為稀少的網(wǎng)絡(luò)(例如二分圖或近似二分圖),這種定義并不合適。這是因?yàn)檫@種三角形稀少的網(wǎng)絡(luò)可能依舊存在凝聚子圖的結(jié)構(gòu)。但是,根據(jù)k-truss的定義,我們無法發(fā)現(xiàn)這一結(jié)構(gòu),這是k-truss定義的一個最主要缺陷。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種k-core-truss社區(qū)模型,旨在解決現(xiàn)有技術(shù)中k-core及k-truss模型不能全面挖掘凝聚子圖的技術(shù)問題。
本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種k-core-truss社區(qū)模型,包括一個無向、無權(quán)圖G=(V,E),在圖G中具有一個最大子圖,所述子圖滿足:每條邊e的度≥α*k或者邊e被包含在k-2個三角形中;
對于圖G的任意節(jié)點(diǎn)u,其核值core(u)=max{k|u∈Vk-core},其中Vk-core為圖G中的k-core社區(qū);
對于圖G中的任意邊e,其trussnessλ(e)=max{k|e∈Ek-truss},其中Ek-truss為圖G中的k-truss社區(qū);
對于圖G中的任意邊e,其最大度δ(e)=min(core(u),core(v));
其中,邊e=(u,v),節(jié)點(diǎn)u的度為deg(u)=|{v|(u,v)∈E}|,邊e的度為d(e)=min{deg(u),deg(v)},圖G中節(jié)點(diǎn)的最大度為dmax,參數(shù)α>0,k≥3。
優(yōu)選地,當(dāng)α*k>dmax時,所述k-core-truss社區(qū)模型為k-truss模型。
優(yōu)選地,當(dāng)α*k≤(k-1)時,所述k-core-truss社區(qū)模型為α*k-core模型。
優(yōu)選地,當(dāng)α=1/k,整個圖G都為k-core-truss社區(qū)。
本發(fā)明的實(shí)施例還提供一種k-core-truss社區(qū)模型分解算法,包括以下步驟:
計(jì)算并記錄圖G=(V,E)中所有節(jié)點(diǎn)的核值core(u)=max{k|u∈Vk-core}與core(v)=max{k|v∈Vk-core},其中Vk-core為圖G中的k-core社區(qū);
計(jì)算并記錄圖G=(V,E)中所有邊e=(u,v)的最大度δ(e)=min(core(u),core(v));
計(jì)算并記錄圖G=(V,E)中所有邊e=(u,v)的trussnessλ(e)=max{k|e∈Ek-truss},其中Ek-truss為圖G中的k-truss社區(qū);
控制k的初始值為3;
將所有同時滿足δ(e)<α*k及λ(e)<k兩個條件的邊e刪除,得到K-core-truss社區(qū);
在得到的K-core-truss社區(qū)的基礎(chǔ)上,控制k=k+1,并重復(fù)前一步驟,直到所有邊都被刪除;
輸出所有得到的K-core-truss社區(qū)。
優(yōu)選地,所述k-core-truss社區(qū)模型分解算法的時間復(fù)雜度為O(m1.5),其中m為圖G的邊數(shù),圖G為無向、無權(quán)圖。
本發(fā)明的實(shí)施例還提供一種k-core-truss社區(qū)模型搜索算法,包括以下步驟:
計(jì)算并記錄圖G=(V,E)中所有節(jié)點(diǎn)的核值core(u)=max{k|u∈Vk-core}與core(v)=max{k|v∈Vk-core},其中Vk-core為圖G中的k-core社區(qū);
計(jì)算并記錄圖G=(V,E)中所有邊e=(u,v)的最大度δ(e)=min(core(u),core(v));
計(jì)算并記錄圖G=(V,E)中所有邊e=(u,v)的trussnessλ(e)=max{k|e∈Ek-truss},其中Ek-truss為圖G中的k-truss社區(qū);
查找預(yù)設(shè)節(jié)點(diǎn)q的鄰邊,并比較所有鄰邊的λ(e)及δ(e)值,選取其中的最大值作為kmax;
以節(jié)點(diǎn)q為起始點(diǎn),采用廣度優(yōu)先遍歷算法將符合條件λ(e)≥kmax或δ(e)≥α*kmax的邊加入到輸出隊(duì)列Q中,直到查找不到符合條件的邊;
輸出隊(duì)列Q作為目標(biāo)kmax-core-truss社區(qū)。
優(yōu)選地,所述k-core-truss社區(qū)模型搜索算法的時間復(fù)雜度為O(m1.5),其中m為圖G的邊數(shù),圖G為無向、無權(quán)圖。
本發(fā)明實(shí)施例提供的一種k-core-truss社區(qū)模型及分解、搜索算法,通過對該社區(qū)模型內(nèi)節(jié)點(diǎn)及邊的核值、最大度及trussness數(shù)據(jù)進(jìn)行分析,并通過廣度優(yōu)先遍歷算法,有效解決了全部社區(qū)發(fā)現(xiàn)或包含給點(diǎn)查詢節(jié)點(diǎn)的社區(qū)搜索問題,能夠?qū)ι鐓^(qū)模型中的凝聚子圖進(jìn)行全面挖掘。
附圖說明
圖1是本發(fā)明實(shí)施例提供的k-core-truss社區(qū)模型分解下所能得到的k-core-truss社區(qū)與k-core社區(qū)及k-truss社區(qū)的對比示意圖;
圖2是本發(fā)明實(shí)施例提供的一種k-core-truss社區(qū)模型針對社區(qū)搜索的算法流程步驟圖;
圖3是本發(fā)明實(shí)施例提供的一種k-core-truss社區(qū)模型針對查詢節(jié)點(diǎn)的社區(qū)搜索的算法流程步驟圖;
圖4是本發(fā)明圖1中所示G圖中每條邊的λ(e)及δ(e)數(shù)值標(biāo)注圖;
圖5是本發(fā)明圖1中包含節(jié)點(diǎn)8的最大3-core-truss社區(qū)圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
在本發(fā)明實(shí)施例提供的k-core-truss社區(qū)模型,我們討論的是無向、無權(quán)圖G=(V,E),記結(jié)點(diǎn)u的度為deg(u)=|{v|(u,v)∈E}|,邊e的度為d(e)=min{deg(u),deg(v)},圖G中結(jié)點(diǎn)的最大度為dmax。在此基礎(chǔ)上,我們定義k-core-truss社區(qū)模型為:
給定上述的圖G、參數(shù)α>0,同時整數(shù)k≥3,我們定義一種廣義的cohesive subgraph,稱為k-core-truss社區(qū),記作CTk,當(dāng)且僅當(dāng)這個子圖滿足以下兩個性質(zhì):(1)每條邊e的度大于等于α*k,或者至少被包含在k-2個三角形中;(2)滿足性質(zhì)(1)的最大子圖。
進(jìn)一步地,在所述定義的k-core-truss社區(qū)模型中:
對于圖G中的任意結(jié)點(diǎn)u,將它的核值記為core(u),其中core(u)=max{k|u∈Vk-core};其中Vk-core表示圖G中的k-core社區(qū)。
對于圖G中的任意邊e,將它的trussness記為λ(e),其中λ(e)=max{k|e∈Ek-truss};其中Ek-truss表示圖G中的k-truss社區(qū)。
對于圖G中的任意邊e=(u,v),將它的最大度記為δ(e),其中δ(e)=min(core(u),core(v))。
根據(jù)所定義的k-core-truss社區(qū)模型,可知該模型具有嵌套性和層次化結(jié)構(gòu),即:它是誘導(dǎo)子圖,有可能由多個連通塊組成,這些都是保留了之前兩種模型的特性。但它更多體現(xiàn)的是折衷、靈活而可控。通過設(shè)定參數(shù)α,這個模型可以平衡k-core模型與k-truss模型,且它至少是一個min{α*k,k-1}-core。當(dāng)α足夠大,即α*k>dmax(圖中點(diǎn)的最大度)時,這個模型就等價(jià)于k-truss;當(dāng)α*k≤(k-1)時,該模型為一個α*k-core;在其它情況下,該模型是k-core與k-truss的混合體。
本發(fā)明實(shí)施例提供的k-core-truss模型中可以通過改變參數(shù)α的大小,使得整個搜索社區(qū)更為靈活,當(dāng)α取值較小時,比如α=1/k,k-core-truss搜索社區(qū)就是連通圖G本身,這是因?yàn)樗笑?e)≥1的邊都將被包含在搜索結(jié)果中。當(dāng)取α*k>dmax時,整個k-core-truss下的社區(qū)搜索結(jié)果就是一個k-truss社區(qū),這是因?yàn)閳D中任何一條邊能滿足δ(e)>α*k,在其他情況下,k-core-truss社區(qū)就是一個混合k-core和k-truss社區(qū)的搜索結(jié)果。本發(fā)明的實(shí)施例中,可以根據(jù)實(shí)際的需求來設(shè)置α的值。
如圖1所示,我們可以對比k-core,k-truss和k-core-truss三種模型在社區(qū)發(fā)現(xiàn)上的區(qū)別,最明顯的是右邊部分的子圖,如果用k-core模型的話,只能發(fā)現(xiàn)由{8,9,10,11,12,13}6個節(jié)點(diǎn)組成的3-core社區(qū),而如果用k-truss模型的話,只能發(fā)現(xiàn){5,6,7,8,9}這5個節(jié)點(diǎn)組成的3-truss社區(qū)。在我們提出的k-core-truss的模型下,可以發(fā)現(xiàn){5,6,7,8,9,10,11,12,13}9個點(diǎn)的社區(qū),而這個社區(qū)更為全面的體現(xiàn)節(jié)點(diǎn)間的關(guān)系。具體涉及的社區(qū)搜索算法會在下面進(jìn)行詳述。
本發(fā)明實(shí)施例的圖G的社區(qū)搜索算法一般解決兩類問題:(1)找出圖中的所有社區(qū);(2)給定一個查詢節(jié)點(diǎn),找出該節(jié)點(diǎn)所在的最大社區(qū)。根據(jù)這兩類問題,我們提出問題的定義如下
(1)給定圖G=(V,E)和參數(shù)α,對于所有可能的k(k≥3),找出所有的k-core-truss社區(qū);
(2)給定圖G=(V,E)、參數(shù)α和節(jié)點(diǎn)q,找出所有包含節(jié)點(diǎn)q的k-core-truss社區(qū),并且k值最大。
針對上述問題定義,本發(fā)明的實(shí)施例將詳述k-core-truss社區(qū)模型的分解及搜索算法。
如圖2所示,為了解決問題(1),本發(fā)明采用的技術(shù)方案是core和truss的同步分解。即將圖G中不滿足條件:δ(e)≥α*k或λ(e)≥k的邊刪去,值得注意的是,刪除的邊要同時不滿足上述的兩個條件,換句話說,當(dāng)邊e同時滿足δ(e)<α*k及λ(e)<k兩個條件時,邊e需要刪除,即e不屬于我們要找的k-core-truss,具體步驟如下:
步驟S10,計(jì)算并記錄圖G=(V,E)中所有節(jié)點(diǎn)的核值core(u)=max{k|u∈Vk-core}與core(v)=max{k|v∈Vk-core},其中Vk-core為圖G中的k-core社區(qū);
步驟S20,計(jì)算并記錄圖G=(V,E)中所有邊e=(u,v)的最大度δ(e)=min(core(u),core(v));
步驟S30,計(jì)算并記錄圖G=(V,E)中所有邊e=(u,v)的trussnessλ(e)=max{k|e∈Ek-truss},其中Ek-truss為圖G中的k-truss社區(qū);
步驟S40,控制k的初始值為3;
步驟S50,將所有同時滿足δ(e)<α*k及λ(e)<k兩個條件的邊e刪除,得到k-core-truss社區(qū);這里的k即為初始值3;
步驟S60,在前一步驟中得到的k-core-truss社區(qū)的基礎(chǔ)上,控制k=k+1,并重復(fù)前一步驟,直到所有邊都被刪除;
步驟S70,輸出所有得到的K-core-truss社區(qū)。
進(jìn)一步地,本實(shí)施例中,所述步驟S30可以與步驟S10或步驟S20同時進(jìn)行,步驟S30也可以在步驟S10的前面進(jìn)行,或在步驟S20的前面進(jìn)行。
本實(shí)施例中,我們把步驟S10、步驟S20及步驟S30作為初始化步驟,通過計(jì)算核值、邊的最大度和trussness值,然后步驟S50中通過廣度優(yōu)先遍歷算法(BFS),從k=3開始,將所有同時滿足δ(e)<α*k及λ(e)<k兩個條件的邊刪除。刪除后的結(jié)果就是3-core-truss社區(qū)。我們繼續(xù)查找4-core-truss,所以在步驟S60中,將k加1后,重新回到步驟S50。注意,這次的循環(huán)是在步驟S60得出的結(jié)果即3-core-truss上進(jìn)行,而不是重新對圖G進(jìn)行操作。如圖1,利用本發(fā)明實(shí)施例的算法對圖1中的G圖進(jìn)行社區(qū)搜索,我們可以得到2個3-core-truss社區(qū):{5,6,7,8,9,10,11,12,13}和{18,19,20}及1個4-core-truss社區(qū):{14,15,16,17}。本實(shí)施例中,優(yōu)選地,所述參數(shù)α=1。
可以證明,該算法的時間復(fù)雜度是O(m1.5),其中m是圖G的邊數(shù),主要是算法在計(jì)算所有邊的trussness值時需要O(m1.5)時間。
如圖3所示,為了解決問題(2),根據(jù)對k-core-truss的定義,對于最后找到的社區(qū),邊e=(u,v)的δ(e)或λ(e)越大,表明該邊所在的k-core-truss的k值越大,節(jié)點(diǎn)u或者v所在的k-core-truss的k值也越大。我們對于一個給定的查詢節(jié)點(diǎn)q,要找出包含q的最大k值的k-core-truss,我們可以先找出包含q的所有邊的最大度和trussness值進(jìn)行比較,得到kmax值,即q存在于一個kmax-core-truss社區(qū)中,我們再可以通過DFS把這個社區(qū)找出來。具體步驟如下:
步驟S100,計(jì)算并記錄圖G=(V,E)中所有節(jié)點(diǎn)的核值core(u)=max{k|u∈Vk-core}與core(v)=max{k|v∈Vk-core},其中Vk-core為圖G中的k-core社區(qū);
步驟S200,計(jì)算并記錄圖G=(V,E)中所有邊e=(u,v)的最大度δ(e)=min(core(u),core(v));
步驟S300,計(jì)算并記錄圖G=(V,E)中所有邊e=(u,v)的trussnessλ(e)=max{k|e∈Ek-truss},其中Ek-truss為圖G中的k-truss社區(qū);
步驟S400,查找預(yù)設(shè)節(jié)點(diǎn)q的鄰邊,并比較所有鄰邊的λ(e)及δ(e)值,選取其中的最大值作為kmax;
步驟S500,以節(jié)點(diǎn)q為起始點(diǎn),采用廣度優(yōu)先算法將符合條件λ(e)≥kmax或δ(e)≥α*k的邊加入到輸出隊(duì)列Q中,直到查找不到符合條件的邊;
步驟S600,輸出隊(duì)列Q作為目標(biāo)kmax-core-truss社區(qū)。
同樣地,本實(shí)施例中,所述步驟S300可以與步驟S100或步驟S200同時進(jìn)行,步驟S300也可以在步驟S100的前面進(jìn)行,或在步驟S200的前面進(jìn)行。
以圖1的例子為例,比如要尋找節(jié)點(diǎn)8所在的最大k-core-truss社區(qū),步驟S100-步驟S300作為初始化步驟,通過計(jì)算核值、邊的最大度和trussness值,然后將每條邊的最大度和trussness標(biāo)注在圖上,如圖4所示。,在步驟S400中,比較q的所有鄰邊的trussness值和δ(e)/α,本實(shí)施例中優(yōu)選的,所述置α=1。
節(jié)點(diǎn)8的鄰邊包括邊(5,8),邊(6,8),邊(7,8),邊(8,9),邊(8,11),邊(8,13),得到kmax=3。于是按照步驟S500,以q為起點(diǎn),BFS遍歷,得到包含節(jié)點(diǎn)8的最大的3-core-truss社區(qū):{5,6,7,8,9,10,11,12,13},如圖5所示。
可以證明,該算法的時間復(fù)雜度也是O(m1.5),其中m是圖G的邊數(shù),主要是算法在計(jì)算所有邊的trussness值時需要O(m1.5)時間。
本發(fā)明的上述實(shí)施例提供的基于k-core-truss的社區(qū)搜索算法能夠解決全部社區(qū)發(fā)現(xiàn)與包含給點(diǎn)查詢節(jié)點(diǎn)的社區(qū)搜索問題,并且時間復(fù)雜度為O(m1.5),m為圖G邊的數(shù)量,本發(fā)明的社區(qū)模型和算法有效解決了k-core模型及k-truss模型等不能發(fā)現(xiàn)更為全面的社區(qū)的問題。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。