本發(fā)明涉及圖論中的路徑搜索方法,具體涉及一種基于扁平化的網絡連通路徑快速搜索方法。
背景技術:
:網絡中頂點間連通距離路徑是圖論中的一個基本概念,也是廣泛應用于人工智能和網絡社區(qū)的一個基本概念。因為頂點之間的距離表示頂點間的相關性,它可以表示為匹配用戶社交搜索意圖最佳的其他用戶或內容。在上下文感知搜索中,它可以用于分配更高的排序權重給予與當前訪問的網頁關系更密切的網頁。因此網絡中最短路徑的分析與計算對分析網絡頂點關聯關系具有重要作用。而隨著硬件、軟件技術飛速發(fā)展,數據的規(guī)模在飛速增長;智能手機、gps終端和基于位置服務的普及與發(fā)展,地理信息數據呈爆炸式增長;微博、微信等網絡社交平臺迅速崛起,帶來了海量的社交數據。另外,數據的拓撲結構變得更加復雜;傳統(tǒng)的靜態(tài)圖只能粗糙地描述實際應用中的問題模型。隨著科技的發(fā)展和社會的進步,這種粗粒度的建模逐漸無法滿足應用的需求。同時,實時性的需求也是不可或缺;數據規(guī)模的增長和拓撲結構的變化導致計算路徑時需要執(zhí)行更多的運算,為了滿足實時性要求,算法必須更有效率。基于扁平化的連通路徑計算,通過啟發(fā)式的剪枝廣度優(yōu)先搜索算法尋找路徑,并結合子網絡扁平化構建頂點路徑索引。利用構建的路徑索引可以實現在秒級時間響應獲得準確的查詢目標對象之間的關聯關系。技術實現要素:針對上述現有技術的不足,本發(fā)明的目的在于提供一種基于扁平化的網絡連通路徑快速搜索方法。該方法具體涉及集合運算、圖搜索及搜索剪枝等策略,利用構建的路徑索引可以實現在秒級時間響應獲得準確的查詢目標對象之間的關聯關系。根據本發(fā)明的實施方案,提供一種基于扁平化的網絡連通路徑快速搜索方法:一種基于扁平化的網絡連通路徑快速搜索方法,該方法包括以下步驟:1)(以剪枝方式)構建網絡中每個頂點vi的子網絡gi;2)將步驟1)中得到的子網絡gi扁平化,獲得扁平化子網絡;和3)利用扁平化子網絡求解網絡任意兩點之間的近似最短路徑。在本發(fā)明中,所述步驟1)中子網絡的構建方法具體為:1.1)遍歷頂點vi的所有鄰接頂點,若鄰接頂點vk(其中vk∈vi,集合vi為頂點vi的鄰接頂點集合)與頂點vi之間的邊eik的權值wik大于閾值α,則加入集合vi1,否則加入集合v′i1;其中,邊權值大于閾值α的鄰接頂點集合vi1作為頂點vi子網絡gi的第一層,并記集合vi1的頂點vj(vj∈vi1)關于頂點vi的路徑為pij=(i∶j),而集合v′i1的頂點剪枝掉,即不進行接下來的步驟;1.2)對頂點集合vi1中的任意頂點vk,遍歷vk所有鄰接頂點,若鄰接頂點vm(其中vm∈vk,集合vk為頂點vk的鄰接頂點集合)與頂點vk之間的邊ekm的權值wkm大于閾值α且頂點vm不存在于子網絡gi中(即),則加入集合vi2,否則加入集合v′i2;其中,鄰接頂點集合vi2作為頂點vi子網絡gi的第二層,并記集合vi2的頂點vl(vl∈vi2)關于初始頂點vi的路徑為pil=pik+(k:l)=(i:k:l),而集合v′i2的頂點剪枝掉,即不進行后續(xù)的操作步驟;1.3)重復步驟1.2)中的擴展方式,將頂點vi的子網絡gi擴展到最大層數。在本發(fā)明中,所述步驟2)中將子網絡扁平化的方法具體為:2.1)排序網絡中全部頂點,得到頂點序列s;2.2)將步驟1)中得到的頂點vi的子網絡gi的各層頂點集合vi1,vi2,vi3,...,vin分別轉換成向量表示形式,集合至向量轉換過程如下:設頂點集合vi中的頂點為(v1,v2,v3...,vs),并查詢集合vi中頂點在序列s中的序號為(i1,i2,i3...,is);設維度為||s||(||s||為序列長度,即所有頂點數目)的向量分別將向量第i維(i∈{i1,i2,i3...,is})的數值設為1,其他維度數值設置為0,如此得到的向量為集合vi的向量表示;同理轉換子網絡的所有集合,經過轉換后,子網絡gi可由一組向量表示為2.3)對各層頂點集合vi1,vi2,vi3,...,vin求并集,以實現子網絡gi的扁平化,即將步驟2.2)中所得向量的各維按位求或運算,得到扁平化后的子網絡在本發(fā)明中,所述步驟3)中求解網絡任意兩點之間的近似最短路徑的方法具體為:3.1)假設兩個頂點分別為vi、vj,它們的扁平化子網絡分別為兩點之間的所有連通點為兩個子網絡頂點的交集,即將扁平化子網絡向量的各維按位與運算,得3.2)從頂點之間的連通點求得頂點之間的路徑:頂點vi的子網絡的各層頂點集合分別與步驟3.1)中得到的連通頂點集合做交集運算,子網絡各層頂點向量與連通頂點向量的各維按位求與運算,得若向量各維不全為零,則在頂點vi子網絡的第k層存在連接頂點vi與vj的連通點,若向量的第m維不為零,則頂點vm是頂點vi與vj的一個連通點;由步驟1)可得頂點vi到該頂點vm的路徑為pim,頂點vj到該頂點vm的路徑為pjm,從而頂點vi至頂點vj的一條路徑為pij=pim+pjm。優(yōu)選的是,所述步驟1.3)中頂點vi的子網絡gi的最大擴展層數為2-8層,優(yōu)選為3-6層。優(yōu)選的是,所述邊權值為頂點之間的共現頻率,表示頂點之間的相關程度。優(yōu)選的是,所述閾值α為最大邊權值的80%。優(yōu)選的是,所述步驟2.2)中向量第i維數值為“1”表示頂點集合vi中第i個頂點在該層頂點集合中存在,數值為“0”表示不存在。優(yōu)選的是,所述排序為根據頂點值將網絡中全部頂點按字典序升序排列。優(yōu)選的是,所述轉換為集合至向量的轉化;集合v中的頂點在序列s中的序號為i,則向量的第i維為1,其他維度為0。優(yōu)選的是,在進行步驟1)構建網絡中每個頂點的子網絡之前,對網絡進行預處理。優(yōu)選的是,所述預處理的方法是剪枝擴展方法和擴展路徑存儲方法。在本發(fā)明中,所述網絡是指由若干給定的點及連接兩點的線所構成的圖形,這種圖形通常用來描述某些事物之間的某種特定關系,用點代表事物,用連接兩點的線表示相應兩個事物間具有這種關系。例如將本發(fā)明用于文本搜索,則所述網絡是指以詞為頂點,共現頻率為邊的權值所構建的無向加權圖。所述邊權值大于閾值α是進行剪枝處理的一個過濾條件,閾值α的取值或者具體的過濾條件視具體情況而定。在本發(fā)明中,閾值α為最大邊權值的80%。所述剪枝處理即將不滿足前述過濾條件的不必要的搜索路徑提前舍棄,以簡化計算,降低計算復雜度。在本發(fā)明中,所述預處理的方法是指步驟1)中構建網絡中每個頂點的子網絡時使用的剪枝處理方法及擴展路徑存儲方法。在本發(fā)明中,頂點vi的子網絡的各層頂點集合分別與步驟3.1)中得到的連通頂點集合做交集運算,可快速求得連通點關于頂點vi子網絡的所屬層次,并集合步驟1)存儲的路徑可快速得到連通點至頂點vi的連通路徑。由于在步驟1)中進行子網絡擴展時已經存儲了頂點至各層次擴展頂點的路徑信息,因此路徑計算僅需查詢即可,而距離由層次信息可得。與現有技術相比,本發(fā)明具有的有益效果為:1、本發(fā)明采用啟發(fā)式剪枝廣度優(yōu)先搜索算法,可以有效減少路徑索引量;2、本發(fā)明將多層次的網絡結構轉換成扁平化的單層次結構,簡化計算,提高計算效率;3、本發(fā)明將路徑搜索過程轉換成集合操作,降低計算復雜度;4、本發(fā)明將子網絡扁平化與路徑計算轉換成集合運算相結合,提高查詢計算速率,能夠實現秒級響應。附圖說明圖1為本發(fā)明實施例1中無向加權圖的示意圖;圖2為本發(fā)明實施例1中構建的子網絡第一層示意圖;圖3為本發(fā)明實施例1中構建的子網絡第二層示意圖;圖4為本發(fā)明實施例1中兩點近似最短路徑示意圖。具體實施方式根據本發(fā)明的實施方案,提供一種基于扁平化的網絡連通路徑快速搜索方法:一種基于扁平化的網絡連通路徑快速搜索方法,該方法包括以下步驟:1)以剪枝方式構建網絡中每個頂點vi的子網絡gi;2)將步驟1)中得到的子網絡gi扁平化,獲得扁平化子網絡;和3)利用扁平化子網絡求解網絡任意兩點之間的近似最短路徑。在本發(fā)明中,所述步驟1)中子網絡的構建方法具體為:1.1)遍歷頂點vi的所有鄰接頂點,若鄰接頂點vk(其中vk∈vi,集合vi為頂點vi的鄰接頂點集合)與頂點vi之間的邊eik的權值wik大于閾值α,則加入集合vi1,否則加入集合v′i1;其中,邊權值大于閾值α的鄰接頂點集合vi1作為頂點vi子網絡gi的第一層,并記集合vi1的頂點vj(vj∈vi1)關于頂點vi的路徑為pij=(i:j),而集合v′i1的頂點剪枝掉,即不進行接下來的步驟;1.2)對頂點集合vi1中的任意頂點vk,遍歷vk所有鄰接頂點,若鄰接頂點vm(其中vm∈vk,集合vk為頂點vk的鄰接頂點集合)與頂點vk之間的邊ekm的權值wkm大于閾值α且頂點vm不存在于子網絡gi中(即),則加入集合vi2,否則加入集合v′i2;其中,鄰接頂點集合vi2作為頂點vi子網絡gi的第二層,并記集合vi2的頂點vl(vl∈vi2)關于初始頂點vi的路徑為pil=pik+(k∶l)=(i∶k∶l),而集合v′i2的頂點剪枝掉,即不進行后續(xù)的操作步驟;1.3)重復步驟1.2)中的擴展方式,將頂點vi的子網絡gi擴展到最大層數。在本發(fā)明中,所述步驟2)中將子網絡扁平化的方法具體為:2.1)排序網絡中全部頂點,得到頂點序列s;2.2)將步驟1)中得到的頂點vi的子網絡gi的各層頂點集合vi1,vi2,vi3,...,vin分別轉換成向量表示形式,集合至向量轉換過程如下:設頂點集合vi中的頂點為(v1,v2,v3...,vs),并查詢集合vi中頂點在序列s中的序號為(i1,i2,i3...,is);設維度為||s||(||s||為序列長度,即所有頂點數目)的向量分別將向量第i維(i∈{i1,i2,i3...,is})的數值設為1,其他維度數值設置為0,如此得到的向量為集合vi的向量表示;同理轉換子網絡的所有集合,經過轉換后,子網絡gi可由一組向量表示為2.3)對各層頂點集合vi1,vi2,vi3,...,vin求并集,以實現子網絡gi的扁平化,即將步驟2.2)中所得向量的各維按位求或運算,得到扁平化后的子網絡在本發(fā)明中,所述步驟3)中求解網絡任意兩點之間的近似最短路徑的方法具體為:3.1)假設兩個頂點分別為vi、vj,它們的扁平化子網絡分別為兩點之間的所有連通點為兩個子網絡頂點的交集,即將扁平化子網絡向量的各維按位與運算,得3.2)從頂點之間的連通點求得頂點之間的路徑:頂點vi的子網絡的各層頂點集合分別與步驟3.1)中得到的連通頂點集合做交集運算,子網絡各層頂點向量與連通頂點向量的各維按位求與運算,得若向量各維不全為零,則在頂點vi子網絡的第k層存在連接頂點vi與vj的連通點,若向量的第m維不為零,則頂點vm是頂點vi與vj的一個連通點;由步驟1)可得頂點vi到該頂點vm的路徑為pim,頂點vj到該頂點vm的路徑為pjm,從而頂點vi至頂點vj的一條路徑為pij=pim+pjm。優(yōu)選的是,所述步驟1.3)中頂點vi的子網絡gi的最大擴展層數為2-8層,優(yōu)選為3-6層。優(yōu)選的是,所述邊權值為頂點之間的共現頻率,表示頂點之間的相關程度。優(yōu)選的是,所述閾值α為最大邊權值的80%。優(yōu)選的是,所述步驟2.2)中向量第i維數值為“1”表示頂點集合vi中第i個頂點在該層頂點集合中存在,數值為“0”表示不存在。優(yōu)選的是,所述排序為根據頂點值將網絡中全部頂點按字典序升序排列。優(yōu)選的是,所述轉換為集合至向量的轉化;集合v中的頂點在序列s中的序號為i,則向量的第i維為1,其他維度為0。優(yōu)選的是,在進行步驟1)構建網絡中每個頂點的子網絡之前,對網絡進行預處理。優(yōu)選的是,所述預處理的方法是剪枝擴展方法和擴展路徑存儲方法。實施例1以在某醫(yī)療關聯搜索引擎的使用為例,具體闡述本發(fā)明在關聯圖上進行搜索的應用:系統(tǒng)環(huán)境如下表:機器浪潮nf5270m3,10臺操作系統(tǒng)ubuntu14.04server數據庫mysql5.5開發(fā)語言java(oraclejdk8)分布式計算框架hadoop2.6.0對搜索文檔集中的文檔進行斷句,獲得句子集合,對句子集合進行分詞獲取詞集合,計算詞集合中任意兩個詞之間的共現頻率,存儲于mysql中。以詞為頂點,共現頻率為邊的權值,構建無向加權圖,如圖1所示。一種基于扁平化的網絡連通路徑快速搜索方法,該方法包括以下步驟:1)以剪枝方式構建網絡中每個頂點的子網絡,為方便描述,以圖1網絡中頂點“1”為例描述子網絡的構建方法:1.1)遍歷頂點“1”的所有鄰接頂點,保留鄰接頂點中邊權值最大的2個鄰接頂點加入集合v11(即頂點“2”與頂點“3”,v11={2,3}),集合v11作為頂點“1”子網絡g1的第一層,如圖2所示,并記第一層頂點關于頂點“1”的路徑p1j=(1:j),例如頂點“1”至頂點“2”的路徑表示為p12=(1:2),而其他鄰接頂點進行剪枝掉,即不進行接下來的步驟,;1.2)對頂點集合v11的任意頂點,遍歷其所有鄰接頂點,保留鄰接頂點中邊權值最大的2個鄰接頂點且不存在于子網絡g1中的鄰接頂點集合v12={5,6,7}作為頂點“1”的子網絡g1的第二層,如圖3所示,并記第二層頂點vl(vl∈v12)關于初始頂點“1”的路徑為pil=pik+(k∶l)=(i∶k∶l),其中頂點k為上層頂點,例如頂點“5”關于頂點“1”的路徑為p15=p12+(2:5)=(1:2)+(2:5)=(1:2:5),而其他鄰接頂點同樣剪枝掉,即不進行后續(xù)的操作步驟。2)將步驟1)中得到的子網絡扁平化,其步驟如下:2.1)排序網絡中全部頂點得到有序頂點集合v(1∈v);2.2)將步驟1)中得到的頂點“1”的子網絡g1的各層頂點集合分別轉換成向量表示形式,即第一層頂點的向量表示為第二層頂點的向量表示為經過轉換后,子網絡g1可由一組向量表示2.3)對各層頂點集合求并集,以實現子網絡的扁平化,扁平化后的子網絡即將步驟2.2)中所得向量的各維按位求或運算,得3)利用扁平化子網絡求解網絡任意兩點之間的近似最短路徑,其步驟如下:3.1)假設兩個頂點分別為“1”和“7”,它們的扁平化子網絡向量分別為兩點之間的所有連通點為兩個子網絡頂點的交集,即將扁平化子網絡向量的各維按位求與運算,得3.2)從頂點之間的連通點求得頂點之間的路徑:頂點“1”的子網絡的各層頂點集合分別與步驟3.1)中得到的連通頂點集合做交集運算,子網絡g1=((0,1,1,0,0,0,0),(0,0,0,0,1,1,1))的各層頂點向量與連通頂點向量的各維按位求與運算,即若向量各維不全為零,則在頂點“1”子網絡的第k層存在連接頂點“1”與“7”的連通點,若向量的第m維不為零,則頂點vm是頂點“1”與“7”的一個連通點,由此結合步驟3.2)的結果顯然兩點之間的連通點向量與子網絡g1的第一層扁平化向量求與運算的結果不為0,其第3維為1,即得頂點“3”是“1”、“7”兩頂點連通路徑上的頂點,且同時位于頂點“1”和“7”的子網絡的第一層;再由步驟1)可得頂點“1”到頂點“3”的路徑為p13,頂點“7”到頂點“3”的路徑為p73;從而頂點“1”至頂點“7”的近似最短路徑為p17=p13+p73=(1∶3∶7),如圖4所示。當前第1頁12