一種有向圖的最小割獲取方法及設(shè)備的制作方法
【專(zhuān)利摘要】本發(fā)明實(shí)施例提供了一種有向圖的最小割獲取方法和設(shè)備,通過(guò)具有依次包含關(guān)系的子圖的形式對(duì)結(jié)點(diǎn)集合進(jìn)行有向圖最小割獲取的方法和設(shè)備,減少了并行計(jì)算時(shí)的活躍結(jié)點(diǎn)間的通信次數(shù)和同步次數(shù),提高了性能,其中該方法包括:按照預(yù)設(shè)策略,分別將有向圖劃分成至少兩個(gè)匯點(diǎn)子圖和至少兩個(gè)源點(diǎn)子圖;并行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間的通信獲得有向圖的等效匯點(diǎn),以及并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間的通信獲得有向圖的等效源點(diǎn);根據(jù)有向圖的等效匯點(diǎn)和有向圖的等效源點(diǎn)連接的所有邊獲取有向圖的最小割。
【專(zhuān)利說(shuō)明】一種有向圖的最小割獲取方法及設(shè)備
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)優(yōu)化領(lǐng)域,尤其涉及一種有向圖的最小割獲取方法及設(shè)備。
【背景技術(shù)】
[0002] 最大流最小割問(wèn)題是網(wǎng)絡(luò)優(yōu)化領(lǐng)域中的經(jīng)典問(wèn)題,可以廣泛的應(yīng)用在以網(wǎng)絡(luò)作為 表現(xiàn)形式的應(yīng)用背景中,目前針對(duì)該問(wèn)題所提出的方法都是基于網(wǎng)絡(luò)中的結(jié)點(diǎn)進(jìn)行并行計(jì) 算的,通過(guò)整體同步并行計(jì)算模型(Bulk Synchronous Parallel Computing Model,BSP模 型)并行處理活躍結(jié)點(diǎn),每個(gè)活躍結(jié)點(diǎn)均通過(guò)超步進(jìn)行計(jì)算,直至整個(gè)網(wǎng)絡(luò)中沒(méi)有活躍結(jié)點(diǎn) 時(shí),計(jì)算結(jié)束。
[0003] 發(fā)明人發(fā)現(xiàn)以上的方法有如下的問(wèn)題:在每個(gè)超步進(jìn)行計(jì)算的過(guò)程中,需要在活 躍結(jié)點(diǎn)間進(jìn)行大量的通信與同步,從而導(dǎo)致網(wǎng)絡(luò)的擁堵,性能極低。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明的實(shí)施例提供一種有向圖的最小割獲取方法及設(shè)備,減少了并行計(jì)算時(shí)的 活躍結(jié)點(diǎn)間的通信次數(shù)和同步次數(shù),提高了性能。
[0005] 為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0006] 第一方面,本發(fā)明實(shí)施例提供了一種有向圖的最小割獲取方法,包括:
[0007] 按照預(yù)設(shè)策略,分別將所述有向圖劃分成至少兩個(gè)匯點(diǎn)子圖和至少兩個(gè)源點(diǎn)子 圖,其中,全部所述匯點(diǎn)子圖均包含所述有向圖的匯點(diǎn),且全部所述匯點(diǎn)子圖之間為依次包 含關(guān)系;全部所述源點(diǎn)子圖均包含所述有向圖的源點(diǎn),且全部所述源點(diǎn)子圖之間為依次包 含關(guān)系;
[0008] 并行計(jì)算全部所述匯點(diǎn)子圖的最小割集并通過(guò)所述匯點(diǎn)子圖之間的通信獲得所 述有向圖的等效匯點(diǎn),以及并行計(jì)算全部所述源點(diǎn)子圖的最小割集并通過(guò)所述源點(diǎn)子圖之 間的通信獲得所述有向圖的等效源點(diǎn),其中,所述等效匯點(diǎn)為最大的所述匯點(diǎn)子圖的最小 割集,所述等效源點(diǎn)為最大的所述源點(diǎn)子圖的最小割集;
[0009] 根據(jù)所述有向圖的等效匯點(diǎn)和所述有向圖的等效源點(diǎn)連接的所有邊獲取所述有 向圖的最小割。
[0010] 在第一種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面,所述按照預(yù)設(shè)策略,分別將所述有向 圖劃分成至少兩個(gè)匯點(diǎn)子圖和至少兩個(gè)源點(diǎn)子圖,包括:
[0011] 將所述有向圖進(jìn)行反向變化得到反向圖,其中,所述反向變化包括,將所述有向圖 中的所有邊進(jìn)行反向,所述有向圖的所述源點(diǎn)變成所述反向圖的匯點(diǎn),所述有向圖的所述 匯點(diǎn)變成所述反向圖的源點(diǎn);
[0012] 分別從所述有向圖和所述反向圖的匯點(diǎn)出發(fā),按照所述預(yù)設(shè)策略,分別將所述有 向圖和所述反向圖劃分成至少兩個(gè)所述有向圖的匯點(diǎn)子圖以及至少兩個(gè)所述反向圖的匯 點(diǎn)子圖,并分別為每個(gè)所述有向圖的匯點(diǎn)子圖和所述反向圖的源點(diǎn)子圖建立副本,其中,所 述至少兩個(gè)所述反向圖的匯點(diǎn)子圖為所述至少兩個(gè)所述有向圖的源點(diǎn)子圖。
[0013] 在第二種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面或者第一種可能的實(shí)現(xiàn)方式,在所述 并行計(jì)算全部所述匯點(diǎn)子圖的最小割集并通過(guò)所述匯點(diǎn)子圖之間的通信獲得所述有向圖 的等效匯點(diǎn),以及并行計(jì)算全部所述源點(diǎn)子圖的最小割集并通過(guò)所述源點(diǎn)子圖之間的通信 獲得所述有向圖的等效源點(diǎn)之前,還包括:
[0014] 將所有所述有向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的所述有 向圖的匯點(diǎn)子圖稱(chēng)為所述有向圖的子匯點(diǎn)子圖,包含的所述有向圖的匯點(diǎn)子圖稱(chēng)為所述有 向圖的父匯點(diǎn)子圖,以及將所有所述反向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被 包含的所述反向圖的匯點(diǎn)子圖稱(chēng)為所述反向圖的子匯點(diǎn)子圖,包含的所述反向圖的匯點(diǎn)子 圖稱(chēng)為所述反向圖的父匯點(diǎn)子圖。
[0015] 在第三種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面、第一種可能的實(shí)現(xiàn)方式或者第二種 可能的實(shí)現(xiàn)方式中的任一項(xiàng),所述并行計(jì)算全部所述匯點(diǎn)子圖的最小割集并通過(guò)所述匯點(diǎn) 子圖之間的通信獲得所述有向圖的等效匯點(diǎn),包括:
[0016] 在全部所述有向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部所述有向圖的匯 點(diǎn)子圖的最小割;
[0017] 任一個(gè)所述有向圖子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最小割通知其父匯點(diǎn) 子圖;
[0018] 所述有向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除所述有向圖 子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0019] 計(jì)算完成,得到所述等效匯點(diǎn)。
[0020] 在第四種可能的實(shí)現(xiàn)方式中,結(jié)合第三種可能的實(shí)現(xiàn)方式,所述有向圖的父匯點(diǎn) 子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小 割中的結(jié)點(diǎn),包括:
[0021] 所述有向圖的父匯點(diǎn)子圖在接收到所述有向圖子匯點(diǎn)子圖發(fā)送的所述有向圖子 匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算,并在所述有向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié) 點(diǎn)集合,其中,一個(gè)結(jié)點(diǎn)集合為由所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去 除結(jié)點(diǎn)集合,另一個(gè)結(jié)點(diǎn)集合為在所述有向圖中所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小 割以外的第一非去除結(jié)點(diǎn)組成的非去除結(jié)點(diǎn)集合;
[0022] 遍歷所述待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與所述待去除結(jié)點(diǎn)集合中的結(jié)點(diǎn) 連接,則該所述結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0023] 計(jì)算所有所述第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的所述有向圖的父匯點(diǎn) 子圖,其中,所述溢出值為所述第二非去除結(jié)點(diǎn)的流進(jìn)量減去所述第二非去除結(jié)點(diǎn)的流出 量;
[0024] 在去除結(jié)點(diǎn)之后的所述有向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最小割。
[0025] 在第五種可能的實(shí)現(xiàn)方式中,結(jié)合第四種可能的實(shí)現(xiàn)方式,所述計(jì)算完成,包括;
[0026] 所述最大的所述有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0027] 或者,
[0028] 若所述有向圖的父匯點(diǎn)子圖只能夠去除所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最 小割中的一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
[0029] 在第六種可能的實(shí)現(xiàn)方式中,結(jié)合第一種或者第二種可能的實(shí)現(xiàn)方式,所述并行 計(jì)算全部所述源點(diǎn)子圖的最小割集并通過(guò)所述源點(diǎn)子圖之間的通信獲得所述有向圖的等 效源點(diǎn),包括:
[0030] 在全部所述反向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部所述反向圖的匯 點(diǎn)子圖的最小割;
[0031] 任一個(gè)所述反向圖的子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最小割通知其父匯 點(diǎn)子圖;
[0032] 所述反向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除所述反向圖 的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0033] 計(jì)算完成,得到所述反向圖的等效匯點(diǎn)。
[0034] 在第七種可能的實(shí)現(xiàn)方式中,結(jié)合第六種可能的實(shí)現(xiàn)方式,所述反向圖的父匯點(diǎn) 子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最 小割中的結(jié)點(diǎn),包括:
[0035] 所述反向圖的父匯點(diǎn)子圖在接收到所述反向圖的子匯點(diǎn)子圖發(fā)送的所述反向圖 的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算,并在所述反向圖的父匯點(diǎn)子圖上生成兩 個(gè)結(jié)點(diǎn)集合,其中,一個(gè)結(jié)點(diǎn)集合為由所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成 的待去除結(jié)點(diǎn)集合,另一個(gè)結(jié)點(diǎn)集合為在所述反向圖中所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所 在的最小割以外的第一非去除結(jié)點(diǎn)組成的非去除結(jié)點(diǎn)集合;
[0036] 遍歷所述待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與所述待去除結(jié)點(diǎn)集合中的結(jié)點(diǎn) 連接,則該所述結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0037] 計(jì)算所有所述第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的所述反向圖的父匯點(diǎn) 子圖,其中,所述溢出值為所述第二非去除結(jié)點(diǎn)的流進(jìn)量減去所述第二非去除結(jié)點(diǎn)的流出 量;
[0038] 在所述去除之后的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最小割。
[0039] 在第八種可能的實(shí)現(xiàn)方式中,結(jié)合第七種可能的實(shí)現(xiàn)方式,所述計(jì)算完成,包括;
[0040] 所述最大的所述反向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0041] 或者,
[0042] 若所述反向圖的父匯點(diǎn)子圖只能夠去除所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的 最小割中的一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
[0043] 第二方面,本發(fā)明實(shí)施例提供了一種有向圖的最小割獲取設(shè)備,其特征在于,包 括:
[0044] 第一子圖劃分單元,用于按照預(yù)設(shè)策略,將所述有向圖劃分至少兩個(gè)匯點(diǎn)子圖,其 中,全部所述匯點(diǎn)子圖均包括所訴有向圖的匯點(diǎn),且全部所述匯點(diǎn)子圖之間為依次包含關(guān) 系;
[0045] 第二子圖劃分單元,用于按照所述預(yù)設(shè)策略,將所述有向圖劃分成至少兩個(gè)源點(diǎn) 子圖,其中,全部所述源點(diǎn)子圖均包含所述有向圖的源點(diǎn),且全部所述源點(diǎn)子圖之間為依次 包含關(guān)系;
[0046] 第一計(jì)算單元,用于并行計(jì)算全部所述匯點(diǎn)子圖的最小割集并通過(guò)所述匯點(diǎn)子圖 之間的通信獲得所述有向圖的等效匯點(diǎn),其中,所述等效匯點(diǎn)為最大的所述匯點(diǎn)子圖的最 小割集;第二計(jì)算單元,用于并行計(jì)算全部所述源點(diǎn)子圖的最小割集并通過(guò)所述源點(diǎn)子圖 之間的通信獲得所述有向圖的等效源點(diǎn),其中,所述等效源點(diǎn)為最大的所述源點(diǎn)子圖的最 小害Ij集;
[0047] 獲取單元,用于根據(jù)所述有向圖的等效匯點(diǎn)和所述有向圖的等效源點(diǎn)連接的所有 邊獲取所述有向圖的最小割。
[0048] 在第一種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面,
[0049] 所述第一子圖劃分單元,進(jìn)一步用于從所述有向圖的匯點(diǎn)出發(fā),按照所述預(yù)設(shè)策 略,將所述有向圖劃分成至少兩個(gè)所述有向圖的匯點(diǎn)子圖,并分別為每個(gè)所述有向圖的匯 點(diǎn)子圖建立副本;
[0050] 所述第二子圖劃分單元,包括:
[0051] 反向子單元,用于將所述有向圖進(jìn)行反向變化得到反向圖,其中,所述反向變化包 括,將所述有向圖中的所有邊進(jìn)行反向,所述有向圖的所述源點(diǎn)變成所述反向圖的匯點(diǎn),所 述有向圖的所述匯點(diǎn)變成所述反向圖的源點(diǎn);
[0052] 反向子圖劃分子單元,用于從所述反向圖的匯點(diǎn)出發(fā),按照所述預(yù)設(shè)策略,將所述 反向圖劃分成至少兩個(gè)所述反向圖的匯點(diǎn)子圖,并分別為每個(gè)所述反向圖的源點(diǎn)子圖建立 副本,其中,所述至少兩個(gè)所述反向圖的匯點(diǎn)子圖為所述至少兩個(gè)所述有向圖的源點(diǎn)子圖。
[0053] 在第二種可能的實(shí)現(xiàn)方式中,結(jié)合第二方面或者第一種可能的實(shí)現(xiàn)方式,還包括, 建立關(guān)系單元,用于將所有所述有向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含 的所述有向圖的匯點(diǎn)子圖稱(chēng)為所述有向圖的子匯點(diǎn)子圖,包含的所述有向圖的匯點(diǎn)子圖稱(chēng) 為所述有向圖的父匯點(diǎn)子圖,以及將所有所述反向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系 樹(shù),其中,被包含的所述反向圖的匯點(diǎn)子圖稱(chēng)為所述反向圖的子匯點(diǎn)子圖,包含的所述反向 圖的匯點(diǎn)子圖稱(chēng)為所述反向圖的子匯點(diǎn)子圖。
[0054] 在第三種可能的實(shí)現(xiàn)方式中,結(jié)合第一方面、第一種可能的實(shí)現(xiàn)方式或者第二種 可能的實(shí)現(xiàn)方式中的任一項(xiàng),所述第一計(jì)算單元包括:
[0055] 第一計(jì)算子單元,用于在全部所述有向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算 全部所述有向圖的匯點(diǎn)子圖的最小割;
[0056] 第一通知子單元,用于任一個(gè)所述有向圖子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在 的最小割通知其父匯點(diǎn)子圖;
[0057] 第一合并子單元,用于所述有向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最 小割,去除所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0058] 第一計(jì)算完成子單元,用于得到所述等效匯點(diǎn)。
[0059] 在第四種可能的實(shí)現(xiàn)方式中,結(jié)合第三種可能的實(shí)現(xiàn)方式,所述第一合并子單元, 包括:
[0060] 第一計(jì)算停止模塊,用于所述有向圖的父匯點(diǎn)子圖在接收到所述有向圖子匯點(diǎn)子 圖發(fā)送的所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算;
[0061] 第一生成模塊,用于在所述有向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集合,其中,一個(gè) 結(jié)點(diǎn)集合為由所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn)集合,另一個(gè) 結(jié)點(diǎn)集合為在所述有向圖中所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一非去 除結(jié)點(diǎn)組成的非去除結(jié)點(diǎn)集合;
[0062] 第一結(jié)點(diǎn)去除模塊,用于遍歷所述待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與所述 待去除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,則該所述結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0063] 第一溢出值計(jì)算模塊,用于計(jì)算所有所述第二非去除結(jié)點(diǎn)的溢出值,得到去除之 后的所述有向圖的父匯點(diǎn)子圖,其中,所述溢出值為所述第二非去除結(jié)點(diǎn)的流進(jìn)量減去所 述第二非去除結(jié)點(diǎn)的流出量;
[0064] 第一計(jì)算恢復(fù)模塊,用于在去除結(jié)點(diǎn)之后的所述有向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算 其最小割。
[0065] 在第五種可能的實(shí)現(xiàn)方式中,結(jié)合第四種可能的實(shí)現(xiàn)方式,所述第一計(jì)算完成子 單元,進(jìn)一步用于:
[0066] 所述最大的所述有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0067]或者,
[0068] 若所述有向圖的父匯點(diǎn)子圖只能夠去除所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最 小割中的一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
[0069] 在第六種可能的實(shí)現(xiàn)方式中,結(jié)合第一種或者第二種可能的實(shí)現(xiàn)方式,所述第二 計(jì)算單元包括:
[0070] 第二計(jì)算子單元,用于在全部所述反向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算 全部所述反向圖的匯點(diǎn)子圖的最小割;
[0071] 第二通知子單元,用于任一個(gè)所述反向圖的子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所 在的最小割通知其父匯點(diǎn)子圖;
[0072] 第二合并子單元,用于所述反向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最 小割,去除所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0073] 第二計(jì)算完成子單元,用于得到所述反向圖的等效匯點(diǎn)。
[0074] 在第七種可能的實(shí)現(xiàn)方式中,結(jié)合第六種可能的實(shí)現(xiàn)方式,所述合并子單元,包 括:
[0075] 第二計(jì)算停止模塊,用于所述反向圖的父匯點(diǎn)子圖在接收到所述反向圖的子匯點(diǎn) 子圖發(fā)送的所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算;
[0076] 第二生成模塊,用于在所述反向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集合,其中,一個(gè) 結(jié)點(diǎn)集合為由所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn)集合,另一 個(gè)結(jié)點(diǎn)集合為在所述反向圖中所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一 非去除結(jié)點(diǎn)組成的非去除結(jié)點(diǎn)集合;
[0077] 第二結(jié)點(diǎn)去除模塊,用于遍歷所述待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與所述 待去除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,則該所述結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0078] 第二溢出值計(jì)算模塊,用于計(jì)算所有所述第二非去除結(jié)點(diǎn)的溢出值,得到去除之 后的所述反向圖的父匯點(diǎn)子圖,其中,所述溢出值為所述第二非去除結(jié)點(diǎn)的流進(jìn)量減去所 述第二非去除結(jié)點(diǎn)的流出量;
[0079] 第二計(jì)算恢復(fù)模塊,用于在去除結(jié)點(diǎn)之后的所述反向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算 其最小割。
[0080] 在第八種可能的實(shí)現(xiàn)方式中,結(jié)合第七種可能的實(shí)現(xiàn)方式,所述第二計(jì)算完成子 單元,進(jìn)一步用于:
[0081] 所述最大的所述反向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0082] 或者,
[0083] 若所述反向圖的父匯點(diǎn)子圖只能夠去除所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的 最小割中的一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
[0084] 本發(fā)明實(shí)施例通過(guò)具有依次包含關(guān)系的子圖的形式對(duì)結(jié)點(diǎn)集合進(jìn)行有向圖最小 割獲取的方法和設(shè)備,減少了并行計(jì)算時(shí)的活躍結(jié)點(diǎn)間的通信次數(shù)和同步次數(shù),提高了性 能。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0085] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0086] 圖1為本發(fā)明實(shí)施例提供的一種有向圖的最小割獲取方法的流程示意圖;
[0087] 圖2為本發(fā)明本實(shí)施例提供的一種有向圖的最小割獲取方法的詳細(xì)流程示意圖;
[0088] 圖3為本發(fā)明實(shí)施例提供的一種有向圖;
[0089] 圖4為有向圖的反向圖;
[0090] 圖5為有向圖的匯點(diǎn)子圖副本;
[0091] 圖6為等效匯點(diǎn)與等效源點(diǎn)的示意圖;
[0092] 圖7為本發(fā)明實(shí)施例提供的一種有向圖的最小割獲取設(shè)備的裝置示意圖;
[0093] 圖8為本發(fā)明實(shí)施例提供的另一種有向圖的最小割獲取設(shè)備的裝置示意圖;
[0094] 圖9為本發(fā)明實(shí)施例提供的一種有向圖的最小割獲取設(shè)備的硬件結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0095] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于 本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0096] 參見(jiàn)圖1,為本實(shí)施例提供的一種有向圖的最小割獲取方法的流程示意圖,包括:
[0097] SlOl :按照預(yù)設(shè)策略,分別將有向圖劃分成至少兩個(gè)匯點(diǎn)子圖和至少兩個(gè)源點(diǎn)子 圖;
[0098] 示例性的,全部匯點(diǎn)子圖均包含有向圖的匯點(diǎn),且全部匯點(diǎn)子圖之間為依次包含 關(guān)系;全部源點(diǎn)子圖均包含有向圖的源點(diǎn),且全部源點(diǎn)子圖之間為依次包含關(guān)系;
[0099] 示例性的,按照預(yù)設(shè)策略,分別將有向圖劃分成至少兩個(gè)匯點(diǎn)子圖和至少兩個(gè)源 點(diǎn)子圖,包括:
[0100] 將有向圖進(jìn)行反向變化得到反向圖,其中,反向變化包括,將有向圖中的所有邊進(jìn) 行反向,有向圖的源點(diǎn)變成反向圖的匯點(diǎn),有向圖的匯點(diǎn)變成反向圖的源點(diǎn);
[0101] 分別從有向圖和反向圖的匯點(diǎn)出發(fā),按照預(yù)設(shè)策略,分別將有向圖和反向圖劃分 成至少兩個(gè)有向圖的匯點(diǎn)子圖以及至少兩個(gè)反向圖的匯點(diǎn)子圖,并分別為每個(gè)有向圖的匯 點(diǎn)子圖和反向圖的源點(diǎn)子圖建立副本,其中,至少兩個(gè)反向圖的匯點(diǎn)子圖為至少兩個(gè)有向 圖的源點(diǎn)子圖。
[0102] S102:并行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間的通信獲得有向圖 的等效匯點(diǎn),以及并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間的通信獲得有向 圖的等效源點(diǎn);
[0103] 示例性的,等效匯點(diǎn)為最大的匯點(diǎn)子圖的最小割集,等效源點(diǎn)為最大的源點(diǎn)子圖 的最小割集;
[0104] 示例性的,在并行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間的通信獲得 有向圖的等效匯點(diǎn),以及并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間的通信獲 得有向圖的等效源點(diǎn)之前,還包括:
[0105] 將所有有向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的有向圖的匯 點(diǎn)子圖稱(chēng)為有向圖的子匯點(diǎn)子圖,包含的有向圖的匯點(diǎn)子圖稱(chēng)為有向圖的父匯點(diǎn)子圖,以 及將所有反向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的反向圖的匯點(diǎn)子圖 稱(chēng)為反向圖的子匯點(diǎn)子圖,包含的反向圖的匯點(diǎn)子圖稱(chēng)為反向圖的父匯點(diǎn)子圖。
[0106] 示例性的,并行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間的通信獲得有 向圖的等效匯點(diǎn),包括:
[0107] 在全部有向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部有向圖的匯點(diǎn)子圖的 最小割;
[0108] 任一個(gè)有向圖子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最小割通知其父匯點(diǎn)子 圖;
[0109] 有向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除有向圖子匯點(diǎn)子 圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0110] 進(jìn)一步的,有向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除有向 圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn),包括:
[0111] 有向圖的父匯點(diǎn)子圖在接收到有向圖子匯點(diǎn)子圖發(fā)送的有向圖子匯點(diǎn)子圖的匯 點(diǎn)所在的最小割后,停止計(jì)算,并在有向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集合,其中,一個(gè) 結(jié)點(diǎn)集合為由有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn)集合,另一個(gè)結(jié)點(diǎn) 集合為在有向圖中有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一非去除結(jié)點(diǎn)組成的 非去除結(jié)點(diǎn)集合;
[0112] 遍歷待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與待去除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,則 該結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0113] 計(jì)算所有第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的有向圖的父匯點(diǎn)子圖,其中, 溢出值為第二非去除結(jié)點(diǎn)的流進(jìn)量減去第二非去除結(jié)點(diǎn)的流出量;
[0114] 在去除結(jié)點(diǎn)之后的有向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最小割。
[0115] 計(jì)算完成,得到等效匯點(diǎn);
[0116] 進(jìn)一步的,計(jì)算完成,包括;
[0117] 最大的有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0118] 或者,
[0119] 若有向圖的父匯點(diǎn)子圖只能夠去除有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的 一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
[0120] 示例性的,并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間的通信獲得有 向圖的等效源點(diǎn),包括:
[0121] 在全部反向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部反向圖的匯點(diǎn)子圖的 最小割;
[0122] 任一個(gè)反向圖子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最小割通知其父匯點(diǎn)子 圖;
[0123] 反向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除反向圖子匯點(diǎn)子 圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0124] 進(jìn)一步的,反向圖的父匯點(diǎn)子圖合并反向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去 除反向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn),包括:
[0125] 反向圖的父匯點(diǎn)子圖在接收到反向圖子匯點(diǎn)子圖發(fā)送的反向圖子匯點(diǎn)子圖的匯 點(diǎn)所在的最小割后,停止計(jì)算,并在反向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集合,其中,一個(gè) 結(jié)點(diǎn)集合為由反向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn)集合,另一個(gè)結(jié)點(diǎn) 集合為在反向圖中反向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一非去除結(jié)點(diǎn)組成的 非去除結(jié)點(diǎn)集合;
[0126] 遍歷待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與待去除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,則 該結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0127] 計(jì)算所有第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的反向圖的父匯點(diǎn)子圖,其中, 溢出值為第二非去除結(jié)點(diǎn)的流進(jìn)量減去第二非去除結(jié)點(diǎn)的流出量;
[0128] 在去除之后的反向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最小割。
[0129] 計(jì)算完成,得到等效匯點(diǎn),也就是有向圖的等效源點(diǎn);
[0130] 進(jìn)一步的,計(jì)算完成,包括;
[0131] 最大的反向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0132] 或者,
[0133] 若反向圖的父匯點(diǎn)子圖只能夠去除反向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的 一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
[0134] S103 :根據(jù)有向圖的等效匯點(diǎn)和有向圖的等效源點(diǎn)連接的所有邊獲取有向圖的最 小割;
[0135] 本實(shí)施例提供了一種有向圖的最小割獲取方法,通過(guò)具有依次包含關(guān)系的子圖的 形式對(duì)結(jié)點(diǎn)集合進(jìn)行有向圖最小割獲取的方法和設(shè)備,減少了并行計(jì)算時(shí)的活躍結(jié)點(diǎn)間的 通信次數(shù)和同步次數(shù),提高了性能。
[0136] 參見(jiàn)圖2,為本發(fā)明本實(shí)施例提供的一種有向圖的最小割獲取方法的詳細(xì)流程示 意圖,在本實(shí)施例中,僅通過(guò)如圖3所示的有向圖進(jìn)行示例性說(shuō)明,其中,圓圈內(nèi)的數(shù)字表 示結(jié)點(diǎn)序號(hào),有向邊上的數(shù)字表示該有向邊上的流量,從圖3中我們?nèi)菀装l(fā)現(xiàn),結(jié)點(diǎn)0為源 點(diǎn),結(jié)點(diǎn)10為匯點(diǎn),在此基礎(chǔ)上,圖3所示的有向圖的最小割獲取方法包括:
[0137] 201 :按照預(yù)設(shè)策略,分別將有向圖劃分成至少兩個(gè)匯點(diǎn)子圖和至少兩個(gè)源點(diǎn)子 圖,其中,全部匯點(diǎn)子圖均包含有向圖的匯點(diǎn),且全部匯點(diǎn)子圖之間為依次包含關(guān)系;全部 源點(diǎn)子圖均包含有向圖的源點(diǎn),且全部源點(diǎn)子圖之間為依次包含關(guān)系;
[0138] 示例性的,該步驟可以分為:
[0139] 首先,將有向圖進(jìn)行反向變化得到反向圖,其中,反向變化包括,將有向圖中的所 有邊進(jìn)行反向,有向圖的源點(diǎn)變成反向圖的匯點(diǎn),有向圖的匯點(diǎn)變成反向圖的源點(diǎn),在本實(shí) 施例中,可以將如圖3所示的有向圖進(jìn)行反向變化如圖4所示的反向圖,可以得到,結(jié)點(diǎn)10 為反向圖的源點(diǎn),結(jié)點(diǎn)〇為反向圖的匯點(diǎn),本領(lǐng)域技術(shù)人員可以理解,反向圖與有向圖為對(duì) 偶關(guān)系;
[0140] 然后,分別從有向圖和反向圖的匯點(diǎn)出發(fā),按照預(yù)設(shè)策略,分別將有向圖和反向圖 劃分成至少兩個(gè)有向圖的匯點(diǎn)子圖以及至少兩個(gè)反向圖的匯點(diǎn)子圖,并分別為每個(gè)有向圖 的匯點(diǎn)子圖和反向圖的源點(diǎn)子圖建立副本,其中,至少兩個(gè)反向圖的匯點(diǎn)子圖為至少兩個(gè) 有向圖的源點(diǎn)子圖;
[0141] 在本實(shí)施例中,分別從圖3和圖4的匯點(diǎn)出發(fā),劃分有向圖和反向圖的匯點(diǎn)子圖;
[0142] 對(duì)于圖3,如圖中點(diǎn)虛線表示,從作為匯點(diǎn)的結(jié)點(diǎn)10出發(fā),通過(guò)反向?qū)挾葍?yōu)先搜索 方法選取3個(gè)結(jié)點(diǎn)組成匯點(diǎn)子圖1,并且將圖3中除去匯點(diǎn)子圖1的部分看成一個(gè)整體S #, 并建立副本,可以得到如圖5 (A)所示的匯點(diǎn)子圖1的副本;
[0143] 接著從匯點(diǎn)子圖1出發(fā),如圖3中點(diǎn)劃線表示,繼續(xù)通過(guò)反向?qū)挾葍?yōu)先搜索方法選 取4個(gè)結(jié)點(diǎn)組成匯點(diǎn)子圖2,并且將圖3中除去匯點(diǎn)子圖2的部分看成一個(gè)整體S ##,并建立 副本,可以得到如圖5 (B)所示的匯點(diǎn)子圖2的副本;
[0144] 然后從匯點(diǎn)子圖2出發(fā),繼續(xù)通過(guò)反向?qū)挾葍?yōu)先搜索的方法選取4個(gè)結(jié)點(diǎn)組成匯 點(diǎn)子圖3,如圖5(C),此時(shí),匯點(diǎn)子圖3即為如圖3所示的有向圖,此時(shí)劃分結(jié)束,建立匯點(diǎn) 子圖3的副本。
[0145] 本領(lǐng)域人員可以很容易的了解到,上述三個(gè)匯點(diǎn)子圖之間的關(guān)系為:匯點(diǎn)子圖3^ 匯點(diǎn)子圖匯點(diǎn)子圖1,其中,^符號(hào)表示包含關(guān)系,例如,匯點(diǎn)子圖匯點(diǎn)子圖2,表示 匯點(diǎn)子圖3包含匯點(diǎn)子圖2,即匯點(diǎn)子圖2為匯點(diǎn)子圖3的一部分;
[0146] 值得說(shuō)明的是,本實(shí)施例選取結(jié)點(diǎn)的數(shù)目由預(yù)設(shè)策略規(guī)定,具體數(shù)字不作任何限 定,僅為了對(duì)本實(shí)施例的詳細(xì)說(shuō)明。
[0147] 對(duì)于圖4,通過(guò)上述對(duì)于圖3相同的方法,也可以將如圖4所示的反向圖建立反 向圖的匯點(diǎn)子圖,相應(yīng)的,反向圖的匯點(diǎn)子圖之間也會(huì)是依次包含的關(guān)系,具體過(guò)程不再贅 述。
[0148] 202 :將所有有向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的有向圖 的匯點(diǎn)子圖稱(chēng)為有向圖的子匯點(diǎn)子圖,包含的有向圖的匯點(diǎn)子圖稱(chēng)為有向圖的父匯點(diǎn)子 圖,以及將所有反向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的反向圖的匯點(diǎn) 子圖稱(chēng)為反向圖的子匯點(diǎn)子圖,包含的反向圖的匯點(diǎn)子圖稱(chēng)為反向圖的父匯點(diǎn)子圖;
[0149] 示例性的,在本實(shí)施例中,根據(jù)上述的有向圖以及反向圖的匯點(diǎn)子圖之間的關(guān)系, 本領(lǐng)域人員可以很容易的得到:
[0150] 在有向圖的匯點(diǎn)子圖中,匯點(diǎn)子圖3為匯點(diǎn)子圖2的有向圖的父匯點(diǎn)子圖,相應(yīng) 的,匯點(diǎn)子圖2為匯點(diǎn)子圖3的有向圖的子匯點(diǎn)子圖;與此對(duì)應(yīng)的,匯點(diǎn)子圖2為匯點(diǎn)子圖 1的有向圖的父匯點(diǎn)子圖,相應(yīng)的,匯點(diǎn)子圖1為匯點(diǎn)子圖1的有向圖的子匯點(diǎn)子圖;
[0151] 反向圖的匯點(diǎn)子圖中,父子匯點(diǎn)子圖的關(guān)系如上述關(guān)系相同,不再贅述。
[0152] 值得注意的是,在子圖劃分完畢并且子圖之間的關(guān)系建立完畢之后,可以通過(guò)并 行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間的通信獲得有向圖的等效匯點(diǎn),以及 并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間的通信獲得有向圖的等效源點(diǎn),其 中,等效匯點(diǎn)為最大的匯點(diǎn)子圖的最小割集,等效源點(diǎn)為最大的源點(diǎn)子圖的最小割集;
[0153] 具體的,如前有向圖與反向圖之間的對(duì)偶關(guān)系,本領(lǐng)域人員可以很容易的了解,計(jì) 算有向圖的等效源點(diǎn)的方法也就是計(jì)算反向圖的等效匯點(diǎn)的方法,因此我們可以分別對(duì)有 向圖和反向圖的匯點(diǎn)子圖進(jìn)行并行計(jì)算,而且計(jì)算方法和計(jì)算流程均可以相同,本實(shí)施例 中,對(duì)有向圖以及反向圖的匯點(diǎn)子圖的計(jì)算方法和計(jì)算流程設(shè)定為相同,于是可以只需要 對(duì)有向圖的匯點(diǎn)子圖的計(jì)算方法和計(jì)算流程做出詳細(xì)的描述,本領(lǐng)域技術(shù)人員可以很容易 的將該過(guò)程應(yīng)用于對(duì)反向圖的匯點(diǎn)子圖的計(jì)算中。
[0154] 203:在全部有向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部有向圖的匯點(diǎn)子 圖的最小割;
[0155] 示例性的,在本實(shí)施例中,每個(gè)有向圖的匯點(diǎn)子圖均對(duì)應(yīng)一個(gè)計(jì)算線程,在其副本 上通過(guò)最大流算法計(jì)算每個(gè)匯點(diǎn)子圖的最小割,優(yōu)選的,最大流算法可以是最高標(biāo)號(hào)推進(jìn) 重標(biāo)記 Highest-label Push-relabel 算法。
[0156] 204:任一個(gè)有向圖子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最小割通知其父匯點(diǎn) 子圖;
[0157] 205 :有向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除有向圖子匯 點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0158] 示例性的,有向圖的父匯點(diǎn)子圖在接收到有向圖子匯點(diǎn)子圖發(fā)送的有向圖子匯點(diǎn) 子圖的匯點(diǎn)所在的最小割后,停止計(jì)算,并在有向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集合,其 中,一個(gè)結(jié)點(diǎn)集合為由有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn)集合,另 一個(gè)結(jié)點(diǎn)集合為在有向圖中有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一非去除結(jié) 點(diǎn)組成的非去除結(jié)點(diǎn)集合;
[0159] 遍歷待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與待去除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,則 該結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0160] 計(jì)算所有第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的有向圖的父匯點(diǎn)子圖,其中, 溢出值為第二非去除結(jié)點(diǎn)的流進(jìn)量減去第二非去除結(jié)點(diǎn)的流出量;
[0161] 在去除結(jié)點(diǎn)之后的有向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最小割。
[0162] 具體的在本實(shí)施例中,以匯點(diǎn)子圖1為例,在如圖5 (A)所示的匯點(diǎn)子圖1的副本 上通過(guò)Highest-label Push-relabel算法,可以得到匯點(diǎn)子圖1的最小割為圖5 (A)的橢 圓圈所示,包括結(jié)點(diǎn)8和結(jié)點(diǎn)10,于是匯點(diǎn)子圖1將最小割通知給如圖5 (B)所示的匯點(diǎn)子 圖2,由于匯點(diǎn)子圖1比匯點(diǎn)子圖2要小,此時(shí)匯點(diǎn)子圖2仍在計(jì)算,匯點(diǎn)子圖2在接收到匯 點(diǎn)子圖1通知的最小割之后,停止計(jì)算,并在匯點(diǎn)子圖2中生成兩個(gè)結(jié)點(diǎn)集合,其中待去除 結(jié)點(diǎn)集合包括結(jié)點(diǎn)8,結(jié)點(diǎn)10,其余為非去除結(jié)點(diǎn)集合;
[0163] 遍歷匯點(diǎn)子圖2的待去除結(jié)點(diǎn)集合,可以知道,結(jié)點(diǎn)8,結(jié)點(diǎn)10均和非去除結(jié)點(diǎn)集 合中的結(jié)點(diǎn)連接,因此,結(jié)點(diǎn)8和結(jié)點(diǎn)10均為第二非去除結(jié)點(diǎn),隨后對(duì)匯點(diǎn)子圖3的第二非 去除結(jié)點(diǎn)進(jìn)行溢出值計(jì)算,因此,匯點(diǎn)子圖2沒(méi)有去除結(jié)點(diǎn),優(yōu)選的,對(duì)于第二非去除結(jié)點(diǎn), 我們可以將其整體看成一個(gè)匯點(diǎn)子圖2的等效匯點(diǎn),以使得減少后續(xù)匯點(diǎn)子圖2的最小割 計(jì)算的計(jì)算量;
[0164] 繼續(xù)計(jì)算匯點(diǎn)子圖2的最小割。
[0165] 進(jìn)一步的,匯點(diǎn)子圖2計(jì)算完畢時(shí),可以得到匯點(diǎn)子圖2的最小割為圖5 (B)的點(diǎn) 虛線圓圈所示,包括結(jié)點(diǎn)7,結(jié)點(diǎn)8和結(jié)點(diǎn)10,并且匯點(diǎn)子圖2的最小割通知匯點(diǎn)子圖3,由 于匯點(diǎn)子圖2比匯點(diǎn)子圖3要小,此時(shí)匯點(diǎn)子圖3仍在計(jì)算,匯點(diǎn)子圖3在接收到匯點(diǎn)子圖 2通知的最小割之后,停止計(jì)算,并在匯點(diǎn)子圖3中生成兩個(gè)結(jié)點(diǎn)集合,其中待去除結(jié)點(diǎn)集 合包括結(jié)點(diǎn)7,結(jié)點(diǎn)8,結(jié)點(diǎn)10,其余為非去除結(jié)點(diǎn)集合;
[0166] 遍歷匯點(diǎn)子圖3的待去除結(jié)點(diǎn)集合,可以知道,結(jié)點(diǎn)7,結(jié)點(diǎn)8,結(jié)點(diǎn)10均和非去除 結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,因此匯點(diǎn)子圖3的第二非去除結(jié)點(diǎn)為結(jié)點(diǎn)7,結(jié)點(diǎn)8和結(jié)點(diǎn)10,隨 后對(duì)匯點(diǎn)子圖3的第二非去除結(jié)點(diǎn)進(jìn)行溢出值計(jì)算,優(yōu)選的,將匯點(diǎn)子圖3的第二非去除結(jié) 點(diǎn)整體看成一個(gè)匯點(diǎn)子圖3的等效匯點(diǎn),以使得減少后續(xù)匯點(diǎn)子圖3的最小割計(jì)算的計(jì)算 量;
[0167] 繼續(xù)計(jì)算匯點(diǎn)子圖3的最小割。
[0168] 206 :計(jì)算完成,得到有向圖的等效匯點(diǎn)T* ;
[0169] 示例性的,計(jì)算完成,可以包括以下任意一種方式:
[0170] 最大的有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成,在本實(shí)施例中,當(dāng)匯點(diǎn)子圖3的 最小割計(jì)算完畢時(shí),等效匯點(diǎn)計(jì)算完成,可以得到等效匯點(diǎn)T* ;
[0171] 或者,
[0172] 若有向圖的父匯點(diǎn)子圖只能夠去除有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的 一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算;
[0173] 本實(shí)施例中,當(dāng)匯點(diǎn)子圖3只能夠去除匯點(diǎn)子圖2的最小割中的結(jié)點(diǎn)7時(shí),可以將 當(dāng)前進(jìn)行等效源點(diǎn)計(jì)算的結(jié)果進(jìn)行合并,如果此時(shí)僅由匯點(diǎn)子圖3的最小割計(jì)算結(jié)果與當(dāng) 前反向圖的最大匯點(diǎn)子圖的最小割計(jì)算結(jié)果就能夠表示為如圖3所示的有向圖,則計(jì)算完 成,得到等效匯點(diǎn)T*,在本實(shí)施例中,優(yōu)選為最大的有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完 成,在本實(shí)施例中,當(dāng)匯點(diǎn)子圖3的最小割計(jì)算完畢時(shí),等效匯點(diǎn)計(jì)算完成,可以得到等效 匯點(diǎn)T*。
[0174] 相應(yīng)的,對(duì)于如圖4所示的反向圖,本領(lǐng)域技術(shù)人員可以很容易的通過(guò)步驟 203-206的方式得到反向圖的等效匯點(diǎn),也就是有向圖的等效源點(diǎn)S*,在此不再贅述。
[0175] 207 :根據(jù)有向圖的等效匯點(diǎn)和有向圖的等效源點(diǎn)連接的所有邊獲取有向圖的最 小割;
[0176] 示例性的,本實(shí)施例中,最小割為如圖6所示的等效源點(diǎn)與等效匯點(diǎn)的連接的邊 的集合。
[0177] 本實(shí)施例提供了一種有向圖的最小割獲取方法,通過(guò)具有依次包含關(guān)系的子圖的 形式對(duì)結(jié)點(diǎn)集合進(jìn)行有向圖最小割獲取的方法和設(shè)備,減少了并行計(jì)算時(shí)的活躍結(jié)點(diǎn)間的 通信次數(shù)和同步次數(shù),提高了性能。
[0178] 參見(jiàn)圖7,為本發(fā)明實(shí)施例提供的一種有向圖的最小割獲取設(shè)備70的裝置示意 圖,在本實(shí)施例中,僅通過(guò)如圖3所示的有向圖進(jìn)行示例性說(shuō)明,其中,圓圈內(nèi)的數(shù)字表示 結(jié)點(diǎn)序號(hào),有向邊上的數(shù)字表示該有向邊上的流量,從圖3中我們?nèi)菀装l(fā)現(xiàn),結(jié)點(diǎn)0為源點(diǎn), 結(jié)點(diǎn)10為匯點(diǎn),設(shè)備70可以包括:
[0179] 第一子圖劃分單元701,用于按照預(yù)設(shè)策略,將有向圖劃分至少兩個(gè)匯點(diǎn)子圖,其 中,全部匯點(diǎn)子圖均包括所訴有向圖的匯點(diǎn),且全部匯點(diǎn)子圖之間為依次包含關(guān)系;
[0180] 第二子圖劃分單元702,用于按照預(yù)設(shè)策略,將有向圖劃分成至少兩個(gè)源點(diǎn)子圖, 其中,全部源點(diǎn)子圖均包含有向圖的源點(diǎn),且全部源點(diǎn)子圖之間為依次包含關(guān)系;
[0181] 第一計(jì)算單元703,用于并行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間 的通信獲得有向圖的等效匯點(diǎn),其中,等效匯點(diǎn)為最大的匯點(diǎn)子圖的最小割集;
[0182] 第二計(jì)算單元704,用于并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間 的通信獲得有向圖的等效源點(diǎn),其中,等效源點(diǎn)為最大的源點(diǎn)子圖的最小割集;
[0183] 獲取單元705,用于根據(jù)有向圖的等效匯點(diǎn)和有向圖的等效源點(diǎn)連接的所有邊獲 取有向圖的最小割。
[0184] 示例性的,如圖8所示,第一子圖劃分單元701,進(jìn)一步可以用于從有向圖的匯點(diǎn) 出發(fā),按照預(yù)設(shè)策略,將有向圖劃分成至少兩個(gè)有向圖的匯點(diǎn)子圖,并分別為每個(gè)有向圖的 匯點(diǎn)子圖建立副本;
[0185] 示例性的,如圖8所示,第二子圖劃分單元702,包括:
[0186] 反向子單元7021,用于將有向圖進(jìn)行反向變化得到反向圖,其中,反向變化包括, 將有向圖中的所有邊進(jìn)行反向,有向圖的源點(diǎn)變成反向圖的匯點(diǎn),有向圖的匯點(diǎn)變成反向 圖的源點(diǎn);
[0187] 示例性的,在本實(shí)施例中,反向子單元7021可以將如圖3所示的有向圖進(jìn)行反向 變化如圖4所示的反向圖,可以得到,結(jié)點(diǎn)10為反向圖的源點(diǎn),結(jié)點(diǎn)0為反向圖的匯點(diǎn),本 領(lǐng)域技術(shù)人員可以理解,反向圖與有向圖為對(duì)偶關(guān)系;
[0188] 反向子圖劃分子單兀7022,用于從反向圖的匯點(diǎn)出發(fā),按照預(yù)設(shè)策略,將反向圖劃 分成至少兩個(gè)反向圖的匯點(diǎn)子圖,并分別為每個(gè)反向圖的源點(diǎn)子圖建立副本,其中,至少兩 個(gè)反向圖的匯點(diǎn)子圖為至少兩個(gè)有向圖的源點(diǎn)子圖。
[0189] 示例性的,在本實(shí)施例中,第一子圖劃分單元701和反向子圖劃分子單元7022可 以分別從圖3和圖4的匯點(diǎn)出發(fā),劃分有向圖和反向圖的匯點(diǎn)子圖;
[0190] 具體的,對(duì)于圖3,如圖中點(diǎn)虛線表示,第一子圖劃分單元701首先從作為匯點(diǎn)的 結(jié)點(diǎn)10出發(fā),通過(guò)反向?qū)挾葍?yōu)先搜索方法選取3個(gè)結(jié)點(diǎn)組成匯點(diǎn)子圖1,并且將圖3中除 去匯點(diǎn)子圖1的部分看成一個(gè)整體S s,并建立副本,可以得到如圖5 (A)所示的匯點(diǎn)子圖1 的副本;
[0191] 接著從匯點(diǎn)子圖1出發(fā),如圖3中點(diǎn)劃線表示,繼續(xù)通過(guò)反向?qū)挾葍?yōu)先搜索方法選 取4個(gè)結(jié)點(diǎn)組成匯點(diǎn)子圖2,并且將圖3中除去匯點(diǎn)子圖2的部分看成一個(gè)整體S ##,并建立 副本,可以得到如圖5 (B)所示的匯點(diǎn)子圖2的副本;
[0192] 然后從匯點(diǎn)子圖2出發(fā),繼續(xù)通過(guò)反向?qū)挾葍?yōu)先搜索的方法選取4個(gè)結(jié)點(diǎn)組成匯 點(diǎn)子圖3,如圖5(C),此時(shí),匯點(diǎn)子圖3即為如圖3所示的有向圖,此時(shí)劃分結(jié)束,建立匯點(diǎn) 子圖3的副本。
[0193] 本領(lǐng)域人員可以很容易的了解到,上述三個(gè)匯點(diǎn)子圖之間的關(guān)系為依次包含關(guān) 系:匯點(diǎn)子圖匯點(diǎn)子圖2^匯點(diǎn)子圖1,其中,e符號(hào)表示包含關(guān)系,例如,匯點(diǎn)子圖 匯點(diǎn)子圖2,表示匯點(diǎn)子圖3包含匯點(diǎn)子圖2,即匯點(diǎn)子圖2為匯點(diǎn)子圖3的一部分;
[0194] 值得說(shuō)明的是,本實(shí)施例選取結(jié)點(diǎn)的數(shù)目由預(yù)設(shè)策略規(guī)定,具體數(shù)字不作任何限 定,僅為了對(duì)本實(shí)施例的詳細(xì)說(shuō)明。
[0195] 相應(yīng)的,對(duì)于圖4,反向子圖劃分子單兀7022可以通過(guò)與第一子圖劃分單兀701相 同的方式得到反向圖的匯點(diǎn)子圖,相應(yīng)的,反向圖的匯點(diǎn)子圖之間也是依次包含的關(guān)系,具 體過(guò)程不再贅述。
[0196] 示例性的,如圖8所示,設(shè)備70還可以包括:建立關(guān)系單元706,
[0197] 用于將所有有向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的有向圖 的匯點(diǎn)子圖稱(chēng)為有向圖的子匯點(diǎn)子圖,包含的有向圖的匯點(diǎn)子圖稱(chēng)為有向圖的父匯點(diǎn)子 圖,以及將所有反向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的反向圖的匯點(diǎn) 子圖稱(chēng)為反向圖的子匯點(diǎn)子圖,包含的反向圖的匯點(diǎn)子圖稱(chēng)為反向圖的父匯點(diǎn)子圖。
[0198] 示例性的,在本實(shí)施例中,建立關(guān)系單元706可以根據(jù)上述的有向圖以及反向圖 的匯點(diǎn)子圖之間的關(guān)系,可以很容易的得到:
[0199] 在有向圖的匯點(diǎn)子圖中,匯點(diǎn)子圖3為匯點(diǎn)子圖2的有向圖的父匯點(diǎn)子圖,相應(yīng) 的,匯點(diǎn)子圖2為匯點(diǎn)子圖3的有向圖的子匯點(diǎn)子圖;與此對(duì)應(yīng)的,匯點(diǎn)子圖2為匯點(diǎn)子圖 1的有向圖的父匯點(diǎn)子圖,相應(yīng)的,匯點(diǎn)子圖1為匯點(diǎn)子圖1的有向圖的子匯點(diǎn)子圖;
[0200] 反向圖的匯點(diǎn)子圖中,父子匯點(diǎn)子圖的關(guān)系如上述關(guān)系相同,不再贅述。
[0201] 值得注意的是,在子圖劃分完畢并且子圖之間的關(guān)系建立完畢之后,可以通過(guò)并 行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間的通信獲得有向圖的等效匯點(diǎn),以及 并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間的通信獲得有向圖的等效源點(diǎn),其 中,等效匯點(diǎn)為最大的匯點(diǎn)子圖的最小割集,等效源點(diǎn)為最大的源點(diǎn)子圖的最小割集;
[0202] 具體的,如前有向圖與反向圖之間的對(duì)偶關(guān)系,本領(lǐng)域人員可以很容易的了解,計(jì) 算有向圖的等效源點(diǎn)的方法也就是計(jì)算反向圖的等效匯點(diǎn)的方法,因此我們可以分別對(duì)有 向圖和反向圖的匯點(diǎn)子圖進(jìn)行并行計(jì)算,而且計(jì)算方法和計(jì)算流程均可以相同,本實(shí)施例 中,第一計(jì)算單元703對(duì)有向圖的匯點(diǎn)子圖的計(jì)算方法和計(jì)算流程與第二計(jì)算單元704對(duì) 反向圖的匯點(diǎn)子圖的計(jì)算方法和計(jì)算流程相同,本實(shí)施例只需要將第一計(jì)算單元703對(duì)有 向圖的匯點(diǎn)子圖的計(jì)算方法和計(jì)算流程做出詳細(xì)的描述,相應(yīng)的,第二計(jì)算單元704對(duì)反 向圖的匯點(diǎn)子圖的計(jì)算方法和計(jì)算流程,本領(lǐng)域技術(shù)人員可以無(wú)需通過(guò)創(chuàng)造性的勞動(dòng)得 到。
[0203] 示例性的,如圖8所示,第一計(jì)算單元703包括:
[0204] 第一計(jì)算子單元7031,用于在全部有向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算 全部有向圖的匯點(diǎn)子圖的最小割;
[0205] 示例性的,在本實(shí)施例中,第一計(jì)算子單元7031可以將每個(gè)有向圖的匯點(diǎn)子圖均 對(duì)應(yīng)一個(gè)計(jì)算線程,在其副本上通過(guò)最大流算法計(jì)算每個(gè)匯點(diǎn)子圖的最小割,優(yōu)選的,最大 流算法可以是最高標(biāo)號(hào)推進(jìn)重標(biāo)記Highest-Iabel Push-relabel算法。
[0206] 第一通知子單元7032,用于任一個(gè)有向圖子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在 的最小割通知其父匯點(diǎn)子圖;
[0207] 第一合并子單元7033,用于有向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最 小割,去除有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0208] 進(jìn)一步的,如圖8所示,第一合并子單元7033包括,
[0209] 第一計(jì)算停止模塊70331,用于有向圖的父匯點(diǎn)子圖在接收到有向圖子匯點(diǎn)子圖 發(fā)送的有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算;
[0210] 第一生成模塊70332,用于在有向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集合,其中,一 個(gè)結(jié)點(diǎn)集合為由有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn)集合,另一個(gè)結(jié) 點(diǎn)集合為在有向圖中有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一非去除結(jié)點(diǎn)組成 的非去除結(jié)點(diǎn)集合;
[0211] 第一結(jié)點(diǎn)去除模塊70333,用于遍歷待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與待去 除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,則該結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0212] 第一溢出值計(jì)算模塊70334,用于計(jì)算所有第二非去除結(jié)點(diǎn)的溢出值,得到去除之 后的有向圖的父匯點(diǎn)子圖,其中,溢出值為第二非去除結(jié)點(diǎn)的流進(jìn)量減去第二非去除結(jié)點(diǎn) 的流出量;
[0213] 第一計(jì)算恢復(fù)模塊70335,用于在去除結(jié)點(diǎn)之后的有向圖的父匯點(diǎn)子圖上繼續(xù)計(jì) 算其最小割。
[0214] 示例性的,在本實(shí)施例中,以匯點(diǎn)子圖1為例,第一計(jì)算子單元7031在如圖5 (A) 所示的匯點(diǎn)子圖1的副本上通過(guò)Highest-Iabel Push-relabel算法,可以得到匯點(diǎn)子圖1 的最小割為圖5 (A)的橢圓圈所示,包括結(jié)點(diǎn)8和結(jié)點(diǎn)10 ;
[0215] 第一通知子單元7032將匯點(diǎn)子圖1將最小割通知給如圖5 (B)所示的匯點(diǎn)子圖 2,由于匯點(diǎn)子圖1比匯點(diǎn)子圖2要小,此時(shí)匯點(diǎn)子圖2仍在計(jì)算,匯點(diǎn)子圖2在接收到匯點(diǎn) 子圖1通知的最小割之后,第一合并子單元7033所包括的第一計(jì)算停止模塊70331停止匯 點(diǎn)子圖2的計(jì)算,并且第一生成模塊70332在匯點(diǎn)子圖2中生成兩個(gè)結(jié)點(diǎn)集合,其中待去除 結(jié)點(diǎn)集合包括結(jié)點(diǎn)8,結(jié)點(diǎn)10,其余為非去除結(jié)點(diǎn)集合;
[0216] 第一結(jié)點(diǎn)去除模塊70333用于遍歷匯點(diǎn)子圖2的待去除結(jié)點(diǎn)集合,可以知道,結(jié)點(diǎn) 8,結(jié)點(diǎn)10均和非去除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,因此,結(jié)點(diǎn)8和結(jié)點(diǎn)10均為第二非去除結(jié) 點(diǎn),第一溢出值計(jì)算模塊70334對(duì)匯點(diǎn)子圖2的第二非去除結(jié)點(diǎn)計(jì)算溢出值,因此,匯點(diǎn)子 圖2沒(méi)有去除結(jié)點(diǎn),優(yōu)選的,對(duì)于第二非去除結(jié)點(diǎn),我們可以將其整體看成一個(gè)匯點(diǎn)子圖2 的等效匯點(diǎn),以使得減少后續(xù)匯點(diǎn)子圖2的最小割計(jì)算的計(jì)算量;
[0217] 第一計(jì)算恢復(fù)模塊70335繼續(xù)計(jì)算匯點(diǎn)子圖2的最小割。
[0218] 進(jìn)一步的,第一計(jì)算子單元7031匯點(diǎn)子圖2計(jì)算完畢時(shí),可以得到匯點(diǎn)子圖2的 最小割為圖5 (B)的點(diǎn)虛線圓圈所示,包括結(jié)點(diǎn)7,結(jié)點(diǎn)8和結(jié)點(diǎn)10,并且第一通知子單元 7032將匯點(diǎn)子圖2的最小割通知匯點(diǎn)子圖3,由于匯點(diǎn)子圖2比匯點(diǎn)子圖3要小,此時(shí)匯點(diǎn) 子圖3仍在計(jì)算,匯點(diǎn)子圖3在接收到匯點(diǎn)子圖2通知的最小割之后,第一合并子單元7033 所包括的第一計(jì)算停止模塊70331停止計(jì)算,并在匯點(diǎn)子圖3中生成兩個(gè)結(jié)點(diǎn)集合,其中待 去除結(jié)點(diǎn)集合包括結(jié)點(diǎn)7,結(jié)點(diǎn)8,結(jié)點(diǎn)10,其余為非去除結(jié)點(diǎn)集合;
[0219] 第一結(jié)點(diǎn)去除模塊70333遍歷匯點(diǎn)子圖3的待去除結(jié)點(diǎn)集合,可以知道,結(jié)點(diǎn)7,結(jié) 點(diǎn)8,結(jié)點(diǎn)10均和非去除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,因此匯點(diǎn)子圖3的第二非去除結(jié)點(diǎn)為結(jié)點(diǎn) 7,結(jié)點(diǎn)8和結(jié)點(diǎn)10,第一溢出值計(jì)算模塊70334對(duì)匯點(diǎn)子圖3的第二非去除結(jié)點(diǎn)計(jì)算溢出 值;優(yōu)選的,將匯點(diǎn)子圖3的第二非去除結(jié)點(diǎn)整體看成一個(gè)匯點(diǎn)子圖3的等效匯點(diǎn),以使得 減少后續(xù)匯點(diǎn)子圖3的最小割計(jì)算的計(jì)算量;
[0220] 第一計(jì)算恢復(fù)模塊70335繼續(xù)計(jì)算匯點(diǎn)子圖3的最小割。
[0221] 第一計(jì)算完成子單元7034,用于得到等效匯點(diǎn);
[0222] 進(jìn)一步的,第一計(jì)算完成子單元7034,用于:
[0223] 最大的有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0224] 示例性的,當(dāng)匯點(diǎn)子圖3的最小割計(jì)算完畢時(shí),第一計(jì)算完成子單元7034得到有 向圖的等效匯點(diǎn)T* ;
[0225] 或者,
[0226] 若有向圖的父匯點(diǎn)子圖只能夠去除有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的 一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
[0227] 示例性的,本實(shí)施例中,當(dāng)匯點(diǎn)子圖3只能夠去除匯點(diǎn)子圖2的最小割中的結(jié)點(diǎn)7 時(shí),第一計(jì)算完成子單元7034可以將當(dāng)前進(jìn)行等效源點(diǎn)計(jì)算的結(jié)果進(jìn)行合并,如果此時(shí)僅 由匯點(diǎn)子圖3的最小割計(jì)算結(jié)果與當(dāng)前反向圖的最大匯點(diǎn)子圖的最小割計(jì)算結(jié)果就能夠 表示為如圖3所示的有向圖,則計(jì)算完成,得到等效匯點(diǎn)T* ;
[0228] 在本實(shí)施例中,優(yōu)選為最大的有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成,在本實(shí)施 例中,當(dāng)匯點(diǎn)子圖3的最小割計(jì)算完畢時(shí),等效匯點(diǎn)計(jì)算完成,可以得到等效匯點(diǎn)T*。
[0229] 示例性的,如圖8所示,第二計(jì)算單元704包括:
[0230] 第二計(jì)算子單元7041,用于在全部反向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算 全部反向圖的匯點(diǎn)子圖的最小割;
[0231] 第二通知子單元7042,用于任一個(gè)反向圖的子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所 在的最小割通知其父匯點(diǎn)子圖;
[0232] 第二合并子單元7043,用于反向圖的父匯點(diǎn)子圖合并其子匯點(diǎn)子圖的匯點(diǎn)所在的 最小割,去除反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0233] 進(jìn)一步的,如圖8所示,第二合并子單元7043,包括:
[0234] 第二計(jì)算停止模塊70431,用于有向圖的父匯點(diǎn)子圖在接收到反向圖的子匯點(diǎn)子 圖發(fā)送的反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算;
[0235] 第二生成模塊70432,用于在反向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集合,其中,一 個(gè)結(jié)點(diǎn)集合為由反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn)集合,另一個(gè) 結(jié)點(diǎn)集合為在反向圖中反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一非去除結(jié)點(diǎn) 組成的非去除結(jié)點(diǎn)集合;
[0236] 第二結(jié)點(diǎn)去除模塊70433,用于遍歷待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與待去 除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,則該結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0237] 第二溢出值計(jì)算模塊70434,用于計(jì)算所有第二非去除結(jié)點(diǎn)的溢出值,得到去除之 后的反向圖的父匯點(diǎn)子圖,其中,溢出值為第二非去除結(jié)點(diǎn)的流進(jìn)量減去第二非去除結(jié)點(diǎn) 的流出量;
[0238] 第二計(jì)算恢復(fù)模塊70435,用于在去除結(jié)點(diǎn)之后的反向圖的父匯點(diǎn)子圖上繼續(xù)計(jì) 算其最小割。
[0239] 第二計(jì)算完成子單元7044,用于得到反向圖的等效匯點(diǎn),
[0240] 進(jìn)一步的,第二計(jì)算完成子單元7044,用于:
[0241] 最大的反向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0242] 或者,
[0243] 若反向圖的父匯點(diǎn)子圖只能夠去除反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中 的一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
[0244] 相應(yīng)的,對(duì)于如圖4所示的反向圖,本領(lǐng)域技術(shù)人員可以很容易的通過(guò)第一計(jì)算 單元703及其所包含的子單元與模塊對(duì)有向圖的匯點(diǎn)子圖的計(jì)算方法和計(jì)算流程得到第 二計(jì)算單元704及其所包含的子單元與模塊對(duì)反向圖的匯點(diǎn)子圖的計(jì)算方法和計(jì)算流程, 在此不再贅述。
[0245] 示例性的,本實(shí)施例中,獲取單元705得到有向圖的最小割為如圖6所示的等效源 點(diǎn)與等效匯點(diǎn)的連接的邊的集合。
[0246] 本實(shí)施例提供了一種有向圖的最小割獲取設(shè)備70,通過(guò)具有依次包含關(guān)系的子圖 的形式對(duì)結(jié)點(diǎn)集合進(jìn)行有向圖最小割獲取的方法和設(shè)備,減少了并行計(jì)算時(shí)的活躍結(jié)點(diǎn)間 的通信次數(shù)和同步次數(shù),提高了性能。
[0247] 參見(jiàn)圖9,為本發(fā)明本實(shí)施例提供的一種有向圖的最小割獲取設(shè)備70的硬件結(jié)構(gòu) 圖,在本實(shí)施例中,僅通過(guò)如圖3所示的有向圖進(jìn)行示例性說(shuō)明,其中,圓圈內(nèi)的數(shù)字表示 結(jié)點(diǎn)序號(hào),有向邊上的數(shù)字表示該有向邊上的流量,從圖3中我們?nèi)菀装l(fā)現(xiàn),結(jié)點(diǎn)0為源點(diǎn), 結(jié)點(diǎn)10為匯點(diǎn),設(shè)備70可以包括:至少一個(gè)處理器901 ;至少一個(gè)輸入單元902,用于將有 向圖輸入至設(shè)備70,具體形式可以是掃描儀,本發(fā)明實(shí)施例對(duì)此不作任何限定;存儲(chǔ)器903 和通信總線904,用于用于實(shí)現(xiàn)這些裝置之間的連接通信。
[0248] 其中,通信總線904可以是工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(Industry Standard Architecture,簡(jiǎn)稱(chēng)為ISA)總線、外部設(shè)備互連(Peripheral Component,簡(jiǎn)稱(chēng)為PCI)總線 或擴(kuò)展工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(Extended Industry Standard Architecture,簡(jiǎn)稱(chēng)為EISA)總 線等。該總線904可以分為地址總線、數(shù)據(jù)總線、控制總線等。為便于表示,圖9中僅用一 條粗線表示,但并不表示僅有一根總線或一種類(lèi)型的總線。
[0249] 存儲(chǔ)器903用于存儲(chǔ)可執(zhí)行程序代碼,該程序代碼包括計(jì)算機(jī)操作指令。存儲(chǔ)器 903可能包含高速RAM存儲(chǔ)器,也可能還包括非易失性存儲(chǔ)器(non-volatile memory),例 如至少一個(gè)磁盤(pán)存儲(chǔ)器。
[0250] 處理器901可能是一個(gè)中央處理器(Central Processing Unit,簡(jiǎn)稱(chēng)為CPU),或 者是特定集成電路(Application Specific Integrated Circuit,簡(jiǎn)稱(chēng)為ASIC),或者是被 配置成實(shí)施本發(fā)明實(shí)施例的一個(gè)或多個(gè)集成電路。
[0251] 處理器901用于執(zhí)行存儲(chǔ)器704中存儲(chǔ)的可執(zhí)行程序代碼,例如計(jì)算機(jī)程序來(lái)運(yùn) 行與可執(zhí)行代碼對(duì)應(yīng)的程序。當(dāng)有向圖輸入至設(shè)備70后,處理器901用于:
[0252] 按照預(yù)設(shè)策略,分別將有向圖劃分成至少兩個(gè)匯點(diǎn)子圖和至少兩個(gè)源點(diǎn)子圖,其 中,全部匯點(diǎn)子圖均包含有向圖的匯點(diǎn),且全部匯點(diǎn)子圖之間為依次包含關(guān)系;全部源點(diǎn)子 圖均包含有向圖的源點(diǎn),且全部源點(diǎn)子圖之間為依次包含關(guān)系;
[0253] 并行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間的通信獲得有向圖的等 效匯點(diǎn),以及并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間的通信獲得有向圖的 等效源點(diǎn),其中,等效匯點(diǎn)為最大的匯點(diǎn)子圖的最小割集,等效源點(diǎn)為最大的源點(diǎn)子圖的最 小害Ij集;
[0254] 根據(jù)有向圖的等效匯點(diǎn)和有向圖的等效源點(diǎn)連接的所有邊獲取有向圖的最小割。
[0255] 示例性的,處理器901按照預(yù)設(shè)策略,分別將有向圖劃分成至少兩個(gè)匯點(diǎn)子圖和 至少兩個(gè)源點(diǎn)子圖,具體可以包括:
[0256] 處理器901將有向圖進(jìn)行反向變化得到反向圖,其中,反向變化包括,將有向圖中 的所有邊進(jìn)行反向,有向圖的源點(diǎn)變成反向圖的匯點(diǎn),有向圖的匯點(diǎn)變成反向圖的源點(diǎn);
[0257] 處理器901分別從有向圖和反向圖的匯點(diǎn)出發(fā),按照預(yù)設(shè)策略,分別將有向圖和 反向圖劃分成至少兩個(gè)有向圖的匯點(diǎn)子圖以及至少兩個(gè)反向圖的匯點(diǎn)子圖,并分別為每個(gè) 有向圖的匯點(diǎn)子圖和反向圖的源點(diǎn)子圖建立副本,其中,至少兩個(gè)反向圖的匯點(diǎn)子圖為至 少兩個(gè)有向圖的源點(diǎn)子圖。
[0258] 示例性的,在并行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間的通信獲得 有向圖的等效匯點(diǎn),以及并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間的通信獲 得有向圖的等效源點(diǎn)之前,處理器901還可以用于:
[0259] 將所有有向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的有向圖的匯 點(diǎn)子圖稱(chēng)為有向圖的子匯點(diǎn)子圖,包含的有向圖的匯點(diǎn)子圖稱(chēng)為有向圖的父匯點(diǎn)子圖,以 及將所有反向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的反向圖的匯點(diǎn)子圖 稱(chēng)為反向圖的子匯點(diǎn)子圖,包含的反向圖的匯點(diǎn)子圖稱(chēng)為反向圖的父匯點(diǎn)子圖。
[0260] 示例性的,處理器901并行計(jì)算全部匯點(diǎn)子圖的最小割集并通過(guò)匯點(diǎn)子圖之間的 通信獲得有向圖的等效匯點(diǎn),具體可以包括:
[0261] 處理器901在全部有向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部有向圖的 匯點(diǎn)子圖的最小割;
[0262] 處理器901在任一個(gè)有向圖子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最小割通知 其父匯點(diǎn)子圖;
[0263] 處理器901將有向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除有 向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0264] 計(jì)算完成,處理器901得到等效匯點(diǎn)。
[0265] 進(jìn)一步的,處理器901將有向圖的父匯點(diǎn)子圖合并有向圖的子匯點(diǎn)子圖的匯點(diǎn)所 在的最小割,去除有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn),具體可以包括:
[0266] 處理器901使得有向圖的父匯點(diǎn)子圖在接收到有向圖子匯點(diǎn)子圖發(fā)送的有向圖 子匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算,并在有向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn) 集合,其中,一個(gè)結(jié)點(diǎn)集合為由有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn) 集合,另一個(gè)結(jié)點(diǎn)集合為在有向圖中有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一非 去除結(jié)點(diǎn)組成的非去除結(jié)點(diǎn)集合;
[0267] 處理器901遍歷待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與待去除結(jié)點(diǎn)集合中的結(jié) 點(diǎn)連接,則該結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0268] 處理器901計(jì)算所有第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的有向圖的父匯點(diǎn) 子圖,其中,溢出值為第二非去除結(jié)點(diǎn)的流進(jìn)量減去第二非去除結(jié)點(diǎn)的流出量;
[0269] 處理器901在去除結(jié)點(diǎn)之后的有向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最小割。
[0270] 示例性的,計(jì)算完成,包括;
[0271] 處理器901將最大的有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0272] 或者,
[0273] 若有向圖的父匯點(diǎn)子圖只能夠去除有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的 一個(gè)結(jié)點(diǎn)時(shí),處理器901檢查是否完成等效匯點(diǎn)的計(jì)算。
[0274] 相應(yīng)的,
[0275] 處理器901并行計(jì)算全部源點(diǎn)子圖的最小割集并通過(guò)源點(diǎn)子圖之間的通信獲得 有向圖的等效源點(diǎn),可以包括:
[0276] 處理器901在全部反向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部反向圖的 匯點(diǎn)子圖的最小割;
[0277] 處理器901在任一個(gè)反向圖的子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最小割通 知其父匯點(diǎn)子圖;
[0278] 處理器901將反向圖的父匯點(diǎn)子圖合并其子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除 反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn);
[0279] 計(jì)算完成,處理器901得到反向圖的等效匯點(diǎn)。
[0280] 進(jìn)一步的,處理器901將反向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小 害I],去除反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn),具體可以包括:
[0281] 處理器901使得反向圖的父匯點(diǎn)子圖在接收到反向圖的子匯點(diǎn)子圖發(fā)送的反向 圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算,并在反向圖的父匯點(diǎn)子圖上生成兩個(gè) 結(jié)點(diǎn)集合,其中,一個(gè)結(jié)點(diǎn)集合為由反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去 除結(jié)點(diǎn)集合,另一個(gè)結(jié)點(diǎn)集合為在反向圖中反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外 的第一非去除結(jié)點(diǎn)組成的非去除結(jié)點(diǎn)集合;
[0282] 處理器901遍歷待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與待去除結(jié)點(diǎn)集合中的結(jié) 點(diǎn)連接,則該結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn);
[0283] 處理器901計(jì)算所有第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的反向圖的父匯點(diǎn) 子圖,其中,溢出值為第二非去除結(jié)點(diǎn)的流進(jìn)量減去第二非去除結(jié)點(diǎn)的流出量;
[0284] 處理器901在去除之后的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最小割。
[0285] 示例性的,計(jì)算完成,包括;
[0286] 處理器901在最大的反向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成;
[0287] 或者,
[0288] 若反向圖的父匯點(diǎn)子圖只能夠去除反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中 的一個(gè)結(jié)點(diǎn)時(shí),處理器901檢查是否完成等效匯點(diǎn)的計(jì)算。
[0289] 本實(shí)施例提供了一種有向圖的最小割獲取設(shè)備70,通過(guò)具有依次包含關(guān)系的子圖 的形式對(duì)結(jié)點(diǎn)集合進(jìn)行有向圖最小割獲取的方法和設(shè)備,減少了并行計(jì)算時(shí)的活躍結(jié)點(diǎn)間 的通信次數(shù)和同步次數(shù),提高了性能。
[0290] 本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò) 程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序 在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者 光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0291] 以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何 熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵 蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1. 一種有向圖的最小割獲取方法,其特征在于,包括: 按照預(yù)設(shè)策略,分別將所述有向圖劃分成至少兩個(gè)匯點(diǎn)子圖和至少兩個(gè)源點(diǎn)子圖,其 中,全部所述匯點(diǎn)子圖均包含所述有向圖的匯點(diǎn),且全部所述匯點(diǎn)子圖之間為依次包含關(guān) 系;全部所述源點(diǎn)子圖均包含所述有向圖的源點(diǎn),且全部所述源點(diǎn)子圖之間為依次包含關(guān) 系; 并行計(jì)算全部所述匯點(diǎn)子圖的最小割集并通過(guò)所述匯點(diǎn)子圖之間的通信獲得所述有 向圖的等效匯點(diǎn),以及并行計(jì)算全部所述源點(diǎn)子圖的最小割集并通過(guò)所述源點(diǎn)子圖之間的 通信獲得所述有向圖的等效源點(diǎn),其中,所述等效匯點(diǎn)為最大的所述匯點(diǎn)子圖的最小割集, 所述等效源點(diǎn)為最大的所述源點(diǎn)子圖的最小割集; 根據(jù)所述有向圖的等效匯點(diǎn)和所述有向圖的等效源點(diǎn)連接的所有邊獲取所述有向圖 的最小割。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述按照預(yù)設(shè)策略,分別將所述有向圖劃 分成至少兩個(gè)匯點(diǎn)子圖和至少兩個(gè)源點(diǎn)子圖,包括: 將所述有向圖進(jìn)行反向變化得到反向圖,其中,所述反向變化包括,將所述有向圖中的 所有邊進(jìn)行反向,所述有向圖的所述源點(diǎn)變成所述反向圖的匯點(diǎn),所述有向圖的所述匯點(diǎn) 變成所述反向圖的源點(diǎn); 分別從所述有向圖和所述反向圖的匯點(diǎn)出發(fā),按照所述預(yù)設(shè)策略,分別將所述有向圖 和所述反向圖劃分成至少兩個(gè)所述有向圖的匯點(diǎn)子圖以及至少兩個(gè)所述反向圖的匯點(diǎn)子 圖,并分別為每個(gè)所述有向圖的匯點(diǎn)子圖和所述反向圖的源點(diǎn)子圖建立副本,其中,所述至 少兩個(gè)所述反向圖的匯點(diǎn)子圖為所述至少兩個(gè)所述有向圖的源點(diǎn)子圖。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,在所述并行計(jì)算全部所述匯點(diǎn)子圖的 最小割集并通過(guò)所述匯點(diǎn)子圖之間的通信獲得所述有向圖的等效匯點(diǎn),以及并行計(jì)算全部 所述源點(diǎn)子圖的最小割集并通過(guò)所述源點(diǎn)子圖之間的通信獲得所述有向圖的等效源點(diǎn)之 前,還包括: 將所有所述有向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的所述有向圖 的匯點(diǎn)子圖稱(chēng)為所述有向圖的子匯點(diǎn)子圖,包含的所述有向圖的匯點(diǎn)子圖稱(chēng)為所述有向圖 的父匯點(diǎn)子圖,以及將所有所述反向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含 的所述反向圖的匯點(diǎn)子圖稱(chēng)為所述反向圖的子匯點(diǎn)子圖,包含的所述反向圖的匯點(diǎn)子圖稱(chēng) 為所述反向圖的父匯點(diǎn)子圖。
4. 根據(jù)權(quán)利要求1-3任一項(xiàng)所述的方法,其特征在于,所述并行計(jì)算全部所述匯點(diǎn)子 圖的最小割集并通過(guò)所述匯點(diǎn)子圖之間的通信獲得所述有向圖的等效匯點(diǎn),包括: 在全部所述有向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部所述有向圖的匯點(diǎn)子 圖的最小割; 任一個(gè)所述有向圖子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最小割通知其父匯點(diǎn)子 圖; 所述有向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除所述有向圖子匯 點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn); 計(jì)算完成,得到所述等效匯點(diǎn)。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述有向圖的父匯點(diǎn)子圖合并所述有向 圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中 的結(jié)點(diǎn),包括: 所述有向圖的父匯點(diǎn)子圖在接收到所述有向圖子匯點(diǎn)子圖發(fā)送的所述有向圖子匯點(diǎn) 子圖的匯點(diǎn)所在的最小割后,停止計(jì)算,并在所述有向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集 合,其中,一個(gè)結(jié)點(diǎn)集合為由所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié) 點(diǎn)集合,另一個(gè)結(jié)點(diǎn)集合為在所述有向圖中所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以 外的第一非去除結(jié)點(diǎn)組成的非去除結(jié)點(diǎn)集合; 遍歷所述待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與所述待去除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連 接,則該所述結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn); 計(jì)算所有所述第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的所述有向圖的父匯點(diǎn)子圖, 其中,所述溢出值為所述第二非去除結(jié)點(diǎn)的流進(jìn)量減去所述第二非去除結(jié)點(diǎn)的流出量; 在去除結(jié)點(diǎn)之后的所述有向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最小割。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述計(jì)算完成,包括; 所述最大的所述有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成; 或者, 若所述有向圖的父匯點(diǎn)子圖只能夠去除所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割 中的一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
7. 根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述并行計(jì)算全部所述源點(diǎn)子圖的最 小割集并通過(guò)所述源點(diǎn)子圖之間的通信獲得所述有向圖的等效源點(diǎn),包括: 在全部所述反向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部所述反向圖的匯點(diǎn)子 圖的最小割; 任一個(gè)所述反向圖的子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最小割通知其父匯點(diǎn)子 圖; 所述反向圖的父匯點(diǎn)子圖合并其子匯點(diǎn)子圖的匯點(diǎn)所在的最小割,去除所述反向圖的 子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn); 計(jì)算完成,得到所述反向圖的等效匯點(diǎn)。
8. 根據(jù)權(quán)利要求7所述的方法,其特征在于,所述反向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子 圖的匯點(diǎn)所在的最小割,去除所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn),包 括: 所述反向圖的父匯點(diǎn)子圖在接收到所述反向圖的子匯點(diǎn)子圖發(fā)送的所述反向圖的子 匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算,并在所述反向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié) 點(diǎn)集合,其中,一個(gè)結(jié)點(diǎn)集合為由所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待 去除結(jié)點(diǎn)集合,另一個(gè)結(jié)點(diǎn)集合為在所述反向圖中所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的 最小割以外的第一非去除結(jié)點(diǎn)組成的非去除結(jié)點(diǎn)集合; 遍歷所述待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與所述待去除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連 接,則該所述結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn); 計(jì)算所有所述第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的所述反向圖的父匯點(diǎn)子圖, 其中,所述溢出值為所述第二非去除結(jié)點(diǎn)的流進(jìn)量減去所述第二非去除結(jié)點(diǎn)的流出量; 在所述去除之后的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最小割。
9. 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述計(jì)算完成,包括; 所述最大的所述反向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成; 或者, 若所述反向圖的父匯點(diǎn)子圖只能夠去除所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小 割中的一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
10. -種有向圖的最小割獲取設(shè)備,其特征在于,包括: 第一子圖劃分單元,用于按照預(yù)設(shè)策略,將所述有向圖劃分至少兩個(gè)匯點(diǎn)子圖,其中, 全部所述匯點(diǎn)子圖均包括所訴有向圖的匯點(diǎn),且全部所述匯點(diǎn)子圖之間為依次包含關(guān)系; 第二子圖劃分單元,用于按照所述預(yù)設(shè)策略,將所述有向圖劃分成至少兩個(gè)源點(diǎn)子圖, 其中,全部所述源點(diǎn)子圖均包含所述有向圖的源點(diǎn),且全部所述源點(diǎn)子圖之間為依次包含 關(guān)系; 第一計(jì)算單元,用于并行計(jì)算全部所述匯點(diǎn)子圖的最小割集并通過(guò)所述匯點(diǎn)子圖之間 的通信獲得所述有向圖的等效匯點(diǎn),其中,所述等效匯點(diǎn)為最大的所述匯點(diǎn)子圖的最小割 集;第二計(jì)算單元,用于并行計(jì)算全部所述源點(diǎn)子圖的最小割集并通過(guò)所述源點(diǎn)子圖之間 的通信獲得所述有向圖的等效源點(diǎn),其中,所述等效源點(diǎn)為最大的所述源點(diǎn)子圖的最小割 集; 獲取單元,用于根據(jù)所述有向圖的等效匯點(diǎn)和所述有向圖的等效源點(diǎn)連接的所有邊獲 取所述有向圖的最小割。
11. 根據(jù)權(quán)利要求10所述的設(shè)備,其特征在于, 所述第一子圖劃分單元,進(jìn)一步用于從所述有向圖的匯點(diǎn)出發(fā),按照所述預(yù)設(shè)策略,將 所述有向圖劃分成至少兩個(gè)所述有向圖的匯點(diǎn)子圖,并分別為每個(gè)所述有向圖的匯點(diǎn)子圖 建立副本; 所述第二子圖劃分單元,包括: 反向子單元,用于將所述有向圖進(jìn)行反向變化得到反向圖,其中,所述反向變化包括, 將所述有向圖中的所有邊進(jìn)行反向,所述有向圖的所述源點(diǎn)變成所述反向圖的匯點(diǎn),所述 有向圖的所述匯點(diǎn)變成所述反向圖的源點(diǎn); 反向子圖劃分子單元,用于從所述反向圖的匯點(diǎn)出發(fā),按照所述預(yù)設(shè)策略,將所述反 向圖劃分成至少兩個(gè)所述反向圖的匯點(diǎn)子圖,并分別為每個(gè)所述反向圖的源點(diǎn)子圖建立副 本,其中,所述至少兩個(gè)所述反向圖的匯點(diǎn)子圖為所述至少兩個(gè)所述有向圖的源點(diǎn)子圖。
12. 根據(jù)權(quán)利要求10或11所述的設(shè)備,其特征在于,還包括,建立關(guān)系單元,用于將所 有所述有向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的所述有向圖的匯點(diǎn)子 圖稱(chēng)為所述有向圖的子匯點(diǎn)子圖,包含的所述有向圖的匯點(diǎn)子圖稱(chēng)為所述有向圖的父匯點(diǎn) 子圖,以及將所有所述反向圖的匯點(diǎn)子圖根據(jù)包含關(guān)系建立關(guān)系樹(shù),其中,被包含的所述反 向圖的匯點(diǎn)子圖稱(chēng)為所述反向圖的子匯點(diǎn)子圖,包含的所述反向圖的匯點(diǎn)子圖稱(chēng)為所述反 向圖的父匯點(diǎn)子圖。
13. 根據(jù)權(quán)利要求10-12任一項(xiàng)所述的設(shè)備,其特征在于,所述第一計(jì)算單元包括: 第一計(jì)算子單元,用于在全部所述有向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部 所述有向圖的匯點(diǎn)子圖的最小割; 第一通知子單元,用于任一個(gè)所述有向圖子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的最 小割通知其父匯點(diǎn)子圖; 第一合并子單元,用于所述有向圖的父匯點(diǎn)子圖合并子匯點(diǎn)子圖的匯點(diǎn)所在的最小 害IJ,去除所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn); 第一計(jì)算完成子單元,用于得到所述等效匯點(diǎn)。
14. 根據(jù)權(quán)利要求13所述的設(shè)備,其特征在于,所述第一合并子單元,包括: 第一計(jì)算停止模塊,用于所述有向圖的父匯點(diǎn)子圖在接收到所述有向圖子匯點(diǎn)子圖發(fā) 送的所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算; 第一生成模塊,用于在所述有向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集合,其中,一個(gè)結(jié)點(diǎn) 集合為由所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn)集合,另一個(gè)結(jié)點(diǎn) 集合為在所述有向圖中所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一非去除結(jié) 點(diǎn)組成的非去除結(jié)點(diǎn)集合; 第一結(jié)點(diǎn)去除模塊,用于遍歷所述待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與所述待去 除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,則該所述結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn); 第一溢出值計(jì)算模塊,用于計(jì)算所有所述第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的 所述有向圖的父匯點(diǎn)子圖,其中,所述溢出值為所述第二非去除結(jié)點(diǎn)的流進(jìn)量減去所述第 二非去除結(jié)點(diǎn)的流出量; 第一計(jì)算恢復(fù)模塊,用于在去除結(jié)點(diǎn)之后的所述有向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最 小割。
15. 根據(jù)權(quán)利要求14所述的設(shè)備,其特征在于,所述第一計(jì)算完成子單元,進(jìn)一步用 于: 所述最大的所述有向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成; 或者, 若所述有向圖的父匯點(diǎn)子圖只能夠去除所述有向圖子匯點(diǎn)子圖的匯點(diǎn)所在的最小割 中的一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
16. 根據(jù)權(quán)利要求11或12所述的設(shè)備,其特征在于,所述第二計(jì)算單元包括: 第二計(jì)算子單元,用于在全部所述反向圖的匯點(diǎn)子圖上根據(jù)最大流算法并行計(jì)算全部 所述反向圖的匯點(diǎn)子圖的最小割; 第二通知子單元,用于任一個(gè)所述反向圖的子匯點(diǎn)子圖計(jì)算完畢時(shí),將其匯點(diǎn)所在的 最小割通知其父匯點(diǎn)子圖; 第二合并子單元,用于所述反向圖的父匯點(diǎn)子圖合并其子匯點(diǎn)子圖的匯點(diǎn)所在的最小 害I],去除所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割中的結(jié)點(diǎn); 第二計(jì)算完成子單元,用于得到所述反向圖的等效匯點(diǎn)。
17. 根據(jù)權(quán)利要求16所述的設(shè)備,其特征在于,所述第二合并子單元,包括: 第二計(jì)算停止模塊,用于所述反向圖的父匯點(diǎn)子圖在接收到所述反向圖的子匯點(diǎn)子圖 發(fā)送的所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割后,停止計(jì)算; 第二生成模塊,用于在所述反向圖的父匯點(diǎn)子圖上生成兩個(gè)結(jié)點(diǎn)集合,其中,一個(gè)結(jié)點(diǎn) 集合為由所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割組成的待去除結(jié)點(diǎn)集合,另一個(gè)結(jié) 點(diǎn)集合為在所述反向圖中所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小割以外的第一非去 除結(jié)點(diǎn)組成的非去除結(jié)點(diǎn)集合; 第二結(jié)點(diǎn)去除模塊,用于遍歷所述待去除結(jié)點(diǎn)集合,若其中的任一結(jié)點(diǎn)僅與所述待去 除結(jié)點(diǎn)集合中的結(jié)點(diǎn)連接,則該所述結(jié)點(diǎn)為去除結(jié)點(diǎn),否則為第二非去除結(jié)點(diǎn); 第二溢出值計(jì)算模塊,用于計(jì)算所有所述第二非去除結(jié)點(diǎn)的溢出值,得到去除之后的 所述反向圖的父匯點(diǎn)子圖,其中,所述溢出值為所述第二非去除結(jié)點(diǎn)的流進(jìn)量減去所述第 二非去除結(jié)點(diǎn)的流出量; 第二計(jì)算恢復(fù)模塊,用于在去除結(jié)點(diǎn)之后的所述反向圖的父匯點(diǎn)子圖上繼續(xù)計(jì)算其最 小割。
18.根據(jù)權(quán)利要求17所述的設(shè)備,其特征在于,所述第二計(jì)算完成子單元,進(jìn)一步用 于: 所述最大的所述反向圖的匯點(diǎn)子圖計(jì)算完畢時(shí),計(jì)算完成; 或者, 若所述反向圖的父匯點(diǎn)子圖只能夠去除所述反向圖的子匯點(diǎn)子圖的匯點(diǎn)所在的最小 割中的一個(gè)結(jié)點(diǎn)時(shí),檢查是否完成等效匯點(diǎn)的計(jì)算。
【文檔編號(hào)】G06F9/46GK104239126SQ201310244090
【公開(kāi)日】2014年12月24日 申請(qǐng)日期:2013年6月19日 優(yōu)先權(quán)日:2013年6月19日
【發(fā)明者】王蕾, 崔慧敏, 馮曉兵 申請(qǐng)人:華為技術(shù)有限公司, 中國(guó)科學(xué)院計(jì)算技術(shù)研究所