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