本發(fā)明涉及時(shí)序圖數(shù)據(jù)處理技術(shù)領(lǐng)域,具體涉及一種基于kd樹和多值決策圖的時(shí)序圖數(shù)據(jù)處理方法。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的發(fā)展和互聯(lián)網(wǎng)應(yīng)用的普及,各個(gè)領(lǐng)域可獲取的數(shù)據(jù)呈爆炸式增長(zhǎng)的趨勢(shì)。在大數(shù)據(jù)分析的過程中,圖作為一種有效描述大數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),在社交網(wǎng)絡(luò)分析、推薦網(wǎng)絡(luò)分析、互聯(lián)網(wǎng)分析等領(lǐng)域得到了充分的應(yīng)用。對(duì)包含億萬個(gè)節(jié)點(diǎn)和邊的圖數(shù)據(jù)進(jìn)行高效、緊湊的表示和壓縮,是大規(guī)模圖數(shù)據(jù)分析處理的基礎(chǔ)。
時(shí)序圖是圖中頂點(diǎn)之間的連接性隨時(shí)間變化而改變的圖(即邊可以出現(xiàn)和消失)。時(shí)序圖在數(shù)據(jù)建模中具有非常大的作用,例如:當(dāng)用戶在在線社交網(wǎng)絡(luò)中添加或移除朋友時(shí)友誼關(guān)系的演變;新發(fā)表的科技文章在網(wǎng)絡(luò)上被引用的動(dòng)態(tài)性;移動(dòng)設(shè)備改變其基礎(chǔ)站點(diǎn)時(shí)移動(dòng)設(shè)備之間的連接性或在web圖中鏈接的出現(xiàn)與消失等。
現(xiàn)有的時(shí)序圖表示方法(如ikd-tree、kd-tree、ckd-tree、bckd-tree等)在對(duì)大規(guī)模時(shí)序圖數(shù)據(jù)表示時(shí)具有一定的局限性,比如當(dāng)時(shí)序圖規(guī)模變大時(shí),圖內(nèi)部存在大量的同構(gòu)子圖;僅對(duì)稀疏圖有效;隨著維數(shù)的增加存儲(chǔ)空間呈指數(shù)增長(zhǎng)等。此外,目前基于kd樹的時(shí)序圖表示方法在對(duì)大規(guī)模時(shí)序圖、稀疏圖、多維圖數(shù)據(jù)等進(jìn)行表示的時(shí)候缺乏必要的考慮,在緊湊性上仍有較大的改進(jìn)空間。針對(duì)kd樹表現(xiàn)出來的問題,通過對(duì)其進(jìn)行改進(jìn)得到一種更加緊湊并且適用更廣的時(shí)序圖數(shù)據(jù)的表示方法是非常有價(jià)值的。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的是現(xiàn)有kd樹及其優(yōu)化方法在存儲(chǔ)大規(guī)模時(shí)序圖數(shù)據(jù)時(shí)結(jié)構(gòu)不夠緊湊的問題,提供一種基于kd樹和多值決策圖的時(shí)序圖數(shù)據(jù)處理方法,以實(shí)現(xiàn)對(duì)大規(guī)模時(shí)序圖數(shù)據(jù)進(jìn)行更緊湊、高效的表示和操作。
為解決上述問題,本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的:
一種基于kd樹和多值決策圖的時(shí)序圖數(shù)據(jù)處理方法,包括如下步驟:
步驟1、根據(jù)kd樹的規(guī)則對(duì)時(shí)序圖的頂點(diǎn)和時(shí)間點(diǎn)進(jìn)行n位編碼;頂點(diǎn)和時(shí)間點(diǎn)的n位編碼的每一位都是k種狀態(tài)之一,即0,1,…,k-1之一;
步驟2、根據(jù)步驟1所得時(shí)序圖的頂點(diǎn)和時(shí)間點(diǎn)的編碼,對(duì)時(shí)序圖的邊進(jìn)行n位編碼;邊的n位編碼的每一位都是k3種狀態(tài)之一,即1,2,…,k3狀態(tài)之一;
步驟3、使用多終點(diǎn)和邊值決策圖庫(kù),根據(jù)步驟2所確定的時(shí)序圖的邊的編碼,構(gòu)造表示時(shí)序圖的mdd結(jié)構(gòu),所得為表示時(shí)序圖的kd-mdd結(jié)構(gòu);
步驟4,對(duì)步驟3所得的表示時(shí)序圖的kd-mdd結(jié)構(gòu)進(jìn)行圖的基本操作;
上述
上述步驟1具體為:
步驟1.1、依據(jù)kd樹對(duì)時(shí)序圖的鄰接矩陣劃分的規(guī)則,確定時(shí)序圖的頂點(diǎn)和時(shí)間點(diǎn)的編碼長(zhǎng)度n,其中
步驟1.2、使用k分方式分別對(duì)時(shí)序圖中的頂點(diǎn)v和時(shí)間點(diǎn)t進(jìn)行編碼,其中1≤v≤max(v),1≤t≤max(t);先令k分的下界lt=1,上界ht=kn;
步驟1.3、如果lt<ht,則令l=lt,h=ht,并將區(qū)間[l,h]進(jìn)行k等分;若v或t處在區(qū)間[l,h]等分為k個(gè)子區(qū)間中的第i個(gè)子區(qū)間,則頂點(diǎn)v或時(shí)間點(diǎn)t得到一位編碼記為i,同時(shí)將此第i個(gè)子區(qū)間記為[lt,ht];其中i=0,1,…,k-1;
步驟1.4、重復(fù)步驟1.3,直至lt≥ht,即分別得到頂點(diǎn)v和時(shí)間點(diǎn)t的n位編碼;
上述,v為時(shí)序圖的頂點(diǎn)的集合,t為時(shí)序圖的時(shí)間點(diǎn)的集合,k為設(shè)定的大于等于2的整數(shù)。
上述步驟2中,在時(shí)間點(diǎn)h,將頂點(diǎn)x到頂點(diǎn)y的邊用特征函數(shù)e(x,y,h)表示,由此獲得時(shí)序圖的邊的編碼:
e(x,y,h):{0,1,…k-1}n×{0,1,…k-1}n×{0,1,…k-1}n→{1,2,…k3}n
其中,x和y為時(shí)序圖2個(gè)頂點(diǎn)的編碼向量,h為時(shí)序圖時(shí)間點(diǎn)的編碼向量,k為設(shè)定的大于等于2的整數(shù)。
上述步驟3具體為:
步驟3.1、使用多終點(diǎn)和邊值決策圖庫(kù)創(chuàng)建取值范圍均為{1,2,…,k3}的n個(gè)變量;
步驟3.2、根據(jù)步驟2得到時(shí)序圖的邊的編碼,在時(shí)序圖中選出一條邊,并使用多終點(diǎn)和邊值決策圖庫(kù)中的createedge()函數(shù)生成一個(gè)mdd,即mdd-r;再在時(shí)序圖剩余邊中選出一條邊,并使用多終點(diǎn)和邊值決策圖庫(kù)中的createedge()函數(shù)生成mdd,即mdd-t;
步驟3.3、使用多終點(diǎn)和邊值決策圖庫(kù)中的union運(yùn)算符,對(duì)步驟所得到的mdd-r和mdd-t進(jìn)行union運(yùn)算,合并結(jié)果覆蓋原來的mdd-r;
步驟3.4、繼續(xù)在時(shí)序圖剩余邊中再取出一條邊,并使用多終點(diǎn)和邊值決策圖庫(kù)中的createedge()函數(shù)生成一個(gè)mdd,并將其覆蓋原來的mdd-t;
步驟3.5、返回步驟3.3,直到將時(shí)序圖中的所有邊選出,最終所得到的mdd-r即為表示時(shí)序圖的kd-mdd結(jié)構(gòu)。
上述步驟3.2中,對(duì)于無權(quán)圖,初始化一個(gè)布爾型mdd,其終點(diǎn)是真或者是假;對(duì)于加權(quán)圖,初始化一個(gè)整數(shù)型mdd或?qū)崝?shù)型mdd,其終點(diǎn)是整數(shù)或?qū)崝?shù)。
與現(xiàn)有技術(shù)相比,本發(fā)明具有如下特點(diǎn):
1、采用kd樹的規(guī)則對(duì)鄰接矩陣進(jìn)行劃分,然后使用多值決策圖存儲(chǔ)圖數(shù)據(jù),使kd樹劃分鄰接矩陣時(shí)產(chǎn)生的大量相同的子矩陣,即kd樹中的同構(gòu)子樹,自然地被合并,最終生成的kd-mdd結(jié)構(gòu)比kd樹存儲(chǔ)結(jié)構(gòu)緊湊;
2、由于kd-mdd中不論是0值還是1值的子矩陣,只要是同構(gòu)的,都將被合并,在表示稠密圖時(shí),kd-mdd節(jié)點(diǎn)數(shù)會(huì)變少,結(jié)構(gòu)更為緊湊;
3、kd-mdd存儲(chǔ)圖數(shù)據(jù)后,圖的相關(guān)基本操作可轉(zhuǎn)化為符號(hào)決策圖的邏輯操作,為動(dòng)態(tài)圖數(shù)據(jù)的高效操作創(chuàng)造了條件,使得基于kd-mdd圖的查詢操作要比基于kd樹更為簡(jiǎn)潔;
4、kd-mdd是基于多值決策圖的結(jié)構(gòu),其本身結(jié)構(gòu)比kd樹更有利于子圖查詢、圖同構(gòu)、圖/子圖匹配以及多圖匹配等。
附圖說明
圖1為一種基于kd樹和多值決策圖的時(shí)序圖數(shù)據(jù)處理方法的流程圖。
具體實(shí)施方式
以下結(jié)合實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)的描述。
多值決策圖mdd(multi-valueddecisiondiagram)是一個(gè)具有多個(gè)終端節(jié)點(diǎn)的有向無環(huán)圖,描述了一個(gè)帶有n個(gè)變量的離散多值函數(shù),f:d1×d2×…×di×…×dn→s,其中:
1)di={1,2,…,ni}為多值變量xi的有限值域,不同變量其值域可能不同;s為多值函數(shù)f的有限值域,即mdd終端節(jié)點(diǎn)的取值集合,其可能為布爾值(真和假,或者0和1)、有限整數(shù)集合或者有限實(shí)數(shù)集合。
2)mdd的節(jié)點(diǎn)包括終端節(jié)點(diǎn)和非終端節(jié)點(diǎn)。
3)非終端節(jié)點(diǎn)用xi表示,包含ni個(gè)指向其他節(jié)點(diǎn)的指針,這些指針和函數(shù)f對(duì)應(yīng),形式化描述如下式:
fxi=c=f(x1,x2,…,xi-1,c,xi+1,…,xn)
多值變量x1到xn給定的一組取值,得到唯一的終端節(jié)點(diǎn)取值。
mdd的化簡(jiǎn)規(guī)則為以下三條:
規(guī)則1、合并相同終端節(jié)點(diǎn):同一屬性的終端節(jié)點(diǎn)只保留一個(gè),并刪除其余相同屬性的終端節(jié)點(diǎn),原來指向這些已刪除的終端節(jié)點(diǎn)的指針重定向到保留的終端節(jié)點(diǎn)上。
規(guī)則2、合并相同內(nèi)部節(jié)點(diǎn):同一屬性的內(nèi)部節(jié)點(diǎn),即非終端節(jié)點(diǎn),只保留一個(gè),并刪除其余相同屬性的內(nèi)部節(jié)點(diǎn),原來指向這些已刪除的節(jié)點(diǎn)的指針重定向到保留的內(nèi)部節(jié)點(diǎn)上。
規(guī)則3、刪除冗余節(jié)點(diǎn):如果一個(gè)節(jié)點(diǎn)的所有指針都指向同一節(jié)點(diǎn),那么該節(jié)點(diǎn)就是冗余節(jié)點(diǎn),將其刪除,并將指向該節(jié)點(diǎn)的指針指向刪除節(jié)點(diǎn)的孩子節(jié)點(diǎn)。
一種基于kd樹和多值決策圖的時(shí)序圖數(shù)據(jù)處理方法,如圖1所述,所述時(shí)序圖為有向圖g=(v,e,t),其中v表示頂點(diǎn)的集合,e表示邊的集合,t表示時(shí)間點(diǎn)的集合,包括如下步驟:
步驟1、根據(jù)kd樹的規(guī)則對(duì)有向圖g=(v,e,t)的頂點(diǎn)和時(shí)間點(diǎn)進(jìn)行n位編碼,
步驟1.1、依據(jù)kd樹對(duì)時(shí)序圖的鄰接矩陣劃分的規(guī)則,即kd劃分規(guī)則,確定圖數(shù)據(jù)頂點(diǎn)和時(shí)間點(diǎn)的編碼長(zhǎng)度n為頂點(diǎn)編號(hào)和時(shí)間點(diǎn)中的最大值以2為底的對(duì)數(shù)向上取整,即
步驟1.2、本例k=2,使用二分方式對(duì)頂點(diǎn)和時(shí)間點(diǎn)進(jìn)行編碼。二分的下界lt=1,上界ht=2n;對(duì)于編號(hào)為v的頂點(diǎn),1≤v≤max(v),對(duì)編號(hào)為v的頂點(diǎn)按遞歸二分方式進(jìn)行編碼。根據(jù)原圖中編號(hào)為v的頂點(diǎn)在所有頂點(diǎn)中的所在位置,得到一個(gè)狀態(tài)作為其一位編碼,本例中編號(hào)為v的頂點(diǎn)的n位編碼中每一位都是2種狀態(tài)之一,即0或1。對(duì)于值為t的時(shí)間點(diǎn),1≤t≤max(t),對(duì)值為t的時(shí)間點(diǎn)按照二分方式進(jìn)行編碼。根據(jù)原圖中值為t的時(shí)間點(diǎn)在所有時(shí)間點(diǎn)中的所在位置,得到一個(gè)狀態(tài)作為其以為編碼,本例值為t的時(shí)間點(diǎn)的n位編碼中每一位都是2種狀態(tài)之一,即0或1。
步驟1.3、若lt<ht,二分方式的中值等于上界與下界和的一半。若v或t小于或等于中值,得到編號(hào)為v的頂點(diǎn)或值為t的時(shí)間點(diǎn)的一位編碼為“0”,同時(shí)將中值減1作為上界ht;否則,得到編號(hào)為v的頂點(diǎn)或值為t的時(shí)間點(diǎn)的一位編碼為“1”,同時(shí)中值加1作為下界lt。
步驟1.4、重復(fù)進(jìn)行步驟1.3,直至lt≥ht,此時(shí)便得到該編號(hào)為v的頂點(diǎn)或值為t的時(shí)間點(diǎn)的n位編碼。
步驟2、依據(jù)步驟1所得頂點(diǎn)和時(shí)間點(diǎn)的編碼,對(duì)原圖的邊進(jìn)行編碼。即根據(jù)步驟1得到的將要進(jìn)行編碼的時(shí)間點(diǎn)t某條邊的起、止兩個(gè)頂點(diǎn)的編碼及時(shí)間t編碼,將時(shí)刻t以及該邊的兩個(gè)頂點(diǎn)的對(duì)應(yīng)位編碼狀態(tài)進(jìn)行組合,即得到該邊的一位編碼;n位編碼狀態(tài)依次對(duì)應(yīng)組合,即得到該邊的n位編碼。
步驟2.1、本發(fā)明中時(shí)序圖的有向邊為頂點(diǎn)之間的關(guān)系,用頂點(diǎn)之間的特征函數(shù)描述。如在時(shí)間點(diǎn)t時(shí)刻頂點(diǎn)v1到頂點(diǎn)v2之間的邊,用特征函數(shù)e(v1,v2,t)來描述。設(shè)x=(x1,…,xn),y=(y1,…,yn),t=(t1,…,tn)是圖中頂點(diǎn)的編碼向量,則在時(shí)間點(diǎn)t時(shí)刻頂點(diǎn)x到頂點(diǎn)y的邊的特征函數(shù)表示為:
e(x,y,t):{0,1,…k-1}×{0,1,…k-1}×{0,1,…k-1}→{1,2,…k3}
即時(shí)間點(diǎn)t和兩個(gè)頂點(diǎn)編碼的每一位上的k種狀態(tài)組合得到k3種狀態(tài)。因此,邊的編碼長(zhǎng)度依然是n位,編碼的每一位是k3種狀態(tài)之一,本例邊編碼的每一位即1,2,3,5,6,7,8八種狀態(tài)之一。
步驟2.2、重復(fù)步驟2.1,直至得到時(shí)序圖中所有邊的編碼。
步驟3、根據(jù)步驟2所確定的邊編碼,構(gòu)造多值決策圖mdd(multi-valueddecisiondiagram)結(jié)構(gòu),得到與時(shí)序圖對(duì)應(yīng)的kd-mdd結(jié)構(gòu)。
kd-mdd結(jié)構(gòu)是mdd結(jié)構(gòu)的一種特殊情況,限定了它的變量個(gè)數(shù)和每個(gè)變量的每一位編碼的取值范圍,其變量個(gè)數(shù)
步驟3.1、使用多終點(diǎn)和邊值決策圖庫(kù),即meddly(multi-terminalandedge-valueddecisiondiagramlibrary),初始化一個(gè)含有n個(gè)變量的mdd,即頂點(diǎn)、時(shí)間點(diǎn)和邊的編碼長(zhǎng)度n,其值域如步驟2.1所述為1~k3,本例為1~8。
對(duì)于時(shí)序圖,使用布爾型mdd,其終點(diǎn)是真(t)或者是假(f);對(duì)于加權(quán)圖,使用整數(shù)或者實(shí)數(shù)型mdd,其終點(diǎn)是整數(shù)或者實(shí)數(shù)。
步驟3.2、根據(jù)步驟2所得的一條邊編碼,使用meddly庫(kù)中的createedge()函數(shù)生成一個(gè)初始mdd;用相同方法生成另一條邊的mdd。
步驟3.3、使用meddly庫(kù)中提供的union運(yùn)算符,對(duì)步驟3.2兩條邊生成的mdd進(jìn)行union運(yùn)算,合并結(jié)果保存在步驟3.1所得的初始mdd中。
步驟3.4、重復(fù)步驟3.2和3.3,直至所有邊都生成mdd并合并到初始mdd中,最終得到的mdd即為原圖的kd-mdd。
步驟4,根據(jù)步驟3所得的kd-mdd結(jié)構(gòu)進(jìn)行圖的基本操作。在得到的kd-mdd結(jié)構(gòu)上采用符號(hào)決策圖的邏輯操作進(jìn)行時(shí)序圖的基本操作,如頂點(diǎn)的直接鄰居和反向鄰居的查詢、時(shí)間點(diǎn)t時(shí)刻邊的激活狀態(tài)、時(shí)間點(diǎn)t時(shí)刻時(shí)序圖的快照、時(shí)間點(diǎn)t時(shí)刻邊的活動(dòng)等。
(1)時(shí)間點(diǎn)t時(shí)刻邊e(v1,v2,t)的查詢。
在所得的kd-mdd結(jié)構(gòu)圖上,根據(jù)邊的起止頂點(diǎn)v1和v2的編碼以及時(shí)間點(diǎn)t的編碼,得到該條邊在時(shí)間點(diǎn)t的特征函數(shù)e(v1,v2,t),在步驟3中所得到的原時(shí)序圖的kd-mdd中檢測(cè)e(v1,v2,t)的函數(shù)值。若查詢值為t,則該邊存在,反之該邊不存在。
使用meddly庫(kù)中提供intersection運(yùn)算符求兩個(gè)mdd的交運(yùn)算。將步驟3所得的原圖的kd-mdd與根據(jù)該條邊的特征函數(shù)e(v1,v2,t)生成的kd-mdd進(jìn)行intersection運(yùn)算,運(yùn)算結(jié)果為t,則該邊存在,否則不存在。
(2)直接鄰居查詢。
在所得的kd-mdd結(jié)構(gòu)圖上進(jìn)行的直接鄰居查詢操作求得頂點(diǎn)出度,根據(jù)步驟4.1中的查詢結(jié)果,將要進(jìn)行查詢的時(shí)間點(diǎn)賦值為t與邊起始點(diǎn)賦值為v1,圖中的所有其它頂點(diǎn)依次賦值給v2,檢測(cè)e(v1,v2,t)的函數(shù)值。若值為t,則在時(shí)間點(diǎn)t時(shí)刻當(dāng)前v2是v1的一個(gè)外鄰點(diǎn),否則不是;通過統(tǒng)計(jì)v1外鄰點(diǎn)的個(gè)數(shù)得到該頂點(diǎn)v1的出度。
(3)反向鄰居查詢。
在所得的kd-mdd結(jié)構(gòu)圖上進(jìn)行的反向鄰居查詢操作求得頂點(diǎn)入度,根據(jù)步驟4.1中的查詢結(jié)果,將要進(jìn)行查詢的時(shí)間點(diǎn)賦值為t與邊終止點(diǎn)賦值為v2,圖中的所有其它頂點(diǎn)依次賦值給v1,檢測(cè)e(v1,v2,t)的函數(shù)值。若值為t,則在時(shí)間點(diǎn)t時(shí)刻當(dāng)前v1是v2的一個(gè)反向鄰點(diǎn),否則不是;通過統(tǒng)計(jì)v2反向鄰居的個(gè)數(shù)得到該頂點(diǎn)v2的入度。
(4)增加邊。
在所得的kd-mdd結(jié)構(gòu)圖上,根據(jù)要在時(shí)間點(diǎn)t時(shí)刻增加邊的起止頂點(diǎn)v1和v2的編碼得到該條邊的特征函數(shù)e(v1,v2,t),生成該條邊的kd-mdd,然后與步驟3所得原圖的kd-mdd進(jìn)行union運(yùn)算,運(yùn)算結(jié)果即為增加了該邊的新圖的kd-mdd。
(5)刪除邊。
在所得的kd-mdd結(jié)構(gòu)圖上根據(jù)要?jiǎng)h除在時(shí)間點(diǎn)t時(shí)刻邊的起止頂點(diǎn)v1和v2的編碼得到該條邊的特征函數(shù)e(v1,v2,t),生成該條邊的kd-mdd,然后將步驟3所得原圖的kd-mdd與要?jiǎng)h除邊的kd-mdd進(jìn)行difference運(yùn)算,運(yùn)算結(jié)果即為刪除了該邊的新圖的kd-mdd。difference是meddly庫(kù)中提供的一個(gè)運(yùn)算符,用來求兩個(gè)mdd的差運(yùn)算,difference(a,b)={x|x屬于a且x不屬于b}。
本方法采用mdd存儲(chǔ)時(shí)序圖數(shù)據(jù),使kd樹中的同構(gòu)子樹被合并,節(jié)點(diǎn)數(shù)量大大減少,結(jié)構(gòu)更加緊湊;邏輯操作代替時(shí)序圖的基本操作,使操作變得更加快捷、簡(jiǎn)便。根據(jù)上述圖的基本操作,可拓展完成圖的復(fù)雜操作,比如圖中頂點(diǎn)的添加與刪除、子圖的添加與刪除、寬度優(yōu)先搜索、求最短路、網(wǎng)絡(luò)流等等。
上述實(shí)施例,僅為對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)一步詳細(xì)說明的具體個(gè)例,本發(fā)明并非限定于此。凡在本發(fā)明的公開的范圍之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍之內(nèi)。