两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于Boost庫的K則最短路徑搜索方法和系統(tǒng)的制作方法

文檔序號:7769232閱讀:353來源:國知局
專利名稱:一種基于Boost庫的K則最短路徑搜索方法和系統(tǒng)的制作方法
技術領域
本發(fā)明屬于計算機網(wǎng)絡領域,具體涉及一種基于Boost庫的K則最短路徑搜索方法和系統(tǒng)。
背景技術
在網(wǎng)絡規(guī)劃或路徑搜索中,經(jīng)常需要尋找新路由,一般地,這可以通過圖論中的最短路徑方法解決。常用的最短路方法是廣度優(yōu)先方法、dijkstra方法等經(jīng)典方法。這些方法的一個共同特點是只尋找圖中給定點到任意點間的最短路徑。但是這在實踐中往往是不夠的,比如,在路由規(guī)劃中,除了最短路徑外,可能需要尋找第二短路徑作為備用,在有些條件下,可能需要尋找第三、第四短的路徑或者所有路徑。這類問題統(tǒng)一稱為K短路徑問題或 K則最短路徑問題。K短路徑問題最早由Hoffman和I^avley提出,多年來一直受到業(yè)界廣泛重視,K短徑分為嚴密K則最短路徑方法和有損K則最短路徑方法兩類。前者具有嚴密的理論基礎,所得到的K條路徑是起終點間所有可能路徑按權值遞增排序后的前K條路徑,后者通過啟發(fā)式策略等技術,通過犧牲有限的精度以換取效率的大幅度提高。根據(jù)路徑是否成環(huán),K則最短路徑方法還可以分為限定無環(huán)方法和自由路徑方法。前者要求求得的路徑必須是簡單路徑,不能含有回路,后者允許路徑包含回路。限定無環(huán)路徑的K則最短路徑應用更加普遍。 本發(fā)明針對限定無環(huán)K短路徑。與單源最短路徑問題相比,K則最短路徑問題在方法設計上更為復雜,目前尚沒有一種K則最短路徑方法如單源最短路徑方法中的Dijkstra方法一樣得到業(yè)界共識并且達到大規(guī)模實用化程度。對于單源最短路徑問題,已經(jīng)有現(xiàn)成的可以直接調(diào)用的高效率免費開源計算機方法,最著名的是C++Boost Graph圖庫。該庫已經(jīng)集成了圖論中的大多數(shù)基本方法,包括BFS、DFS、dijkstra. Bellman R)rd等基本最短路徑方法,這樣大大減輕了應用的難度,基本可以直接嵌入在自己代碼中,不需要單獨編寫方法本身代碼。常用的K短路徑搜索方法有刪除邊方法、偏離邊方法等。但是這些方法僅僅是一種理論上的模型,與實際應用還有一定差距,不同于最短路徑方法,尚未有開源的成熟高效計算機方法可供直接應用。

發(fā)明內(nèi)容
本發(fā)明的目的是供一種能直接應用于網(wǎng)絡的多重最短路徑搜索方法,該方法應能解決以下幾個方面具體問題1)可提供限定無環(huán)路徑的K則最短路徑問題的計算機算法,具有實用性,而非一種純理論上的算法概念;2)給出源宿節(jié)點間任意給定數(shù)目(即K數(shù))并且以路徑距離排序的所有路徑,如果實際路徑數(shù)小于K或K = 0,則給出所有實際路徑,否則給出前K短路徑;3)可提供限定分離條件的K則最短路徑問題計算機算法,限定分離方式分別為節(jié)點分離、邊分離、不分離3種;為實現(xiàn)上述目的,本發(fā)明提供一種基于Boost庫的K則最短路徑搜索方法,其改進之處在于該方法在成熟的C++Boost Graph圖庫基礎之上擴展K則最短路徑算法;采用d 叉堆數(shù)據(jù)結構最優(yōu)化排序待選最短路徑;采用偏離邊的方式發(fā)展多重最短路由。本發(fā)明提供的優(yōu)選技術方案中,所述K短路徑搜索方法包括如下步驟步驟1 調(diào)用Boost庫函數(shù)計算源宿節(jié)點間最短路徑,令k = 1 ;步驟2 如果要求路徑分離,則調(diào)用支持分離的K短路徑算法,否則進入步驟3 ;步驟3 定義d叉堆數(shù)據(jù)結構Q,將所求最短路徑放入堆Q ;步驟4 判斷如果k < K且堆Q不空,進入步驟5,否則算法結束;步驟5 從堆Q中彈取出第k短路徑,記為P,采用偏離邊方法從ρ發(fā)展新的偏離短路徑,存入堆Q ;步驟6 :k++,返回步驟4 ;本發(fā)明提供的第二優(yōu)選技術方案中,在所述步驟2中支持分離的K短路徑搜索方法包括如下步驟步驟2-1 判斷如果k < K并且第k短路徑非空則進入步驟2-2,否則算法結束;步驟2-2 將前k短路徑所有節(jié)點或邊存入排除列表;步驟2-3 調(diào)用改進Boost庫函數(shù),忽略(不遍歷)排除列表中的節(jié)點或邊,求得第k+Ι短路徑,存入所求K短路徑集;步驟2-4 :k++,返回步驟2-1。本發(fā)明提供的第三優(yōu)選技術方案中,在所述步驟5中以路徑ρ為基礎發(fā)展偏離路徑方法包括如下步驟步驟5-1 令i =路徑ρ偏離點索引;步驟5-2 判斷如果i < p. size ()則進入步驟5-3,否則算法結束;步驟5-3 記錄i對應節(jié)點為dev,記錄路徑ρ中第一個節(jié)點到第i節(jié)點集合為 colors,記錄節(jié)點dev對應偏離邊集合為edges ;步驟5-4 調(diào)用Boost函數(shù)計算以節(jié)點dev為始的最短路徑Pt,需忽略節(jié)點集 colors 禾口邊集 edges ;步驟5-5 根據(jù)Pt與colors合成新路徑_p,計算_p的偏離點、偏離邊集并作記錄;步驟5-6 將新路徑_p存入d叉堆Q,i++,返回步驟5-2。本發(fā)明提供的第四優(yōu)選技術方案中,提供一種基于Boost庫的K則最短路徑搜索系統(tǒng),其改進之處在于,所述搜索系統(tǒng)包括最短路徑計算單元,調(diào)用Boost庫函數(shù)計算含有限定條件的源宿節(jié)點間最短路徑;分離路徑計算單元,判斷最短路徑分離方式,如果要求路徑分離,則調(diào)用支持分離的K短路徑算法;K短路徑篩選單元,設置d叉堆數(shù)據(jù)結構Q,將所求k短路徑存入堆Q,并且自動篩選出第k短路徑;偏離路徑計算單元,根據(jù)從堆Q中彈取出的第k短路徑P,采用偏離邊方法從ρ發(fā)
5展新的偏離短路徑,存入堆Q。本發(fā)明提供的第五優(yōu)選技術方案中,所述分離路徑判斷計算單元,包括排除列表存儲模塊,存儲前k短路徑節(jié)點集和邊集;分離路徑計算模塊,采用Boost庫函數(shù)并且忽略排除列表中的節(jié)點集或邊集計算第k+Ι短路徑,存入所求K短路徑集。本發(fā)明提供的第六優(yōu)選技術方案中,所述偏離路徑計算單元,包括偏離邊存儲模塊,依次記錄前k短路徑的偏離點與偏離邊集;偏離路徑發(fā)展模塊,以第k短路徑ρ為基礎,發(fā)展其對應的偏離路徑集,并且存入 d叉堆Q;偏離路徑合成模塊,將路徑ρ偏離點前一段路徑與以偏離點為始的最短路徑合成新路徑_P,計算_P偏離點、偏離邊集并存儲。與現(xiàn)有技術方法相比,本發(fā)明提供的一種基于Boost庫的K則最短路徑搜索方法與系統(tǒng),具有如下的特點1)采用STL標準模板庫作為基本數(shù)據(jù)結構,拼棄傳統(tǒng)固定大小數(shù)組結構,講求高效率、高精度原則;2)由于采用了 Boost庫的成熟數(shù)據(jù)結構和高效率的算法步驟,大大減少了計算的時間復雜度和空間復雜度,本發(fā)明可以適用于上百節(jié)點大規(guī)模網(wǎng)絡的K短路由計算;3)本發(fā)明的方法是從計算機應用角度考慮,而非一般意義上的單純算法概念,因此使網(wǎng)絡多重路由問題的搜尋方法更加接近實用化,大大減輕實際設計或開發(fā)算法的工作量。


圖1為K則最短路徑計算機搜索方法的流程圖。圖2為支持分離方式的K則最短路徑計算方法的流程圖。圖3為從給定最短路徑基礎上發(fā)展偏離路徑的流程圖。
具體實施例方式為了使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結合附圖及實例對本發(fā)明作進一步詳細描述。假設所求K短路徑問題是計算從s點到t點的路徑跳數(shù)從小到大排序的前K短路徑,要求所求最短路徑不作分離限定。參考圖1,為本發(fā)明所述K則最短路由計算機算法流程,結合上面的具體問題分析得如下所述具體步驟步驟1 定義所求前K短路徑集為Kpaths。步驟2 調(diào)用Boost Graph庫的BFS函數(shù)計算s — t的最短路徑;步驟3 由于所求最短路徑不作分離限定,直接進入步驟4 步驟4 定義d叉堆數(shù)據(jù)結構Q,將所求最短路徑放入堆Q ;步驟5 記最短路徑第一個頂點為其偏離點,記錄該路徑每個頂點的偏離邊集為其出邊;
步驟6 令 k = 1 ;步驟7 判斷如果k < K并且堆Q非空則進入步驟8,否則算法結束;步驟8 彈出堆Q對應的最短路徑p,即為所求的第k短路徑,存入路徑集Kpaths ;步驟9 根據(jù)所求第k短路徑p,從其偏離點到最后一個頂點作遍歷,依次發(fā)展新偏離點及偏離路徑、更新頂點偏離邊集,將所求偏離路徑存入堆Q ;步驟10 :k++,返回步驟7 ;根據(jù)上面的流程,算法結束后,路徑集Kpaths所存即為以路由路徑跳數(shù)排序的前 K短路徑。如上所述步驟9中,以當前第k短路徑ρ為基礎發(fā)展新偏離路徑是一個復雜過程, 下面以前面實例為基礎作詳細描述。參考圖3,為本發(fā)明所述從給定最短路徑基礎上發(fā)展偏離路徑的算法流程,假定已經(jīng)執(zhí)行到步驟9,并且已求得第k短路徑p,下面為從該路徑ρ上發(fā)展偏離路徑的算法流程, 算法步驟號從1開始重新編號,求其詳細步驟如下步驟9-1 令i =路徑ρ偏離點索引;步驟9-2 判斷如果i < p. size ()則進入步驟3,否則算法結束;步驟9-3 記錄i對應偏離點為dev,記錄路徑ρ中第一個節(jié)點到第i節(jié)點集合為 colors,記錄節(jié)點dev對應偏離邊集合為edges ;步驟9-4 調(diào)用BFS算法計算以節(jié)點dev為始的最短路徑Pt,需忽略節(jié)點集colors 和邊集edges ;步驟9-5 根據(jù)Pt與colors合成新路徑_p,計算_p的偏離點、偏離邊集并作記錄;步驟9-6 將新路徑_p存入d叉堆Q,i++,返回第2步。如上所述,每次在步驟5中獲得新偏離路徑_p,步驟6中存入堆Q,當本次算法結束后,Q中已經(jīng)添加了以路徑P為基礎發(fā)展出來的待選路徑集,這時進入前面K短路徑算法步驟10循環(huán)執(zhí)行即可求s點到t點的所有K短路徑。以上的搜索從s點到t點不分離的、以路徑跳數(shù)排序的前K短路徑問題中,步驟2、 步驟9-4采用本發(fā)明所述K短路徑搜索系統(tǒng)(以下簡稱搜索系統(tǒng))中的“最短路徑計算單元”計算所得;步驟4、步驟8、步驟9中對待選k短路徑操作采用本搜索系統(tǒng)中的“K短路徑篩選單元”計算所得;步驟9中的偏離路徑采用本搜索系統(tǒng)的“偏離路徑計算單元”計算所得;步驟9-3、步驟9-5采用“偏離邊存儲模塊”讀取或記錄新路徑_p的偏離點與偏離邊集;步驟9-5采用“偏離邊合成模塊”計算得新待選k短路徑_p。以上對本發(fā)明的實施步驟結合一個需求實例進行了詳細說明,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想,實際可有不同于該實施例的步驟參數(shù);同時,本發(fā)明所述的調(diào)用算法名稱及一些特定數(shù)據(jù)結構名稱均出自于Boost Graph庫,如果需要詳細了解本算法思想,必須首先了解Graph圖庫中相關算法及其所用的基本數(shù)據(jù)結構。需要聲明的是,本發(fā)明內(nèi)容及具體實施方式
意在證明本發(fā)明所提供技術方案的實際應用,不應解釋為對本發(fā)明保護范圍的限定。本領域技術人員在本發(fā)明的精神和原理啟發(fā)下,可作各種修改、等同替換、或改進。但這些變更或修改均在申請待批的保護范圍內(nèi)。
權利要求
1.一種基于Boost庫的K則最短路徑搜索方法,所述方法采用偏離邊算法搜尋多重路由,其特征在于,包括以下步驟(1).調(diào)用Boost庫函數(shù)計算源宿節(jié)點間最短路徑,定義變量k,令k=1 ;(2).判斷最短路徑分離方式,如果要求路徑分離,則調(diào)用支持分離的K短路徑算法,否則進入步驟3 ;(3).定義d叉堆數(shù)據(jù)結構Q,將所求最短路徑放入堆Q;(4).從堆Q中彈取出第k短路徑,記為p,采用偏離邊方法從ρ發(fā)展新的偏離路徑,存入堆Q。
2.根據(jù)權利要求1所述的搜索方法,其特征在于,所述步驟2中K是指所搜索的源宿節(jié)點間的指定的最短路徑個數(shù)。
3.根據(jù)權利要求1所述的搜索方法,其特征在于,所述步驟4是一個循環(huán)過程,循環(huán)變量為k,每次循環(huán)后k++ ;在步驟4之前需要作條件判斷,如果k < K且堆Q不空,則進入循環(huán),否則算法結束。
4.根據(jù)權利要求1所述的搜索方法,其特征在于,所述步驟2中計算支持路徑分離的K 則最短路徑的方法包括以下步驟(2-1).采用排除列表存儲前k短路徑節(jié)點或邊;(2-2).采用Boost庫函數(shù)并且忽略排除列表中的節(jié)點或邊計算第k+Ι短路徑,存入所求K短路徑集。
5.根據(jù)權利要求1所述的搜索方法,其特征在于,所述步驟4中以路徑ρ為基礎,發(fā)展偏離路徑,其方法包括如下步驟(4-1).記錄路徑ρ偏離點為dev,記錄ρ中dev前一段節(jié)點集合為colors,記錄dev對應的偏離邊集合為edges ;(4-2).計算以節(jié)點dev為始的最短路徑Pt,忽略節(jié)點集color、邊集edges ;(4-3).根據(jù)Pt與路徑ρ中dev前一段路徑節(jié)點合成新路徑_P,計算_P偏離點、偏離邊集并作記錄;(4-4).新路徑_p存入d叉堆Q。
6.根據(jù)權利要求4所述的搜索方法,其特征在于該方法為一個循環(huán)過程,循環(huán)變量為 k,每次循環(huán)后k++ ;在步驟2-1之前需要作條件判斷,如果k < K并且第k短路徑非空,則進入循環(huán),否則算法結束。
7.根據(jù)權利要求5所述的搜索方法,其特征在于該方法為一個循環(huán)過程,第一次循環(huán)中dev為路徑ρ偏離點,以后依次為從P中該點后一個節(jié)點直到最末一個節(jié)點作循環(huán)。
8.一種基于Boost庫的K則最短路徑搜索系統(tǒng),其特征在于,所述系統(tǒng)包括最短路徑計算單元,調(diào)用Boost庫函數(shù)計算含有限定條件的源宿節(jié)點間最短路徑;分離路徑計算單元,判斷短路徑分離方式,如果要求路徑分離,則調(diào)用支持分離的K短路徑算法;K短路徑篩選單元,設置d叉堆數(shù)據(jù)結構Q,將所求k短路徑存入堆Q,并且自動篩選出第k短路徑;偏離路徑計算單元,根據(jù)從堆Q中彈取出的第k短路徑p,采用偏離邊方法從ρ發(fā)展新的偏離短路徑集,存入堆Q。
9.根據(jù)權利要求8所述的搜索系統(tǒng),其特征在于,所述分離路徑計算單元,包括 排除列表存儲模塊,存儲前k短路徑節(jié)點集和邊集;分離路徑計算模塊,采用Boost庫函數(shù)并且忽略排除列表中的節(jié)點集或邊集計算第 k+Ι短路徑,存入所求K短路徑集。
10.根據(jù)權利要求8所述的搜索系統(tǒng),其特征在于,所述偏離路徑計算單元,包括 偏離邊存儲模塊,依次記錄前k短路徑的偏離點與偏離邊集;偏離路徑發(fā)展模塊,以第k短路徑ρ為基礎,發(fā)展其對應的偏離路徑集,并且存入d叉堆Q;偏離路徑合成模塊,將路徑P偏離點前一段路徑與以偏離點為始的最短路徑合成新路徑_P,計算_P偏離點、偏離邊集并存儲。
全文摘要
本發(fā)明提供了一種基于Boost圖庫的K則最短路徑搜索方法和系統(tǒng),所述方法在成熟的C++Boost Graph圖庫基礎之上擴展K則最短路徑算法;采用d叉堆數(shù)據(jù)結構最優(yōu)化排序待選最短路徑;采用偏離邊的方式發(fā)展多重最短路由。該方法是從計算機應用角度考慮,在一定程度上解決K則最短路徑問題的實用化難題,大大減輕實際設計或開發(fā)算法的工作量。該系統(tǒng)是基于該方法的一套軟硬件系統(tǒng),其已經(jīng)集成了該方法的所有發(fā)明內(nèi)容并且可以直接搜索計算前K短路徑。
文檔編號H04L12/56GK102523155SQ20111040647
公開日2012年6月27日 申請日期2011年12月8日 優(yōu)先權日2011年12月8日
發(fā)明者盧利鋒, 周靜 申請人:中國電力科學研究院
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
方城县| 玛曲县| 文水县| 萨嘎县| 河南省| 济南市| 新民市| 常熟市| 麻栗坡县| 涡阳县| 常熟市| 莆田市| 安义县| 南投县| 惠来县| 五大连池市| 漳浦县| 大邑县| 乐安县| 丁青县| 泽库县| 厦门市| 嵩明县| 屏东县| 高淳县| 霍州市| 白山市| 文水县| 福鼎市| 昌乐县| 河北省| 贵州省| 东海县| 东明县| 左贡县| 曲水县| 望城县| 鄯善县| 杭锦旗| 当雄县| 凌云县|