欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于簇的圖數(shù)據(jù)劃分方法與流程

文檔序號:11286462閱讀:219來源:國知局
本發(fā)明屬于大數(shù)據(jù)處理領(lǐng)域,更具體地,涉及一種基于簇的圖數(shù)據(jù)劃分方法。
背景技術(shù)
::對真實世界關(guān)系圖進行數(shù)據(jù)挖掘是時下的一個熱門話題,比如社交網(wǎng)絡(luò)分析,網(wǎng)頁排名。無論是在單機上進行多線程并行處理還是運用分布式系統(tǒng)來處理這些圖,都繞不開圖數(shù)據(jù)劃分這一關(guān)鍵步驟。但是圖數(shù)據(jù)有著數(shù)據(jù)規(guī)模大,關(guān)系復(fù)雜等一些特點,故對其進行合適的劃分是一項極具挑戰(zhàn)性的工作。圖規(guī)模反映圖數(shù)據(jù)包括的頂點和邊的數(shù)目。若圖數(shù)據(jù)包括的頂點和邊的數(shù)目較多,則為大規(guī)模圖數(shù)據(jù)。近幾年隨著圖計算的普及,圖數(shù)據(jù)劃分算法也層出不窮。隨機哈希(hash)和metis是比較常用的劃分算法。隨機hash劃分耗時短,負(fù)載均衡性也較好,由于其忽略了圖數(shù)據(jù)中頂點之間的關(guān)聯(lián),重復(fù)因子較大,重復(fù)率較高,從而劃分結(jié)果并不是特別理想。metis是一種層次劃分方法,通過粗化,劃分,細化三個步驟來完成整個劃分工作,由于粗化過程需要存儲很多中間結(jié)果。所以耗費內(nèi)存較多,需要較大的內(nèi)存開銷,無法較好地處理大規(guī)模圖數(shù)據(jù)的劃分。綜上,現(xiàn)有圖數(shù)據(jù)劃分方法的重復(fù)率較高,劃分結(jié)果不理想,或者內(nèi)存開銷大,無法較好地處理大規(guī)模圖數(shù)據(jù)的劃分。技術(shù)實現(xiàn)要素:針對現(xiàn)有技術(shù)的缺陷,本發(fā)明的目的在于解決現(xiàn)有技術(shù)圖數(shù)據(jù)劃分方法的重復(fù)率較高,劃分結(jié)果不理想,或者內(nèi)存開銷大,無法較好地處理大規(guī)模圖數(shù)據(jù)的劃分的技術(shù)問題。為實現(xiàn)上述目的,第一方面,本發(fā)明實施例提供了一種基于簇的圖數(shù)據(jù)劃分方法,包括以下步驟:確定圖數(shù)據(jù)包括的v個頂點中每個頂點的度值,所述圖數(shù)據(jù)包括e條邊;根據(jù)所述每個頂點的度值,將所述v個頂點按度值從大到小的順序進行排序,確定度值大于第一閾值的m個頂點;根據(jù)所述v個頂點、e條邊以及m個頂點,確定t條路徑,所述t條路徑中每條路徑由v個頂點中的鄰接頂點和e條邊中的鄰接邊組成,每條路徑包括m個頂點中的一個頂點,且每條路徑的一個端點為所述m個頂點中的一個頂點,所述t條路徑中兩條路徑之間最多共用一個端點;將所述v個頂點中所述t條路徑不包括的頂點,歸屬到所述t條路徑,組成歸屬后的t條路徑,或者將其創(chuàng)建成n條路徑;根據(jù)所述m個頂點、t條路徑以及所述n條路徑,確定m個簇;根據(jù)所述m個簇之間的關(guān)聯(lián)度和預(yù)設(shè)劃分塊數(shù)目p,將所述圖數(shù)據(jù)的m個簇劃分為p個劃分塊;其中,所述路徑為所述圖數(shù)據(jù)的第一子集,包括多個頂點和多條邊,所述簇為所述圖數(shù)據(jù)的第二子集,包括多條路徑,所述第一子集和所述第二子集為所述圖數(shù)據(jù)的子集,所述關(guān)聯(lián)度由所述兩個子集之間邊的數(shù)目確定。其中,v表示圖數(shù)據(jù)中頂點的總數(shù)目,e表示邊的數(shù)目,t和n表示路徑的數(shù)目,m表示從v個頂點中確定的頂點的數(shù)目,m還表示對應(yīng)的簇的數(shù)目,p表示劃分塊的數(shù)目,v、e、t、m、n以及p均為正整數(shù)。在一個示例中,通過確定一定的第一閾值,使得m個頂點可為度值在v個頂點中排序占前10%或5%的頂點。即上述m個頂點對應(yīng)為v個頂點中度值較大的頂點集合,具體地,第一閾值可根據(jù)需要進行設(shè)計,也可根據(jù)預(yù)設(shè)劃分塊數(shù)目p和邊的數(shù)目e確定,以保證路徑、簇或者劃分塊之間的均衡性。本發(fā)明實施例提供的技術(shù)方案通過將度值較大的頂點作為路徑的端點,可以降低圖數(shù)據(jù)劃分中的重復(fù)率,以及以路徑為單元進行圖規(guī)模縮減,而降低了內(nèi)存開銷,可以處理大規(guī)模的圖數(shù)據(jù)。同時,可以保持路徑的完整性,使得該方法所應(yīng)用的圖數(shù)據(jù)處理系統(tǒng)的運行性能更好。在一個可選的實施例中,根據(jù)所述v個頂點、e條邊以及m個頂點,確定t條路徑,具體包括以下步驟:選取所述m個頂點中頂點a,沿第一方向遍歷,若其鄰接點不屬于t條路徑中的一條路徑,且其鄰接點不屬于m個頂點中的頂點,則沿其鄰接點繼續(xù)向第一方向遍歷,直至遍歷到所述m個頂點中的頂點b,由頂點a和頂點b為兩個端點遍歷確定的路徑為遍歷路徑,所述第一方向為沿出度的方向或入度的方向;在第一頂點處分裂所述遍歷路徑,得到以所述頂點a和所述第一頂點為兩個端點的第一子路徑,和以所述頂點b和所述第一頂點為兩個端點的第二子路徑,所述第一頂點為所述遍歷路徑包括的頂點中度值最小的頂點;根據(jù)所述第一子路徑和所述第二子路徑,確定t條路徑中的兩條路徑。在一個可選的實施例中,根據(jù)所述v個頂點、e條邊以及m個頂點,確定t條路徑,具體還包括以下步驟:選取所述m個頂點中頂點c,沿所述第一方向遍歷,若其鄰接點不屬于t條路徑中的路徑,且其鄰接點不屬于m個頂點中的頂點,則沿其鄰接點繼續(xù)向第一方向遍歷,直至遍歷到第二頂點,所述第二頂點為歸屬于t條路徑中的一條路徑的頂點;根據(jù)所述頂點c和所述第二頂點為兩個端點遍歷,確定t條路徑中的一條路徑。在一個可選的實施例中,所述將所述v個頂點中所述t條路徑不包括的頂點,歸屬到所述t條路徑,組成歸屬后的t條路徑,或者將其創(chuàng)建成n條路徑,具體包括以下步驟:確定所述v個頂點的編號,并根據(jù)所述v個頂點的編號依次對每個頂點進行檢查,檢查每個頂點是否歸屬于所述t條路徑中的一條路徑;若其屬于所述t條路徑中的一條路徑,則檢查下一個頂點;若其不屬于所述t條路徑中的一條路徑,則遍歷其鄰接點是否屬于所述t條路徑中的一條路徑,若其鄰接點屬于所述t條路徑中的一條路徑,則將其歸屬到其鄰接點所屬的路徑;若其不屬于所述t條路徑中的一條路徑,則遍歷其鄰接點是否屬于所述t條路徑中的一條路徑,若其鄰接點不屬于所述t條路徑中的一條路徑,則設(shè)其為頂點d,沿出度和入度的方向遍歷其鄰接點,直至遍歷到頂點e和頂點f,頂點e和頂點f為兩個端點遍歷確定的路徑為所述n條路徑中的一條路徑,所述頂點e和頂點f的鄰接點分別屬于所述t條路徑中的兩條路徑。在一個可選的實施例中,所述若其鄰接點屬于所述t條路徑中的一條路徑,則將其歸屬到其鄰接點所屬的路徑,包括:若其至少一個鄰接點屬于所述t條路徑中的至少一條路徑,則確定其與其至少一個鄰接點歸屬的至少一個路徑中每條路徑的關(guān)聯(lián)邊總數(shù),其中,所述關(guān)聯(lián)邊為其與其至少一個鄰接點歸屬的至少一個路徑中每條路徑之間的邊;根據(jù)其與其至少一個鄰接點歸屬的至少一個路徑中每條路徑的關(guān)聯(lián)邊總數(shù),以及其至少一個鄰接點歸屬的至少一個路徑中每條路徑包括的邊的總數(shù),確定其與其至少一個鄰接點歸屬的至少一個路徑中每條路徑之間的均衡參數(shù),將其歸屬其至少一個鄰接點歸屬的至少一個路徑中到均衡參數(shù)值最大的路徑。具體地,通過考慮頂點與路徑之間的均衡參數(shù),進一步降低了圖數(shù)據(jù)劃分的重復(fù)率。在一個可選的實施例中,所述根據(jù)所述m個頂點、所述歸屬后的t條路徑以及所述n條路徑,確定m個簇,具體包括以下步驟:將所述m個頂點中每個頂點歸屬的t條路徑中的路徑劃分到每個頂點的路徑集;根據(jù)所述n條路徑中每條路徑與m個頂點中每個頂點路徑集的關(guān)聯(lián)度,將其劃分到與其關(guān)聯(lián)度最大的路徑集,并更新其所在的路徑集,更新后的m個頂點的路徑集為m個簇。在一個可選的實施例中,所述根據(jù)所述m個簇之間的關(guān)聯(lián)度和預(yù)設(shè)劃分塊數(shù)目p,將所述圖數(shù)據(jù)劃分為p個劃分塊,具體包括以下步驟:當(dāng)所述m個簇中簇z內(nèi)的邊數(shù)目小于e/p時,根據(jù)簇z與其鄰接簇的關(guān)聯(lián)度將簇z與其關(guān)聯(lián)度最大的簇y合并為簇x,當(dāng)所述簇x內(nèi)的邊數(shù)目不小于e/p時,簇x為所述p個劃分塊中的一個塊;當(dāng)所述簇x內(nèi)的邊數(shù)目還小于e/p時,繼續(xù)將簇x與其關(guān)聯(lián)度最大的簇合并,直至合并后的包括簇x的簇內(nèi)的邊數(shù)目不小于e/p。具體地,本發(fā)明實施例通過平均劃分塊中邊的數(shù)目,提高了圖數(shù)據(jù)劃分的均衡性。在一個可選的實施例中,所述根據(jù)所述m個簇之間的關(guān)聯(lián)度和預(yù)設(shè)劃分塊數(shù)目p,將所述圖數(shù)據(jù)劃分為p個劃分塊,具體還包括以下步驟:當(dāng)劃分完p-1個劃分塊后,將未被劃分到所述p-1個劃分塊的簇,劃分為第p個劃分塊。具體地,本發(fā)明實施例通過在劃分完p-1個劃分塊后,將未被劃分到所述p-1個劃分塊的簇,劃分為第p個劃分塊,保證了整體圖數(shù)據(jù)劃分過程的完整性。在一個可選的實施例中,設(shè)待歸屬至所述t條路徑的頂點為頂點g,則頂點g與t條路徑中候選歸屬路徑x的均衡參數(shù)通過以下公式得到:其中,val表示頂點g與路徑x的均衡參數(shù),tmp[x]表示頂點g與路徑x的關(guān)聯(lián)邊總數(shù),pathweight[x]表示路徑x包括的邊的總數(shù)。其中,a-g分別指代不同的頂點,并不具有實質(zhì)性的含義。第二方面,本發(fā)明實施例提供了一種計算機可讀存儲介質(zhì),該計算機可讀存儲介質(zhì)上存儲有計算機程序,該計算機程序被處理器執(zhí)行時實現(xiàn)上述第一方面所述的圖數(shù)據(jù)劃分方法??傮w而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下有益效果:1、本發(fā)明實施例提供的技術(shù)方案通過將度值較大的頂點作為路徑的端點,可以降低圖數(shù)據(jù)劃分中的重復(fù)率,以及以路徑為單元進行圖規(guī)??s減,而降低了內(nèi)存開銷,可以處理大規(guī)模的圖數(shù)據(jù)。同時,可以保持路徑的完整性,使得該方法所應(yīng)用的圖數(shù)據(jù)處理系統(tǒng)的運行性能更好。2、本發(fā)明實施例提供的技術(shù)方案通過考慮頂點與路徑之間的均衡參數(shù),進一步降低了圖數(shù)據(jù)劃分的重復(fù)率。3、本發(fā)明實施例通過平均劃分塊中邊的數(shù)目,提高了圖數(shù)據(jù)劃分的均衡性。4、本發(fā)明實施例通過在劃分完p-1個劃分塊后,將未被劃分到所述p-1個劃分塊的簇,劃分為第p個劃分塊,保證了整體圖數(shù)據(jù)劃分過程的完整性。附圖說明圖1為本發(fā)明實施例提供的一種基于簇的圖數(shù)據(jù)劃分方法流程示意圖;圖2為本發(fā)明實施例提供的另一種基于簇的圖數(shù)據(jù)劃分方法流程示意圖;圖3為本發(fā)明實施例提供的一種步驟s205的細化流程示意圖;圖4為本發(fā)明實施例提供的一種步驟s206的細化流程示意圖;圖5為本發(fā)明實施例提供的一種步驟s208的細化流程示意圖。具體實施方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。圖1為本發(fā)明實施例提供的一種基于簇的圖數(shù)據(jù)劃分方法流程示意圖,如圖1所示,該方法包括步驟s101至步驟s106。s101,確定圖數(shù)據(jù)包括的v個頂點中每個頂點的度值,所述圖數(shù)據(jù)包括e條邊。其中,本領(lǐng)域技術(shù)人員可以理解,圖數(shù)據(jù)中,存在多個頂點和多條邊,其中,若一個頂點和另一個頂點之間存在一條邊,則這兩個頂點分別為該條邊的兩個端點。具體地,可設(shè)每個頂點的度值為d,度值包括出度do和入度di的總和,即d=do+di。s102,根據(jù)所述每個頂點的度值,將所述v個頂點按度值從大到小的順序進行排序,確定度值大于第一閾值的m個頂點。在一個可選的實施例中,通過確定一定的第一閾值,使得m個頂點可為度值在v個頂點中排序占前10%或5%的頂點。即上述m個頂點對應(yīng)為v個頂點中度值較大的頂點集合。例如,若圖數(shù)據(jù)g共有100個頂點,將這100個頂點按照每個頂點的度值進行排序,則m個頂點為排序在前10的10個頂點或者排序在前5的5個頂點。具體地,由于圖數(shù)據(jù)劃分中,度值較大的點一般會導(dǎo)致較高的重復(fù)率,需要區(qū)別對待這些度值較大的點,即本申請中提及的度值大于第一閾值的m個頂點??蓞⒖疾襟Es103,以度值較大的m個頂點為端點,進而尋找t條路徑。具體地,第一閾值可根據(jù)需要進行設(shè)計,也可根據(jù)預(yù)設(shè)劃分塊數(shù)目p和邊的數(shù)目e確定,以便選取v個頂點中度值較大的頂點為端點構(gòu)建路徑,降低圖數(shù)據(jù)劃分的重復(fù)率。本發(fā)明實施例通過將度值較大的頂點作為路徑的端點,可以降低圖數(shù)據(jù)劃分中的重復(fù)率。本發(fā)明實施例以路徑為單元進行圖規(guī)??s減,而降低了內(nèi)存開銷,可以處理大規(guī)模的圖數(shù)據(jù)。同時,可以保持路徑的完整性,使得該方法所應(yīng)用的圖數(shù)據(jù)處理系統(tǒng)的運行性能更好。s103,根據(jù)所述v個頂點、e條邊以及m個頂點,確定t條路徑。所述t條路徑中每條路徑由v個頂點中的鄰接頂點和e條邊中的鄰接邊組成,每條路徑包括m個頂點中的一個頂點,且每條路徑的一個端點為所述m個頂點中的一個頂點,所述t條路徑中兩條路徑之間最多共用一個端點。所述路徑為所述圖數(shù)據(jù)的第一子集,包括多個頂點和多條邊。在一個可選的實施例中,選取所述m個頂點中頂點a,沿第一方向遍歷,若其鄰接點不屬于t條路徑中的一條路徑,且其鄰接點不屬于m個頂點中的頂點,則沿其鄰接點繼續(xù)向第一方向遍歷,直至遍歷到所述m個頂點中的頂點b,由頂點a和頂點b為兩個端點遍歷確定的路徑為遍歷路徑,所述第一方向為沿出度的方向或入度的方向。在第一頂點處分裂所述遍歷路徑,得到以所述頂點a和所述第一頂點為兩個端點的第一子路徑,和以所述頂點b和所述第一頂點為兩個端點的第二子路徑,所述第一頂點為所述遍歷路徑包括的頂點中度值最小的頂點。根據(jù)所述第一子路徑和所述第二子路徑,確定t條路徑中的兩條路徑??梢岳斫獾氖?,一個頂點的鄰接點指的是與該頂點之間共有一條邊的頂點。需要說明的是,以度值較大的頂點a和頂點b構(gòu)建路徑后,在該路徑中度值最小的頂點處斷開,由于該頂點的度值較小,因此對該頂點復(fù)制的重復(fù)率將會較低。本發(fā)明實施例在構(gòu)建路徑時,考慮在度值較小的頂點處分裂,可以大大降低圖數(shù)據(jù)劃分的重復(fù)率,避免了在度值較大的頂?shù)滋幏至褧r引起的較大重復(fù)率的情況。在一個可選的實施例中,選取所述m個頂點中頂點c,沿所述第一方向遍歷,若其鄰接點不屬于t條路徑中的路徑,且其鄰接點不屬于m個頂點中的頂點,則沿其鄰接點繼續(xù)向第一方向遍歷,直至遍歷到第二頂點,所述第二頂點為歸屬于t條路徑中的一條路徑的頂點。根據(jù)所述頂點c和所述第二頂點為兩個端點遍歷,確定t條路徑中的一條路徑。可以理解的是,上述t條路徑為以m個頂點中的一個頂點為一個端點的路徑集合。s104,將所述v個頂點中所述t條路徑不包括的頂點,歸屬到所述t條路徑,組成歸屬后的t條路徑,或者將其創(chuàng)建成n條路徑。在一個可選的實施例中,確定所述v個頂點的編號,并根據(jù)所述v個頂點的編號依次對每個頂點進行檢查,檢查每個頂點是否歸屬于所述t條路徑中的一條路徑。若其屬于所述t條路徑中的一條路徑,則檢查下一個頂點。若其不屬于所述t條路徑中的一條路徑,則遍歷其鄰接點是否屬于所述t條路徑中的一條路徑,若其鄰接點屬于所述t條路徑中的一條路徑,則將其歸屬到其鄰接點所屬的路徑。若其不屬于所述t條路徑中的一條路徑,則遍歷其鄰接點是否屬于所述t條路徑中的一條路徑,若其鄰接點不屬于所述t條路徑中的一條路徑,則設(shè)其為頂點d,沿出度和入度的方向遍歷其鄰接點,直至遍歷到頂點e和頂點f,頂點e和頂點f為兩個端點遍歷確定的路徑為所述n條路徑中的一條路徑,所述頂點e和頂點f的鄰接點分別屬于所述t條路徑中的兩條路徑。在一個可選的實施例中,若其至少一個鄰接點屬于所述t條路徑中的至少一條路徑,則確定其與其至少一個鄰接點歸屬的至少一個路徑中每條路徑的關(guān)聯(lián)邊總數(shù),其中,所述關(guān)聯(lián)邊為其與其至少一個鄰接點歸屬的至少一個路徑中每條路徑之間的邊;根據(jù)其與其至少一個鄰接點歸屬的至少一個路徑中每條路徑的關(guān)聯(lián)邊總數(shù),以及其至少一個鄰接點歸屬的至少一個路徑中每條路徑包括的邊的總數(shù),確定其與其至少一個鄰接點歸屬的至少一個路徑中每條路徑之間的均衡參數(shù),將其歸屬其至少一個鄰接點歸屬的至少一個路徑中到均衡參數(shù)值最大的路徑。在一個示例中,設(shè)待歸屬至所述t條路徑的頂點為頂點g,則頂點g與t條路徑中候選歸屬路徑x的均衡參數(shù)通過以下公式得到:其中,val表示頂點g與路徑x的均衡參數(shù),tmp[x]表示頂點g與路徑x的關(guān)聯(lián)邊總數(shù),pathweight[x]表示路徑x包括的邊的總數(shù)。具體地,若頂點g與路徑x1的關(guān)聯(lián)邊數(shù)目為2,路徑x1包括的邊的數(shù)目為10,若頂點g與路徑x1的關(guān)聯(lián)邊數(shù)目為5,路徑x2包括的邊的數(shù)目為12,則根據(jù)頂點g分別與路徑x1和路徑x2的均衡參數(shù)可知,將確定頂點g歸屬至均衡參數(shù)值較大的路徑x2。本發(fā)明實施例將頂點歸屬至某條路徑時,充分考慮了該頂點與路徑的均衡性,以提高圖數(shù)據(jù)劃分的均衡性。s105,根據(jù)所述m個頂點、t條路徑以及所述n條路徑,確定m個簇;所述簇為所述圖數(shù)據(jù)的第二子集,包括多條路徑。在一個可選的實施例中,將所述m個頂點中每個頂點歸屬的t條路徑中的路徑劃分到每個頂點的路徑集。根據(jù)所述n條路徑中每條路徑與m個頂點中每個頂點路徑集的關(guān)聯(lián)度,將其劃分到與其關(guān)聯(lián)度最大的路徑集,并更新其所在的路徑集,更新后的m個頂點的路徑集為m個簇。s106,根據(jù)所述m個簇之間的關(guān)聯(lián)度和預(yù)設(shè)劃分塊數(shù)目p,將所述圖數(shù)據(jù)的m個簇劃分為p個劃分塊。其中,所述第一子集和所述第二子集為所述圖數(shù)據(jù)的子集,所述關(guān)聯(lián)度由所述兩個子集之間邊的數(shù)目確定??梢岳斫獾氖牵粢粭l邊的兩個端點分別在兩個子集內(nèi),則可將該邊理解為這兩個子集之間的一條邊。在一個可選的實施例中,當(dāng)所述m個簇中簇z內(nèi)的邊數(shù)目小于e/p時,根據(jù)簇z與其鄰接簇的關(guān)聯(lián)度將簇z與其關(guān)聯(lián)度最大的簇y合并為簇x,當(dāng)所述簇x內(nèi)的邊數(shù)目不小于e/p時,簇x為所述p個劃分塊中的一個塊。當(dāng)所述簇x內(nèi)的邊數(shù)目還小于e/p時,繼續(xù)將簇x與其關(guān)聯(lián)度最大的簇合并,直至合并后的包括簇x的簇內(nèi)的邊數(shù)目不小于e/p。本發(fā)明實施例通過平均劃分塊中邊的數(shù)目,提高了圖數(shù)據(jù)劃分的均衡性。在一個可選的實施例中,當(dāng)劃分完p-1個劃分塊后,將未被劃分到所述p-1個劃分塊的簇,劃分為第p個劃分塊。本發(fā)明實施例通過在劃分完p-1個劃分塊后,將未被劃分到所述p-1個劃分塊的簇,劃分為第p個劃分塊,保證了整體圖數(shù)據(jù)劃分過程的完整性。圖2為本發(fā)明實施例提供的另一種基于簇的圖數(shù)據(jù)劃分方法流程示意圖,如圖2所示,該方法包括步驟s201至步驟s208。s201,處理鄰接矩陣格式的原始圖數(shù)據(jù),以行為單位存儲該圖,記為g。記錄頂點總數(shù)v,邊總數(shù)e,以及劃分塊數(shù)目p,同時記錄每個頂點的出度do和入度di。s202,根據(jù)g中每行的起始偏移地址,建立哈希表hashtable。s203,按行遍歷g,將圖中的邊反向存儲并排序,然后按行存儲該逆向圖,記為gr,并用hashtable記錄每行的起始偏移地址。其中,步驟s202和步驟s203中用hashtable存儲圖g或gr每行的起始偏移地址,以便快速查找圖g中指定頂點的鄰接點。s204,記d=do+di,表示一個頂點出度和入度的總和。采用堆排序?qū)旤c按照d的值進行降序排序,并標(biāo)記前10%的頂點,可設(shè)被標(biāo)記的頂點數(shù)目為m。另外,也可標(biāo)記前5%或其他范圍的頂點,可根據(jù)實際需要進行設(shè)定,本發(fā)明實施例將不對此做任何限定。s205,尋找并記錄以被標(biāo)記頂點作為端點的路徑,并將這些路徑在d最小的頂點處斷開,分裂為兩條路徑。s206,對于步驟s205中未遍歷到的頂點,根據(jù)其相鄰頂點是否歸屬于某條路徑,將這些頂點歸屬到現(xiàn)有路徑或者創(chuàng)建一條新路徑。s207,以在步驟s204中被標(biāo)記的頂點為中心,將其與周圍的路徑相結(jié)合構(gòu)成一個簇。具體可參照步驟s105中的記載,在此不做贅述。s208,根據(jù)簇之間的關(guān)聯(lián)度,歸并簇,構(gòu)成劃分塊。若簇內(nèi)的邊數(shù)目不小于e/p,則將該簇作為一個劃分塊。然后構(gòu)建下一個劃分塊。具體地,步驟s205-步驟s208的細化,可參照下述實施例中的介紹,在此不做贅述。圖3為本發(fā)明實施例提供的一種步驟s205的細化流程示意圖。如圖3所示,包括步驟s301至步驟s320。s301,開始尋找以被標(biāo)記頂點作為端點的路徑。s302,將步驟s204中標(biāo)記的頂點置于隊列q,創(chuàng)建兩個整形數(shù)組:vertextopath,以記錄每個頂點屬于哪條路徑,數(shù)組元素的值初始化為0,對于步驟s204中標(biāo)記的頂點,其值置為-1。pathweight,以記錄路徑中所有頂點出度do的總和。此外設(shè)置一個計數(shù)器k=1。需要說明的是,在vertextopath中值為-1的頂點,表示在步驟s204中被標(biāo)記的頂點。k表示路徑的序號。s303,若隊列q為空,執(zhí)行步驟s320,否則執(zhí)行步驟s304。s304,從q中出隊一個頂點s。s305,判斷s的鄰接點是否都被訪問過,若都被訪問過,執(zhí)行步驟s303,否則執(zhí)行步驟s306。其中,一個頂點被訪問過指的是該頂點已歸屬到某條路徑,當(dāng)該頂點歸屬到某條路徑時,該頂點在vertextopath中的值大于0。若該頂點在vertextopath中的值等于0,則說明該頂點未被訪問過。s306,選取一個未被訪問的鄰接點記為cur,創(chuàng)建一個臨時隊列tmpq,并將cur壓入隊列。創(chuàng)建兩個整形變量:minvertex,用于記錄路徑中d值最小的頂點;minval,值初始化為無窮大,記錄minvertex中對應(yīng)頂點的d值。其中,隊列tmpq用于臨時存放以頂點s為一個端點的路徑。s307,選取cur的一個鄰接點next。s308,判斷vertextopath[next]的值,若大于0,表示鄰接點next已被訪問過,則執(zhí)行步驟s309;若等于-1,表示鄰接點next為步驟s204中標(biāo)記的頂點,則執(zhí)行步驟s311;若等于0,表示鄰接點next未被訪問過,則執(zhí)行步驟s316。s309,依次出隊tmpq中所有元素q,令vertextopath[q]=k。可以理解的是,令vertextopath[q]=k表示將tmpq中的所有頂點歸屬到路徑k。s310,k=k+1,執(zhí)行步驟s305。可以理解的是,k=k+1表示繼續(xù)尋找下一條路徑。s311,判斷tmpq是否為空,若是,執(zhí)行步驟s310,否則執(zhí)行步驟s312。s312,從tmpq中出隊一個元素q。s313,判斷q是否等于minvertex,若是,執(zhí)行步驟s314,否則執(zhí)行步驟s315。s314,k=k+1。需要說明的是,步驟s312-步驟314,為執(zhí)行將以被標(biāo)記頂點作為端點的路徑在其d值最小的頂點處斷開,分裂為兩條路徑的過程。s315,令vertextopath[q]=k,pathweight[k]=pathweight[k]+do[q],執(zhí)行步驟s311。其中,pathweight[k]=pathweight[k]+do[q]表示將路徑k包括的每個頂點的出度相加。s316,判斷d[next]是否小于minval,若是,則執(zhí)行步驟s317,否則執(zhí)行步驟s318。s317,令minvertex=next,minval=d[next]。s318,將next壓入隊列tmpq。s319,令cur=next,執(zhí)行步驟s307。需要說明的是,步驟s316-步驟s319為執(zhí)行尋找并記錄以被標(biāo)記頂點作為端點的路徑,并標(biāo)記該路徑上d值最小的頂點的過程。s320,結(jié)束流程。圖4為本發(fā)明實施例提供的一種步驟s206的細化流程示意圖。如圖4所示,包括步驟s401至步驟s424。s401,開始尋找步驟s205中未遍歷到的頂點。s402,設(shè)置一個計數(shù)器i,并令i=0。其中,i表示當(dāng)前訪問頂點的序號。s403,判斷i是否小于v,若是執(zhí)行步驟s404,否則執(zhí)行步驟s424。s404,令i=i+1。s405,判斷vertextopath[i]是否等于0,若是執(zhí)行步驟s406,否則執(zhí)行步驟s403。其中,若vertextopath[i]等于0,則表示頂點i未歸屬于任何一條路徑。s406,創(chuàng)建一個臨時數(shù)組tmp,長度為k,所有元素值初始化為0,同時創(chuàng)建變量id=0,val=0,x=0。其中,tmp用于記錄頂點i與其候選歸屬路徑的關(guān)聯(lián)邊總數(shù),id表示頂點i將會歸屬到的路徑的序號,具體地,頂點i可能會歸屬到如圖1中所述的t條路徑,或如圖1中所述的n條路徑。x表示頂點i的候選歸屬路徑的序號。val表示頂點i與其候選歸屬路徑的均衡參數(shù)。該均衡參數(shù)根據(jù)頂點i與其候選歸屬路徑的關(guān)聯(lián)邊總數(shù)(tmp[x]),以及其候選歸屬路徑包括的邊總數(shù)(pathweight[x])確定。s407,判斷是否存在未被訪問的i的鄰接點,若有,執(zhí)行步驟s408,否則執(zhí)行步驟s411。s408,訪問一個之前未被訪問的i的鄰接點,記為j。s409,判斷vertextopath[j]是否大于0,若是,執(zhí)行步驟s410,否則執(zhí)行步驟s407。s410,令tmp[vertextopath[j]]=tmp[vertextopath[j]]+1,執(zhí)行步驟s407。具體地,tmp[vertextopath[j]]=tmp[vertextopath[j]]+1表示若頂點i的鄰接點j屬于某條路徑,則頂點i與j所在的路徑的關(guān)聯(lián)邊數(shù)加1。具體地,步驟s407-步驟s410用于記錄頂點i與路徑的關(guān)聯(lián)邊數(shù)目。s411,判斷x是否大于k,若是執(zhí)行步驟s418,否則執(zhí)行步驟s412。s412,令x=x+1。s413,判斷tmp[x]是否等于0,若是,執(zhí)行步驟s411,否則執(zhí)行步驟s414。s414,判斷id是否等于0,若是,執(zhí)行步驟s415,否則執(zhí)行步驟s416。s415,令id=x,val=tmp[x]/pathweight[x],執(zhí)行步驟s411。s416,判斷val是否大于tmp[x]/pathweight[x],若是,執(zhí)行步驟s417,否則執(zhí)行步驟s411。s417,令id=x,val=tmp[x]/pathweight[x],執(zhí)行步驟s411。需要說明的是,步驟s411-步驟s417為執(zhí)行尋找與頂點i之間均衡參數(shù)最大的路徑的過程。s418,判斷id是否等于0,若是執(zhí)行步驟s420,否則執(zhí)行步驟s419。s419,令vertextopath[i]=id,pathweight[id]=pathweight[id]+do[i],執(zhí)行步驟s403。可以理解的是,步驟s418-步驟s419為執(zhí)行將頂點i歸屬到與其均衡參數(shù)值最大的路徑,以及更新頂點i歸屬后的路徑的出度和的過程。s420,令vertextopath[i]=k,pathweight[k]=pathweight[k]+do[i]。其中,pathweight[k]=pathweight[k]+do[i]表示將頂點i歸屬到s421,判斷j的鄰接點中是否若存在頂點v,滿足vertextopath[v]等于0,若有,執(zhí)行步驟s422,否則執(zhí)行步驟s423。s422,令vertextopath[v]=k,pathweight[k]=pathweight[k]+do[v],j=v,執(zhí)行步驟s421。s423,令k=k+1,執(zhí)行步驟s403。具體地,步驟s420-步驟s423為執(zhí)行創(chuàng)建如圖1中提及的n條路徑的過程。s424,結(jié)束流程。相應(yīng)地,上述步驟s207可以具體包括以下步驟:s207-1,創(chuàng)建兩個數(shù)組:pathtocluster,用于保存路徑到簇的映射關(guān)系,長度為k,所有元素初始化為0。clusterweight:用于記錄簇中邊數(shù)目,長度為count,所有元素初始化為0。同時設(shè)置計數(shù)器c=1,并將步驟s204中標(biāo)記的頂點置于隊列q。s207-2,若隊列q為空,進入步驟s207-6。否則從q中出隊一個元素,記為s,并令vertextopath[s]=-c,clusterweight[c]=clusterweight[c]+pathweight[vertextopath[s]]。其中,vertextopath[s]=-c表示頂點s屬于序號為c的簇,clusterweight[c]用于記錄簇c的邊總數(shù)。s207-3,根據(jù)出邊和入邊依次遍歷s的所有鄰接點。全部鄰接點都被遍歷則進入步驟s207-5,否則遍歷下一個鄰接點,記為j。s207-4,將頂點j所在的路徑歸入當(dāng)前簇c,如果pathtocluster[vertextopath[j]]=0,令pathtocluster[vertextopath[j]]=c,以及clusterweight[c]=clusterweight[c]+pathweight[vertextopath[j]]。進入步驟s207-3。具體地,步驟s207-4用于執(zhí)行若頂點j所在的路徑不屬于任何簇,則將其歸入到簇c。s207-5,令c=c+1,執(zhí)行步驟s207-2。s207-6,設(shè)置計數(shù)器i=0。s207-7,如果i大于k,則執(zhí)行步驟s207-8。否則令i=i+1。s207-8,判斷pathtocluster[i]是否等于0,不等于0則執(zhí)行步驟s207-7s207-9,計算路徑i和與其相鄰的路徑之間的關(guān)聯(lián)度r。rij=n表示存在n條不重復(fù)的邊,這n條邊一端的頂點在路徑i中,另一端的頂點在路徑j(luò)中。具體地,通過計算,尋找一條路徑m,使得rim的值最大。然后令pathtocluster[i]=pathtocluster[m],clusterweight[pathtocluster[m]]=clusterweight[pathtocluster[m]]+pathweight[i],執(zhí)行步驟s207-7。具體地,步驟s207-9執(zhí)行將路徑i歸屬到路徑m所屬的簇,其中,路徑i與路徑m的關(guān)聯(lián)度最大。圖5為本發(fā)明實施例提供的一種步驟s208的細化流程示意圖。如圖5所示,包括步驟s501至步驟s522。s501,開始劃分簇。s502,定義兩個簇i和j之間的關(guān)聯(lián)度rij=n,其中rij=n表示簇i和簇j之間存在n條不重復(fù)的邊,這些邊的其中一個端點在i內(nèi),另一個端點在j內(nèi)。創(chuàng)建數(shù)組ctp,用以記錄每個簇分別屬于哪個劃分子集,所有元素初始化為0。創(chuàng)建變量pid,初始化為1。創(chuàng)建變量weight,初始化為0。設(shè)置計數(shù)器i=0。其中,pid用于記錄劃分塊的序號。weight用于記錄劃分塊包括的邊的數(shù)目。s503,判斷ctp[i]是否等于0,若是,執(zhí)行步驟s505,否則執(zhí)行步驟s504。s504,令i=i+1。s505,令ctp[i]=pid,weight=weight+clusterweight[i]。其中,令ctp[i]=pid,weight=weight+clusterweight[i]表示將簇i歸屬到劃分塊pid,并將劃分塊pid的邊數(shù)weight進行更新。s506,搜索簇j,使得j滿足rij的值最大。令ctp[j]=pid,weight=weight+clusterweight[j]。s507,判斷weight是否大于e/p,若是,執(zhí)行步驟s509,否則執(zhí)行步驟s508。s508,將簇j歸并到簇i,執(zhí)行步驟s506。s509,pid=pid+1步驟s503-步驟s509為執(zhí)行尋找一個劃分塊的過程。s510,判斷pid是否等于預(yù)期劃分塊數(shù)目p,若是,執(zhí)行步驟s511,否則執(zhí)行步驟s503。具體地,若pid=p,則表示開始劃分最后一個劃分塊,將不再執(zhí)行步驟s503-步驟s509的循環(huán),而開始執(zhí)行步驟s511。s511,設(shè)置計數(shù)器u=0。s512,判斷u是否大于c,若是,執(zhí)行步驟s516,否則執(zhí)行步驟s513。其中,c表示簇的數(shù)目。s513,判斷ctp[u]是否等于0,若是,執(zhí)行步驟s514,否則執(zhí)行步驟s515。s514,令ctp[u]=pid。s515,令u=u+1,執(zhí)行步驟s512。具體地,步驟s511-步驟s515執(zhí)行將剩余未歸屬于任何劃分塊的簇歸屬至第p個劃分塊。s516,創(chuàng)建數(shù)組result,用以保存最后結(jié)果。重置計數(shù)器u=0。s517,判斷u是否大于v,若是,執(zhí)行步驟s522,否則執(zhí)行步驟s518。s518,令u=u+1。s519,判斷vertextopath[u]是否大于0,若是執(zhí)行步驟s520,否則執(zhí)行步驟s521。s520,令result[u]=ctp[pathtocluster[vertextopath[u]]],執(zhí)行步驟s517。s521,令result[u]=ctp[-vertextopath[u]],執(zhí)行步驟s517。步驟s516-步驟s521執(zhí)行記錄每個頂點具體屬于哪個劃分塊的過程。s522,結(jié)束流程。需要說明的是,上述實施例中,計數(shù)器i、j、c、x以及u等參數(shù)可能會重復(fù)使用,但本領(lǐng)域技術(shù)人員可知,在計算機處理領(lǐng)域,不同程序可設(shè)置相同的計數(shù)或循環(huán)參數(shù),不同程序代碼之間并不相互影響。專業(yè)人員應(yīng)該還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本申請的范圍。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分步驟是可以通過程序來指令處理器完成,所述的程序可以存儲于計算機可讀存儲介質(zhì)中,所述的存儲介質(zhì)是非短暫性(non-transitory)介質(zhì),例如隨機存取存儲器,只讀存儲器,快閃存儲器,硬盤,固態(tài)硬盤,磁帶(magnetictape),軟盤(floppydisk),光盤(opticaldisc)及其任意組合。以上,僅為本申請較佳的具體實施方式,但本申請的保護范圍并不局限于此,任何熟悉本
技術(shù)領(lǐng)域
:的技術(shù)人員在本申請揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本申請的保護范圍之內(nèi)。因此,本申請的保護范圍應(yīng)該以權(quán)利要求的保護范圍為準(zhǔn)。當(dāng)前第1頁12當(dāng)前第1頁12
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
蕉岭县| 昆山市| 杨浦区| 会东县| 华坪县| 永泰县| 洛隆县| 怀宁县| 华蓥市| 景东| 宁阳县| 桂阳县| 武威市| 陈巴尔虎旗| 荔波县| 尉犁县| 石楼县| 太保市| 琼中| 台北市| 涞源县| 澄江县| 崇文区| 安平县| 田阳县| 昆山市| 汉川市| 新和县| 长泰县| 贡觉县| 吴江市| 怀远县| 万年县| 清流县| 舟山市| 浑源县| 梁平县| 潮安县| 纳雍县| 奉节县| 连平县|