專利名稱:一種圖中節(jié)點間最短路徑的查找方法
技術(shù)領域:
本發(fā)明涉及圖數(shù)據(jù)管理領域,特別是涉及 一種圖數(shù)據(jù)中節(jié)點間最 短路徑的查找方法。
背景技術(shù):
隨著計算機技術(shù)的快速發(fā)展,圖數(shù)據(jù)管理技術(shù)也得到了快速發(fā) 展。為了便于計算機快速處理,經(jīng)常將一些具體的技術(shù)問題抽象為圖 數(shù)據(jù),例如交通領域,將車站抽象為節(jié)點,將車站之間的行車路線抽 象為邊,這樣,就將車站之間的路線問題轉(zhuǎn)化為圖數(shù)據(jù)。
圖數(shù)據(jù)管理過程中,發(fā)現(xiàn)兩個節(jié)點的最短路徑是一個基本的操 作。傳統(tǒng)的算法能夠發(fā)現(xiàn)兩個節(jié)點的最短路,但是計算代價很高。以
Dijkstra算法為例,其計算代價是隨著節(jié)點數(shù)量和變數(shù)成平方數(shù)量級 上升的,當節(jié)點數(shù)量或者邊數(shù)量較大的情況下,動態(tài)運行的性能很難 滿足用戶的要求。為了減少運行時刻的代價, 一種可行的方案是事先 保存最短路信息。釆用最基本的方法,如果按照結(jié)點對保存,則需要 112對,每個最短路徑按照最壞的情況下,需要n,所以,整個最短路 信息的保存需要n3。當節(jié)點數(shù)據(jù)較多的時候,這個代價是難以承受的。 另外一種替代方案是存儲某個節(jié)點出發(fā)的最短路徑樹,則空間代價降 到n2,但是空間代價還是很高。
發(fā)明內(nèi)容
本發(fā)明的目的是提供 一種圖數(shù)據(jù)中節(jié)點間最短路徑的查找方法, 特別是提供 一 種快速查找節(jié)點間最短路徑的方法。
為達到上述目的,本發(fā)明的技術(shù)方案提供 一 種圖中節(jié)點間最短路 徑的查找方法,所述方法包括以下步驟
Sl,計算源圖中所有節(jié)點間的最短路徑,并進行編碼,并在編碼過程中設置節(jié)點間的最大跳數(shù)k;
S2,從源圖中確定需要查找最短路徑的第一點與第二點,根據(jù)上 述節(jié)點、編碼和最大跳數(shù)k,獲取所述第一點與第二點間的最短路徑。
其中,所述步驟S1中進行編碼是指針對源圖中的任意一個節(jié) 點n,帶有兩個集合inNodes和outNodes,在inNodes集合中,數(shù)據(jù) 形式為(m, cost ),記錄節(jié)點m到n的最短路徑cost,在outNodes集 合中,數(shù)據(jù)形式為(m,cost),記錄節(jié)點n到m的最短路徑cost。
其中,步驟S1具體包括以下步驟
Sl-l,對于源圖中任意一個節(jié)點n,在源圖中構(gòu)造一棵以n為根 節(jié)點的最短路徑樹spt(n);在最短路徑樹中,從n到樹中任意一個節(jié) 點m的路徑就是圖中n到m的最短路;
Sl-2,根據(jù)輸入的k值,在spt(n)中定位n的outNodes集合,該 集合標記為Nodesl,描述為Nodeb(ala屬于spt(n)中節(jié)點集合和n 的outNodes交集};
Sl-3,在Nodel集合中獲取節(jié)點nl,獲取nl為根節(jié)點的子樹和 nl的outNodes之間的交集,標記為Node2, Node2二(ala在subtree(nl) 和nl.outNodes中,nl在Nodel},其中subtree(nl)表示以nl為root
節(jié)點的子樹;
Sl-4,在Node2集合中獲取節(jié)點n2,以標記Node2集合相同的 方法標記Node3、 Node4.......,直到達到給定的k閾值為止;
Sl-5,保存上述編碼結(jié)果。
其中,在步驟Sl-5之后,還包括以下步驟
S1-6,判斷所述最短路徑樹中的任意一節(jié)點m是否經(jīng)過編碼,如 果是,則循環(huán)步驟Sl-6,直到所有節(jié)點都經(jīng)過編碼;如果否,則進行 編碼。
其中,步驟Sl-6中進行編碼的步驟包括
Sl-7,確定所述最短路徑樹中從第一點到節(jié)點m的路徑;Sl-8,將該路徑劃分為k等份,確定每個分界點;
S1-9,將每個分界點p添加到p的前一個分界點的outNode集合 中,并將p前的一個分界點添加到p的inNode集合中。 其中,步驟S2具體包括以下步驟
S3-l,判斷k是否為偶數(shù),如果是,則轉(zhuǎn)步驟S3-2,否則轉(zhuǎn)步驟 S3-6;
S3-2,從第一點開始,根據(jù)第一點的outNode集合,擴展得到第
一點的子節(jié)點的集合Nodel,再根據(jù)第一點的子節(jié)點的outNode集合, 得到子節(jié)點的子節(jié)點集合Node2。擴展過程中cost進行累加,標記第
一個節(jié)點到此節(jié)點的最短距離;依次類推,擴展l次,得到集合
NodeR,設置NodeS是集合Nodel、 Node2、 ......、 NodeR的并集;
S3-3,從所述第二點開始,根據(jù)第二點的inNode集合,擴展得
到第二點的子節(jié)點的集合Nodel',再根據(jù)第二點的子節(jié)點的inNode 集合,得到子節(jié)點的子節(jié)點集合Node2'擴展過程中cost進行累加,
標記此節(jié)點到第二節(jié)點的最短距離;,依次類推,擴展A次,得到集
2
合NodeR';設置集合NodeS'是集合Noder 、 Node2' 、 .......NodeR'
的并集;
S3-4,獲取集合NodeS與集合NodeS'的交集,并在其中獲取一 個節(jié)點m,從第一點到m累加上m到第二點的代價之和最小,m是 第 一 點到第二點最短路徑中的中間節(jié)點;
S3-5利用遞歸的方法,獲取第一點到m的最短路和m到第二點 的最短路;
S3-6,從第一點開始,根據(jù)第一點的outNode集合,擴展得到第 一點的子節(jié)點的集合Node 1 ,再根據(jù)第 一 點的子節(jié)點的outNode集合, 得到子節(jié)點的子節(jié)點集合Node2.擴展過程中cost進行累加,標記第 一個節(jié)點到此節(jié)點的最短距離,依次類推,擴展^次,得到集合 NodeO,設置集合NodeP是集合Nodel、 Node2........ NodeO的并
集;
S3-7,從所述第二點開始,根據(jù)第二點的inNode集合,擴展得
7到第二點的子節(jié)點的集合Nodel',再根據(jù)第二點的子節(jié)點的inNode 集合,得到子節(jié)點的子節(jié)點集合Node2',擴展過程中cost進行累加,
標記此節(jié)點到第二個節(jié)點的最短距離,依次類推,擴展^次,得到
2
集合NodeO';設置NodeP'是集合Nodel'、 Node2'........ NodeO'
的并集;
S3-8,取集合NodeP與NodeP'中節(jié)點數(shù)量較少的 一個集合再擴 展一次,得到集合NodeQ;
S3-9,獲取集合NodeP與NodeP'中沒有擴展的集合與集合 NodeQ的交集,并在該交集中獲取一個節(jié)點m,從第一點到m累加 上m到第二點的代價之和最小,m是第一點到第二點最短路徑中的 中間節(jié)點;
S3-10,利用遞歸的方法,獲取第一點到m的最短路和m到第二 點的最短路。
其中,在步驟S2之后還包括以下步驟
S3,保存所述第一點與第二點之間的最短路徑信息、節(jié)點信息、 編碼信息和最大跳數(shù)k信息。
上述技術(shù)方案具有如下優(yōu)點本發(fā)明利用預先計算選擇路徑,首 先在計算過的路徑中查找,在計算過的路徑?jīng)]有查找路徑時,再進行 新的查找,并保存相應的結(jié)果及編碼結(jié)果,以便以后查找使用,大大 節(jié)約了査找時間,通過較少的空間代價來提高路徑發(fā)現(xiàn)的執(zhí)行效率, 大大提高了節(jié)點間最短路徑的查找時間。
圖l是本發(fā)明實施例的 一種圖中節(jié)點間最短路徑的查找方法的流 程圖2是本發(fā)明實施例的 一種最短路徑數(shù)的結(jié)構(gòu)示意圖; 圖3是本發(fā)明實施例的另 一種最短路徑數(shù)的結(jié)構(gòu)示意圖。
具體實施方式
下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式
作進一步詳細 描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
目前出現(xiàn)的大量復雜數(shù)據(jù),如道路網(wǎng)格、社交網(wǎng)絡、生物分子等, 都可以抽象為圖數(shù)據(jù)。圖數(shù)據(jù)之上的一種重要操作就是發(fā)現(xiàn)兩個節(jié)點 之間的最短路。隨著圖數(shù)據(jù)規(guī)模的增大,傳統(tǒng)的路徑發(fā)現(xiàn)算法的效率 不能滿足要求。為了提高運行時刻的路徑發(fā)現(xiàn)效率,本專利提出了節(jié) 點最短路徑索引技術(shù),通過存儲有限的預先計算的節(jié)點關(guān)系,提高運 行時刻兩點之間最短路的發(fā)現(xiàn)效率。舉例來講,在社交網(wǎng)絡中,參與 社交的人員抽象為一個節(jié)點,人員之間的聯(lián)系抽象為一條邊。本專利 能夠快速發(fā)現(xiàn)兩個人員之間的人際關(guān)系。在交通領域中,本專利能夠 發(fā)現(xiàn)兩個車站之間的路徑。在移動節(jié)點網(wǎng)絡路由方面,本發(fā)明能夠發(fā) 現(xiàn)兩個節(jié)點之間的路由路徑。相對于直接使用傳統(tǒng)的最短路算法,本 發(fā)明利用預先計算選擇路徑,通過較少的空間代價來提高路徑發(fā)現(xiàn)的 執(zhí)行效率。
本實施例的圖中節(jié)點間最短路徑的查找方法,分為兩步,第一步
是離線的,就是預先計算所有節(jié)點的最短路,實現(xiàn)編碼;第二部是在 線的,就是利用預先計算好的節(jié)點編碼,實現(xiàn)最短路發(fā)現(xiàn)。具體包括 以下步驟
Sl,計算源圖中所有節(jié)點間的最短路徑,并進行編碼,并在編碼 過程中設置節(jié)點間的最大跳數(shù)k;最大跳數(shù)k是指從第 一 點經(jīng)過k跳 后到達第二點,也就是說,假如最大跳數(shù)k為3,從第一點經(jīng)過3跳 后到達第二點,即在第一點與第二點之間存在2個中間節(jié)點。最大跳 數(shù)k是客戶根據(jù)自己的需求設置,當客戶的數(shù)據(jù)處理裝置計算能力較 強,且客戶希望得到一個更為準確的信息時,可以設置較小的最大跳 數(shù)k,反之,設置較大的最大跳數(shù)k。
S2,從源圖中確定需要查找最短路徑的第一點與第二點,根據(jù)上 述節(jié)點、編碼和最大跳數(shù)k,獲取所述第一點與第二點間的最短路徑。S3,保存所述第一點與第二點之間的最短路徑信息、節(jié)點信息、
編碼信息和最大跳數(shù)k信息。
其中,步驟S1中進行編碼是指針對源圖中的任意一個節(jié)點n, 帶有兩個集合inNodes和outNodes,在inNodes集合中,數(shù)據(jù)形式為 (m, cost),記錄節(jié)點m到n的最短路徑cost,在outNodes集合中, 數(shù)據(jù)形式為(m,cost),記錄節(jié)點n到m的最短路徑cost。
步驟S1具體包括以下步驟
Sl-l,對于源圖中任意一個節(jié)點n,在源圖中構(gòu)造一棵以n為根 節(jié)點的最短路徑樹spt(n);在最短路徑樹中,從n到樹中任意一個節(jié) 點m的路徑就是圖中n到m的最短路;
S1-2,根據(jù)輸入的k值,在spt(n)中定位n的outNodes集合,該 集合標記為Nodesl,描述為Nodel-(ala屬于spt(n)中節(jié)點集合和n 的outNodes交集};
Sl-3,在Nodel集合中獲取節(jié)點nl,獲取nl為根節(jié)點的子樹和 nl的outNodes之間的交集,標記為Node2, Node2^ala在subtree(nl) 和nl.outNodes中,nl在Nodel},其中subtree(nl)表示以nl為root
節(jié)點的子樹;
Sl-4,在Node2集合中獲取節(jié)點n2,以標記Node2集合相同的
方法標記Node3、 Node4.......,直到達到給定的k閾值為止;上述步
驟具體來講,就是標記Nodel、 Node2........ Nodek中節(jié)點上的跳數(shù)。
Sl-5,保存上述編碼結(jié)果。
在步驟Sl-5之后,還包括以下步驟
Sl-6,判斷所述最短路徑樹中的任意一節(jié)點m是否經(jīng)過編碼,也 就是說,判斷m點上的跳數(shù)是否標記過,如果是,則循環(huán)步驟Sl-6, 直到所有節(jié)點都經(jīng)過編碼;如果否,則進行編碼。編碼的步驟具體包 括
S1-7,確定所述最短路徑樹中從第一點到節(jié)點m的路徑;S1-8,將該路徑劃分為k等份,確定每個分界點;
S1-9,將每個分界點p添加到p的前一個分界點的outNode集合 中,并將p前的 一個分界點添加到p的inNode集合中。 其中,步驟S2具體包括以下步驟
S3-1,判斷k是否為偶數(shù),如果是,則轉(zhuǎn)步驟S3-2,否則轉(zhuǎn)步驟 S3陽6;
S3-2,從第一點開始,根據(jù)第一點的outNode集合,擴展得到第
一點的子節(jié)點的集合Nodel,再根據(jù)第 一 點的子節(jié)點的outNode集合, 得到子節(jié)點購子節(jié)點集合Node2。擴展過程中cost進行累加,標記第
一個節(jié)點到此節(jié)點的最短距離;依次類推,擴展^次,得到集合
2
NodeR,設置NodeS是集合Nodel 、 Node2........ NodeR的并集;
S3-3,從所述第二點開始,根據(jù)第二點的inNode集合,擴展得
到第二點的子節(jié)點的集合Nodel',再根據(jù)第二點的子節(jié)點的inNode 集合,得到子節(jié)點的子節(jié)點集合Node2'擴展過程中cost進行累加,
標記此節(jié)點到第二節(jié)點的最短距離;,依次類推,擴展f次,得到集 合NodeR/ ;設置集合NodeS'是集合Noder 、 Node2'........NodeR/
的并集;
S3-4,獲取集合NodeS與集合NodeS'的交集,并在其中獲取一 個節(jié)點m,從第一點到m累加上m到第二點的代價之和最小,m是 第 一 點到第二點最短路徑中的中間節(jié)點;
S3-5利用遞歸的方法,獲取第一點到m的最短路和m到第二點 的最短路;
S3-6,從第一點開始,根據(jù)第一點的outNode集合,擴展得到第 一點的子節(jié)點的集合Nodel ,再根據(jù)第一點的子節(jié)點的outNode集合, 得到子節(jié)點的子節(jié)點集合Node2.擴展過程中cost進行累加,標記第
一個節(jié)點到此節(jié)點的最短距離,依次類推,擴展^次,得到集合
NodeO,設置集合NodeP是集合Nodel 、 Node2........ NodeO的并
集;
S3-7,從所述第二點開始,根據(jù)第二點的inNode集合,擴展得
ii到第二點的子節(jié)點的集合Nodel',再根據(jù)第二點的子節(jié)點的inNode 集合,得到子節(jié)點的子節(jié)點集合Node2',擴展過程中cost進行累加,
標記此節(jié)點到第二個節(jié)點的最短距離,依次類推,擴展^i次,得到 集合NodeO';設置NodeP'是集合Noder、 Node2'........ Node(y
的并集;
S3-8,取集合NodeP與NodeP'中節(jié)點數(shù)量較少的一個集合再擴 展一次,得到集合NodeQ;
S3-9,獲取集合NodeP與NodeP'中沒有擴展的集合與集合 NodeQ的交集,并在該交集中獲取一個節(jié)點m,從第一點到m累加 上m到第二點的代價之和最小,m是第一點到第二點最短路徑中的 中間節(jié)點;
S3-10,利用遞歸的方法,獲取第一點到m的最短路和m到第二 點的最短路。
整個方法分為兩個步驟, 一個是索引構(gòu)造階段, 一個是利用索引 信息發(fā)現(xiàn)最短路徑的階段。下面以具體實例進行說明。
給定圖GKN,E),最大跳數(shù)k,針對圖中的每個節(jié)點n,帶有兩個 集合inNodes和outNodes。在inNodes集合中,數(shù)據(jù)開》式為(m, cost),記 錄節(jié)點m到n的最短路cost, cost是指從節(jié)點m到n之間的路徑。在 outNodes集合中,數(shù)據(jù)形式為(m,cost),記錄節(jié)點n到m的最短路cost, 同樣,cost是指從節(jié)點n到m之間的路徑。
對于圖中任意一個節(jié)點n,我們根據(jù)目前的最短路發(fā)現(xiàn)算法,在 圖中構(gòu)造一棵以n為根節(jié)點的最短路徑樹spt(n)。在這棵樹中,從n到 樹中其他節(jié)點m的路徑,就是在源圖G中從n到m的最短路徑。
我們在最短路徑樹中開始產(chǎn)生n節(jié)點為root節(jié)點的最短路編碼,主 要分為兩個部分,初始化部分和編碼部分
初始化部分包括根據(jù)輸入的k值,我們完成如下操作在spt(n) 中定位n的outNodes集合,這個集合標記為Nodesl,或者描述為 Nodel^ala屬于spt(n)中節(jié)點集合和n.outNodes交集),在Nodel集合中獲取節(jié)點nl,我們發(fā)現(xiàn)nl為root節(jié)點的子樹和nl的outNodes之間的交 集,Node2:(aia在subtree(nl)和nl.outNodes中,nl在Nodel〉,其中 subtree(nl)表示以nl為root節(jié)點的子樹。
Node3的定義類似與Node2,我們繼續(xù)標記,直到達到給定的k閾 值為止。編碼部分包括如圖2所示,假定l的outNode集合包含5和8, 8的outNodes集合包含b和c 。我們構(gòu)造以1為root節(jié)點的最短路徑樹, 開始編碼。由于l的outNodes集合包含5和8, 8的outNodes集合包含b 和c,這意味著5、 8、 b、 c前面編碼已經(jīng)體現(xiàn),如果1^=3,則無需對5 8 bc進行編碼。但是,剩下的節(jié)點還是需要編碼,來保存l到其他節(jié)點 的最短路徑信息。
編碼部分對于最短路徑樹spt(n)中的沒有被標記的節(jié)點m,確定 n到m的路徑path(n,m),在路徑path(n,m)中根據(jù)下標劃分k等份,確定 每個分界點。對于分界點s,假定其相對的位置為i,如果s沒有被標記, 或者s被標記,但是s的標記大于i,則s標記為i,同時,將s增加到path[i-l] 的outNodes中,將path[i-l]增加至!js的inNodes中。如果s被標記,同時s 的標記小于i,則無需增加s到編碼中。反復處理,直到所有節(jié)點標記 完畢。
圖3表示從node l到nodem的最短路徑,假定1^=3,則整個序列分 成3份,分界點包括l,a,3,m;我們需要保證從a的3跳之內(nèi)找到m。編 碼結(jié)果如下
a增力口至U 1的outNodes, 1增力口至U a的inNodes ,
aJ#力口到3的inNodes , 3增力口到a的outNodes;
3增加到m的inNodes, m增加到3的outNodes。
下面介紹給定節(jié)點和其inNodes, outNodes的數(shù)據(jù),發(fā)現(xiàn)任意兩點 之間的路徑的方法。例如給定節(jié)點n和節(jié)點m,我們開始利用inNodes 和outNodes發(fā)現(xiàn)路徑。
從n節(jié)點開始,根據(jù)outNodes,擴展[k/2]次,得到Nodel節(jié)點集合;從m節(jié)點開始,根據(jù)inNodes,擴展[k/2]次,得到Node2節(jié)點集合。
如果k是偶數(shù),擴展終止,如果k是奇數(shù),選擇Nodel和Node2中 節(jié)點數(shù)量較小的集合繼續(xù)擴展一次。獲取中間節(jié)點集合Mid^ala在 nodel中,a在node2,并且(n,a)的cost+(a,m)的cost最小}中。如果Mid 中只有一個節(jié)點,則我們利用遞歸的方法,繼續(xù)發(fā)現(xiàn)n到a的路徑和a 到m的路徑。如果Mid中存在多個節(jié)點,則我們按照n到這些節(jié)點的距 離的排序,利用遞歸的方法,發(fā)現(xiàn)每個節(jié)點空間的最短路徑。
例如,如圖3所示,發(fā)現(xiàn)l到m的最短路,我們從l的outNodes出發(fā), 得到Nodel集合,包括a;我們從m的inNodes出發(fā),得到Node2集合,包 括3;我們進一步擴展Nodel,將3加入到Nodel中。Nodel和Node2共 有的數(shù)據(jù)是3,計算代價,l到3的代價累加3到m的代價,在整個mid 集合中最小。于是,我們確定3是l到m最短路的中間節(jié)點。我們利用 同樣的方法來獲取1到3之間的路徑,以及3到m之間的路徑。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術(shù)領 域的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以 做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。
權(quán)利要求
1、一種圖中節(jié)點間最短路徑的查找方法,其特征在于,所述方法包括以下步驟S1,計算源圖中所有節(jié)點間的最短路徑,并進行編碼,并在編碼過程中設置節(jié)點間的最大跳數(shù)k;S2,從源圖中確定需要查找最短路徑的第一點與第二點,根據(jù)上述節(jié)點、編碼和最大跳數(shù)k,獲取所述第一點與第二點間的最短路徑。
2、 如權(quán)利要求1所述的圖中節(jié)點間最短路徑的查找方法,其特 征在于,所述步驟S1中進行編碼是指針對源圖中的任意一個節(jié)點 n,帶有兩個集合inNodes和outNodes,在inNodes集合中,數(shù)據(jù)形 式為(m, cost),記錄節(jié)點m到n的最短路徑cost,在outNodes集合 中,數(shù)據(jù)形式為(m,cost),記錄節(jié)點n到m的最短路徑cost。
3、 如權(quán)利要求2所述的圖中節(jié)點間最短路徑的查找方法,其特 征在于,步驟S1具體包括以下步驟Sl-l,對于源圖中任意一個節(jié)點n,在源圖中構(gòu)造一棵以n為根 節(jié)點的最短路徑樹spt(n);在最短路徑樹中,從n到樹中任意一個節(jié) 點m的路徑就是圖中n到m的最短路;Sl-2,根據(jù)輸入的k值,在spt(n)中定位n的outNodes集合,該 集合標記為Nodesl,描述為Nodel={a|a屬于spt(n)中節(jié)點集合和n 的outNodes交集};S1-3,在Nodel集合中獲取節(jié)點nl,獲取nl為根節(jié)點的子樹和 nl的outNodes之間的交集,標記為Node2, Node2^ala在subtree(nl) 和nl.outNodes中,nl在Nodel},其中subtree(nl)表示以nl為root節(jié)點的子樹;Sl-4,在Node2集合中獲取節(jié)點n2,以標記Node2集合相同的方法標記Node3 、 Node4.......,直到達到給定的k闊值為止;Sl-5,保存上述編碼結(jié)果。
4、 如權(quán)利要求3所述的圖中節(jié)點間最短路徑的查找方法,其特征在于,在步驟Sl-5之后,還包括以下步驟Sl-6,判斷所述最短路徑樹中的任意一節(jié)點m是否經(jīng)過編碼,如果否,則進行編碼。
5、 如權(quán)利要求4所述的圖中節(jié)點間最短路徑的查找方法,其特 征在于,步驟Sl-6中進行編碼的步驟包括Sl-7,確定所述最短路徑樹中從第一點到節(jié)點m的路徑; S1-8,將該路徑劃分為k等份,確定每個分界點; Sl-9,將每個分界點p添加到p的前一個分界點的outNode集合 中,并將p前的一個分界點添加到p的inNode集合中。
6、 如權(quán)利要求5所述的圖中節(jié)點間最短路徑的查找方法,其特 征在于,步驟S2具體包括以下步驟S3-l,判斷k是否為偶數(shù),如果是,則轉(zhuǎn)步驟S3-2,否則轉(zhuǎn)步驟 S3-6;S3-2,從第一點開始,根據(jù)第一點的outNode集合,擴展得到第一點的子節(jié)點的集合Node 1 ,再根據(jù)第 一 點的子節(jié)點的outNode集合, 得到子節(jié)點的子節(jié)點集合Node2。擴展過程中cost進行累加,標記第一個節(jié)點到此節(jié)點的最短距離;依次類推,擴展f次,得到集合NodeR,設置NodeS是集合Nodel、 Node2........ NodeR的并集;S3-3,從所述第二點開始,根據(jù)第二點的inNode集合,擴展得到第二點的子節(jié)點的集合Nodel',再根據(jù)第二點的子節(jié)點的inNode 集合,得到子節(jié)點的子節(jié)點集合Node2'擴展過程中cost進行累加,標記此節(jié)點到第二節(jié)點的最短距離;,依次類推,擴展A次,得到集 合NodeR/ ;設置集合NodeS'是集合Nodel' 、 Node2'........NodeR'的并集;S3-4,獲取集合NodeS與集合NodeS'的交集,并在其中獲取一 個節(jié)點m,從第一點到m累加上m到第二點的代價之和最小,m是 第 一 點到第二點最短路徑中的中間節(jié)點;3S3-5利用遞歸的方法,獲取第一點到m的最短路和m到第二點 的最短路;S3-6,從第一點開始,根據(jù)第一點的outNode集合,擴展得到第一點的子節(jié)點的集合Nodel ,再根據(jù)第一點的子節(jié)點的outNode集合,得到子節(jié)點的子節(jié)點集合Node2.擴展過程中cost進行累加,標記第一個節(jié)點到此節(jié)點的最短距離,依次類推,擴展!^次,得到集合2NodeO,設置集合NodeP是集合Nodel、 Node2........ NodeO的并集;S3-7,從所述第二點開始,根據(jù)第二點的inNode集合,擴展得到第二點的子節(jié)點的集合Nodel',再根據(jù)第二點的子節(jié)點的inNode 集合,得到子節(jié)點的子節(jié)點集合Node2',擴展過程中cost進行累加,標記此節(jié)點到第二個節(jié)點的最短距離,依次類推,擴展^次,得到 集合NodeO';設置NodeP'是集合Noder、 Node2'........ NodeO'的并集;S3-8,取集合NodeP與NodeP'中節(jié)點數(shù)量較少的一個集合再擴 展一次,得到集合NodeQ;S3-9,獲取集合NodeP與NodeP'中沒有擴展的集合與集合 NodeQ的交集,并在該交集中獲取一個節(jié)點m,從第一點到m累加 上m到第二點的代價之和最小,m是第一點到第二點最短路徑中的 中間節(jié)點;S3-10,利用遞歸的方法,獲取第一點到m的最短路和m到第二 點的最短路。
7、如權(quán)利要求1所述的圖中節(jié)點間最短路徑的查找方法,其特 征在于,在步驟S2之后還包括以下步驟S3,保存所述第一點與第二點之間的最短路徑信息、節(jié)點信息、 編碼信息和最大跳數(shù)k信息。
全文摘要
本發(fā)明公開了一種圖中節(jié)點間最短路徑的查找方法,分為兩步,第一步是先計算所有節(jié)點的最短路,實現(xiàn)編碼;第二部是利用預先計算好的節(jié)點編碼,實現(xiàn)最短路發(fā)現(xiàn)。本發(fā)明利用預先計算選擇路徑,通過較少的空間代價來提高路徑發(fā)現(xiàn)的執(zhí)行效率,大大提高了節(jié)點間最短路徑的查找時間。
文檔編號G06F17/30GK101458716SQ20081024748
公開日2009年6月17日 申請日期2008年12月31日 優(yōu)先權(quán)日2008年12月31日
發(fā)明者楊冬青, 王騰蛟, 軍 高 申請人:北京大學