亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于并行環(huán)路檢測的虛開增值稅專用發(fā)票檢測方法與流程

文檔序號:12804596閱讀:282來源:國知局
一種基于并行環(huán)路檢測的虛開增值稅專用發(fā)票檢測方法與流程

本發(fā)明屬于計算機(jī)技術(shù)領(lǐng)域,具體涉及一種基于并行環(huán)路檢測的虛開增值稅專用發(fā)票檢測方法。



背景技術(shù):

在公司交易間,在開具增值稅發(fā)票后,會有相對應(yīng)的資金交易,以表明該筆交易是真實(shí)存在的,開具的稅票是對應(yīng)了真實(shí)的業(yè)務(wù)往來;但是實(shí)際上該筆資金,會經(jīng)過多個賬號后,重新回到起點(diǎn)賬戶,并沒有實(shí)際的業(yè)務(wù)往來,即交易是虛假的,這種行為即虛開增值稅專用發(fā)票。

增值稅是我國1994年開始全面實(shí)施的新稅種,它對于減少稅收環(huán)節(jié),合理征稅,促進(jìn)稅收具有十分重要的意義。而虛開增值稅專用發(fā)票行為違反了發(fā)票管理制度,同時虛開增值稅專用發(fā)票可以抵扣大量稅款,造成國家稅款的大量流失,也嚴(yán)重地破壞了社會主義經(jīng)濟(jì)秩序。

由于近年來,虛開增值稅專用發(fā)票的犯罪活動十分猖獗,審判實(shí)踐中,對虛開增值稅專用發(fā)票罪的認(rèn)定存在諸多問題。同時,以往通過人工手動查找虛開增值稅專用發(fā)票也是為虛開增值稅專用發(fā)票罪的認(rèn)定帶來了很大的困難,費(fèi)時費(fèi)力。

從上述的描述中,可以發(fā)現(xiàn),虛開增值稅專用發(fā)票行為中資金會經(jīng)過多個賬號后重新回到起點(diǎn)賬戶,所以將賬號抽象為點(diǎn),賬戶間的資金流轉(zhuǎn)行為抽象為邊,虛開增值稅專用發(fā)票行為的資金流轉(zhuǎn)會形成一個環(huán)路,所以通過環(huán)路檢測的方式可以適應(yīng)虛開增值稅專用發(fā)票的自動查找。但是,在銀行開戶的企業(yè)數(shù)目十分巨大,也就帶來了大量的原始數(shù)據(jù),而傳統(tǒng)的環(huán)路檢測方法的計算效率較為低下,當(dāng)計算數(shù)據(jù)過大時耗時會十分長。而本專利提出的并行環(huán)路檢測方法在傳統(tǒng)的環(huán)路檢測的基礎(chǔ)上在效率上進(jìn)行了改進(jìn),可以較好地適應(yīng)大數(shù)據(jù)的計算。

近幾年,隨著計算機(jī)行業(yè)的蓬勃發(fā)展,計算機(jī)技術(shù)取得了巨大的進(jìn)步與突破,同時,隨著信息數(shù)字化的發(fā)展,數(shù)據(jù)的爆炸式增長也是對傳統(tǒng)的算法帶來了極大的挑戰(zhàn)。一些對于數(shù)據(jù)量較小時計算能力效果較好的傳統(tǒng)算法,可能就無法適應(yīng)如今大數(shù)據(jù)時代的要求。

就虛開增值稅這個問題而言,檢測遇到的主要問題就是在于時間上,也可以說是算法的計算效率。傳統(tǒng)的檢測算法一般采用深度優(yōu)先遍歷的方式遍歷圖中所有的點(diǎn)來探測是否存在環(huán)路,以深度優(yōu)先遍歷o(n^2)的時間復(fù)雜度而言,當(dāng)數(shù)據(jù)量比較小時,還可以適應(yīng)當(dāng)前的計算,而當(dāng)數(shù)據(jù)量增長到一定地步時,它的效率會急劇下降,在一些對計算效率要求較高的環(huán)境中,可能就無法適應(yīng)。而要對虛開增值稅專用發(fā)票行為進(jìn)行檢測,就要對銀行中所有開戶的企業(yè)節(jié)點(diǎn)進(jìn)行遍歷,若是使用傳統(tǒng)深度優(yōu)先遍歷的環(huán)路檢測方法而言,肯定是無法達(dá)到需要的效率。

在以往的虛開增值稅專用發(fā)票檢測中,往往采用人工手動比對資金流轉(zhuǎn)進(jìn)行查找,這個過程往往費(fèi)時費(fèi)力,而且人工手動的存在,無法避免可能存在一些漏洞。



技術(shù)實(shí)現(xiàn)要素:

為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明的目的是提供一種基于并行環(huán)路檢測的虛開增值稅專用發(fā)票檢測方法,通過環(huán)路檢測的方法來進(jìn)行虛開增值稅專用發(fā)票檢測,并且對環(huán)路檢測進(jìn)行了改進(jìn),通過分布式并行計算方法,將計算任務(wù)分配給分布式集群中的多臺計算機(jī)中,大大提高了計算效率。

為了實(shí)現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案是:

一種基于并行環(huán)路檢測的虛開增值稅專用發(fā)票檢測方法,包括以下步驟:

1)構(gòu)建數(shù)據(jù)結(jié)構(gòu)來對圖數(shù)據(jù)進(jìn)行存儲;

2)采用了bsp(bulksynchronousparallel,總體同步并行計算)模型思想作為算法的主體;

3)數(shù)據(jù)存儲單元會將圖數(shù)據(jù)分布式的保存在各個計算節(jié)點(diǎn)中,在每個超級步中,集群中的各個進(jìn)程,也就是processors會提取數(shù)據(jù)存儲單元中的數(shù)據(jù)來進(jìn)行計算;每一個超級步中包含計算主要可以分成3各部分,分別為vprog(點(diǎn)初始化),sendmsg(分發(fā)信息),mergemsg(結(jié)合信息);所述的vprog(點(diǎn)初始化)表示將設(shè)定的初始化程序運(yùn)行在每一個頂點(diǎn)中,負(fù)責(zé)接收進(jìn)來的信息,計算新的頂點(diǎn)信息,并將滿足條件的點(diǎn)進(jìn)行激活;所述的sendmsg(分發(fā)信息)是指被激活的點(diǎn)會向它的下一個節(jié)點(diǎn)進(jìn)行信息傳遞,由于分布式計算,sendmsg傳來的信息往往會有多條;所述的mergemsg(結(jié)合信息)則負(fù)責(zé)將這些多條信息安裝一定的規(guī)則整合到一起,再交給vprog;

4)vprog(點(diǎn)初始化)負(fù)責(zé)在每個超級步的初始階段,對每個頂點(diǎn)的信息進(jìn)行初始化以及更新;

5)sendmsg(分發(fā)信息)模塊負(fù)責(zé)生成路由信息同時檢測環(huán)路,對各類的情況進(jìn)行分析設(shè)計,頂點(diǎn)的數(shù)據(jù)結(jié)構(gòu)定義為(intvertexid,(stringroute,intround,intflag)),同時已知flag為點(diǎn)屬性中保存標(biāo)志位信息,且數(shù)值0表示該點(diǎn)從來沒有被激活過,1表示該點(diǎn)被激活,2表示改點(diǎn)曾經(jīng)被激活過但現(xiàn)在處于未激活狀態(tài),所以在sendmsg階段,就需要通過標(biāo)志位信息調(diào)用不同的send方法;在進(jìn)行sendmsg(分發(fā)信息)時,源節(jié)點(diǎn)一定處于激活狀態(tài);

6)mergemsg(結(jié)合信息)是這個算法主體的最后一個部分,mergemsg(結(jié)合信息)會將sendmsg暫存的信息以設(shè)定的方法,將信息結(jié)合到一起,并賦給newmsg,mergemsg模塊主要分成2類情況來進(jìn)行分析;

a更新節(jié)點(diǎn)的節(jié)點(diǎn)信息都是來自上一層節(jié)點(diǎn);

b更新節(jié)點(diǎn)的信息除了來自上層節(jié)點(diǎn)外,自身也會傳來“過時”的節(jié)點(diǎn)信息,這種情況的產(chǎn)生較為特別,即這個節(jié)點(diǎn)在上個超級步中也是處于激活狀態(tài),它的信息往下一層傳遞后,它自身要消去激活狀態(tài),所以,在迭代器中,也會保存它自身“過時”的信息。

進(jìn)一步,構(gòu)建數(shù)據(jù)結(jié)構(gòu)來對圖數(shù)據(jù)進(jìn)行存儲,使用vertex來存儲點(diǎn)信息,屬性包括id和點(diǎn)屬性,這其中,用戶可以自定義點(diǎn)屬性包含的信息,同時,使用edge來存儲邊信息,屬性包括三個部分,源頂點(diǎn)的id,目標(biāo)頂點(diǎn)的id,邊屬性,同樣邊屬性的內(nèi)容可由用戶進(jìn)行設(shè)計,在算法的實(shí)現(xiàn)過程中,edge的邊屬性只需要保存點(diǎn)的連通方向,所以在邊屬性中保存了點(diǎn)之間的距離,用(intsourceid,intdestinationid,intdistance)表示,sourecid表示為源頂點(diǎn)的id,destinationid為目標(biāo)頂點(diǎn)的id,而distance則表示2個頂點(diǎn)之間的距離,具體表示從源頂點(diǎn)指向目標(biāo)頂點(diǎn),且距離為distance值,而vertex中所需要保存的信息會相對較多,主要將各個點(diǎn)的路由,標(biāo)志位,超級步這三類信息保存在點(diǎn)屬性中,具體的數(shù)據(jù)結(jié)構(gòu)使用(intvertexid,(stringroute,intround,intflag)),vertexid表示點(diǎn)的id信息,route表示點(diǎn)的當(dāng)前超級步更新的路由,round表示當(dāng)前進(jìn)入第幾個超級步,flag值為標(biāo)志位,其中,0表示該點(diǎn)沒有被激活,1表示該點(diǎn)被激活,2表示改點(diǎn)曾經(jīng)被激活過,但現(xiàn)在處于未激活狀態(tài)。

進(jìn)一步,bsp模型可以由以下幾個方面來描述:

a、processors,指的是集群中的可以進(jìn)行并行計算的進(jìn)程,一個集群中往往會包含多個processors計算進(jìn)程;

b、localcomputation,指單個processors的計算,即每個processors進(jìn)行的本地計算;

c、communication,指各個processors間的通訊,各個并行計算的進(jìn)程通過信息交互來實(shí)現(xiàn)同步;

d、superstep,叫做超級步,指bsp的一次計算迭代,一個算法往往由許多的超級步構(gòu)成,一個超級步相當(dāng)于一個集群一次總體的分布式計算;

e、barriersynchronization,叫做障礙同步或者柵欄同步,每一次同步就是一個超步的完成以及下一個超步的開始;

f、程序什么時候結(jié)束,一般由程序的主節(jié)點(diǎn)master,master在若干個超步后,發(fā)現(xiàn)所有的進(jìn)程的計算都已經(jīng)結(jié)束且再沒有新的計算任務(wù),即通知所有的processors結(jié)束并退出任務(wù)。

進(jìn)一步,vprog負(fù)責(zé)在每個超級步的初始階段,對點(diǎn)信息進(jìn)行初始化以及更新,分為2個方面:

a、當(dāng)?shù)谝淮芜\(yùn)行該算法時,圖信息的初始化;

b、該算法以及運(yùn)行了若干個超級步后,圖信息的更新。

進(jìn)一步,在進(jìn)行sendmsg時,源節(jié)點(diǎn)一定處于激活狀態(tài),由flag的狀態(tài)分類可知,flag可以分成以下3種情況:

a、situation1對應(yīng)它的源節(jié)點(diǎn)處于激活狀態(tài),而它的目標(biāo)節(jié)點(diǎn)處于非激活狀態(tài),且從未被訪問過。所以取源節(jié)點(diǎn)中的route信息,更新目標(biāo)節(jié)點(diǎn)的route信息,源節(jié)點(diǎn)的route信息可能保存不只一條路徑,即當(dāng)源節(jié)點(diǎn)的上層節(jié)點(diǎn)有多個節(jié)點(diǎn)同時指向它時或者它的上層節(jié)點(diǎn)內(nèi)本身就保存了多條路由時,這個路由情況就會繼承下來,它也會保存多條路由,這種情況的產(chǎn)生會在mergemsg模塊進(jìn)行解釋,所以每一條路由信息都要更新到目標(biāo)節(jié)點(diǎn)中,在更新完路由信息后,還需將目標(biāo)節(jié)點(diǎn)激活,并在目標(biāo)節(jié)點(diǎn)的round中記錄當(dāng)前超級步階段,再把源節(jié)點(diǎn)轉(zhuǎn)換為非激活狀態(tài),除此之外,sendmsg模塊會將所有的信息先暫存在迭代器iterator中,信息的整合將在mergemsg模塊進(jìn)行;

b、situation2對應(yīng)它的源節(jié)點(diǎn)處于激活狀態(tài),目標(biāo)節(jié)點(diǎn)處于非激活狀態(tài),但目標(biāo)節(jié)點(diǎn)曾經(jīng)被訪問過,在這種情況下,除了像situation1一樣需要將路由情況更新到目標(biāo)節(jié)點(diǎn)中外,還需要判斷是否以及形成環(huán)路,假如沒有形成環(huán)路,則不需要進(jìn)行特別的處理;假如形成了環(huán)路,還要分成3種情況進(jìn)行分析,第1種就是源節(jié)點(diǎn)的route里只保存了一條路徑,那么假如這條路徑與目標(biāo)節(jié)點(diǎn)形成環(huán)路,那么將環(huán)路輸出,且不需要再對目標(biāo)節(jié)點(diǎn)進(jìn)行激活;第2種情況就是源節(jié)點(diǎn)的route里保存了多條路徑,且至少有一條路徑與目標(biāo)節(jié)點(diǎn)形成環(huán),但沒有全部路徑都形成環(huán)路,那么將形成環(huán)路的節(jié)點(diǎn)輸出,在更新目標(biāo)節(jié)點(diǎn)的route時,去掉以及形成環(huán)路的路徑,保存還沒有形成環(huán)路的路徑,再更新目標(biāo)節(jié)點(diǎn)的round值并激活目標(biāo)節(jié)點(diǎn);第3種情況與第1中情況類似,源節(jié)點(diǎn)的route里保存了多條路徑,但每條路徑都與目標(biāo)節(jié)點(diǎn)構(gòu)成了環(huán)路,那么也將形成環(huán)路的路徑輸出,也不必對目標(biāo)節(jié)點(diǎn)進(jìn)行激活,最后,再將源節(jié)點(diǎn)的激活狀態(tài)轉(zhuǎn)化成非激活狀態(tài),與situation1,這些輸出會都先暫存在迭代器iterator中;

c、situation3,的路由情況為源節(jié)點(diǎn)處于激活狀態(tài),而其目標(biāo)節(jié)點(diǎn)也處于激活狀態(tài),目標(biāo)節(jié)點(diǎn)是否處于激活狀態(tài)對sendmsg并不會造成影響,它提供的有用的信息就是它的目標(biāo)節(jié)點(diǎn)曾經(jīng)被訪問過,也就是situation2這種情況,sendmsg更新的信息是先暫存在迭代器iterator中,直到mergemsg模塊,再將這個超級步中所有的運(yùn)行結(jié)果更新。

更進(jìn)一步,對于第一種情況,需要考慮的節(jié)點(diǎn)的前驅(qū),即上層有多個的情況,也就是這個原因,造成了上文sendmsg模塊中situation1的節(jié)點(diǎn)的route中保存了多條路徑,需要將他們所有的route信息都要結(jié)合到一起形成newmsg,同時,使用“;”來進(jìn)行分隔多條路徑,對于第二種情況,使用到點(diǎn)屬性中的round屬性值,也就是通過round值來區(qū)分是第一類情況還是第二類情況。round值記錄了改點(diǎn)被激活時的超級步的階段,假如取出2個迭代器中的round相同,則表明這是第一種情況,而假如取出2個迭代器中的round有大小只差,則表明round值較小的是“過時”的,即可去掉,保存round值較大的值即可。

本發(fā)明的有益效果是:

1)創(chuàng)新性地使用了環(huán)路檢測的方式來解決查找虛開增值稅專用發(fā)票的問題;

2)創(chuàng)新性地在環(huán)路檢測過程中引入了并發(fā),可以將分布在眾多計算機(jī)中的大量數(shù)據(jù)資源和處理器資源整合在一起協(xié)同工作,具有很好的現(xiàn)實(shí)意義和使用價值。在算法的主體設(shè)計中創(chuàng)新性地采用了bsp(bulksynchronousparallel,總體同步并行計算)模型思想。bsp是一種良好的具有可擴(kuò)展并行性能軟件開發(fā)的理論模型,為現(xiàn)在和未來可能出現(xiàn)的各種并行體系結(jié)構(gòu)提供了一種獨(dú)立具體的體系結(jié)構(gòu);

3)通過自動化的方式可以大量地減少人力消耗;

4)自動化的方式可以節(jié)省大量的時間;

5)計算機(jī)計算可以完全達(dá)到公正公平;

所以可見,本專利的目的還是在于通過計算機(jī)自動化檢測的方式,更好地輔助虛開增值稅專用發(fā)票的檢測,嚴(yán)厲打擊虛開增值稅專用發(fā)票這種違法行為。

附圖說明

圖1為bsp模型結(jié)構(gòu)圖;

圖2為計算流程示意圖;

圖3為算法流程圖;

圖4為vprog偽代碼示意圖;

圖5為situation1偽代碼示意圖;

圖6為situation2偽代碼示意圖;

圖7為situation3偽代碼示意圖;

圖8為mergemsg模塊偽代碼示意圖。

具體實(shí)施方式

以下結(jié)合附圖對本發(fā)明進(jìn)一步敘述。

一種基于并行環(huán)路檢測的虛開增值稅專用發(fā)票檢測方法,包括以下步驟:

1)構(gòu)建數(shù)據(jù)結(jié)構(gòu)來對圖數(shù)據(jù)進(jìn)行存儲,如圖1所示;

2)采用了bsp(bulksynchronousparallel,總體同步并行計算)模型思想作為算法的主體;

3)數(shù)據(jù)存儲單元會將圖數(shù)據(jù)分布式的保存在各個計算節(jié)點(diǎn)中,在每個超級步中,集群中的各個進(jìn)程,也就是processors會提取數(shù)據(jù)存儲單元中的數(shù)據(jù)來進(jìn)行計算;每一個超級步中包含計算主要可以分成3各部分,分別為vprog(點(diǎn)初始化),sendmsg(分發(fā)信息),mergemsg(結(jié)合信息);所述的vprog(點(diǎn)初始化)表示將設(shè)定的初始化程序運(yùn)行在每一個頂點(diǎn)中,負(fù)責(zé)接收進(jìn)來的信息,計算新的頂點(diǎn)信息,并將滿足條件的點(diǎn)進(jìn)行激活;所述的sendmsg(分發(fā)信息)是指被激活的點(diǎn)會向它的下一個節(jié)點(diǎn)進(jìn)行信息傳遞,由于分布式計算,sendmsg傳來的信息往往會有多條;所述的mergemsg(結(jié)合信息)則負(fù)責(zé)將這些多條信息安裝一定的規(guī)則整合到一起,再交給vprog,如圖2所示;

在第一個超級步中,1號節(jié)點(diǎn)通過vprog被激活,在圖中,藍(lán)色表示該點(diǎn)被激活,白色表示改點(diǎn)處于非激活狀態(tài)。1號節(jié)點(diǎn)則通過sendmsg將自己的路由信息傳給它的目標(biāo)節(jié)點(diǎn),即2,4,5節(jié)點(diǎn)。2,4,5號在接收到1號節(jié)點(diǎn)傳來的路由信息后,通過mergemsg將更新信息。再在下一個超級步中,vprog將更新的信息更新到2,4,5號節(jié)點(diǎn)中,同時2,4,5號節(jié)點(diǎn)被激活,按同樣的方式向目標(biāo)節(jié)點(diǎn)傳遞節(jié)點(diǎn)。至到圖中所有的節(jié)點(diǎn)都處于非激活狀態(tài),算法結(jié)束。所以,這個算法的流程如圖3所示;

4)vprog(點(diǎn)初始化)負(fù)責(zé)在每個超級步的初始階段,對每個頂點(diǎn)的信息進(jìn)行初始化以及更新;

5)sendmsg(分發(fā)信息)模塊負(fù)責(zé)生成路由信息同時檢測環(huán)路,對各類的情況進(jìn)行分析設(shè)計,頂點(diǎn)的數(shù)據(jù)結(jié)構(gòu)定義為(intvertexid,(stringroute,intround,intflag)),同時已知flag為點(diǎn)屬性中保存標(biāo)志位信息,且數(shù)值0表示該點(diǎn)從來沒有被激活過,1表示該點(diǎn)被激活,2表示改點(diǎn)曾經(jīng)被激活過但現(xiàn)在處于未激活狀態(tài),所以在sendmsg階段,就需要通過標(biāo)志位信息調(diào)用不同的send方法;在進(jìn)行sendmsg(分發(fā)信息)時,源節(jié)點(diǎn)一定處于激活狀態(tài);

6)mergemsg(結(jié)合信息)是這個算法主體的最后一個部分,mergemsg(結(jié)合信息)會將sendmsg暫存的信息以設(shè)定的方法,將信息結(jié)合到一起,并賦給newmsg,mergemsg模塊主要分成2類情況來進(jìn)行分析;

a更新節(jié)點(diǎn)的節(jié)點(diǎn)信息都是來自上一層節(jié)點(diǎn);

b更新節(jié)點(diǎn)的信息除了來自上層節(jié)點(diǎn)外,自身也會傳來“過時”的節(jié)點(diǎn)信息,這種情況的產(chǎn)生較為特別,即這個節(jié)點(diǎn)在上個超級步中也是處于激活狀態(tài),它的信息往下一層傳遞后,它自身要消去激活狀態(tài),所以,在迭代器中,也會保存它自身“過時”的信息。

進(jìn)一步,構(gòu)建數(shù)據(jù)結(jié)構(gòu)來對圖數(shù)據(jù)進(jìn)行存儲,使用vertex來存儲點(diǎn)信息,屬性包括id和點(diǎn)屬性,這其中,用戶可以自定義點(diǎn)屬性包含的信息,同時,使用edge來存儲邊信息,屬性包括三個部分,源頂點(diǎn)的id,目標(biāo)頂點(diǎn)的id,邊屬性,同樣邊屬性的內(nèi)容可由用戶進(jìn)行設(shè)計,在算法的實(shí)現(xiàn)過程中,edge的邊屬性只需要保存點(diǎn)的連通方向,所以在邊屬性中保存了點(diǎn)之間的距離,用(intsourceid,intdestinationid,intdistance)表示,sourecid表示為源頂點(diǎn)的id,destinationid為目標(biāo)頂點(diǎn)的id,而distance則表示2個頂點(diǎn)之間的距離,具體表示從源頂點(diǎn)指向目標(biāo)頂點(diǎn),且距離為distance值,而vertex中所需要保存的信息會相對較多,主要將各個點(diǎn)的路由,標(biāo)志位,超級步這三類信息保存在點(diǎn)屬性中,具體的數(shù)據(jù)結(jié)構(gòu)使用(intvertexid,(stringroute,intround,intflag)),vertexid表示點(diǎn)的id信息,route表示點(diǎn)的當(dāng)前超級步更新的路由,round表示當(dāng)前進(jìn)入第幾個超級步,flag值為標(biāo)志位,其中,0表示該點(diǎn)沒有被激活,1表示該點(diǎn)被激活,2表示改點(diǎn)曾經(jīng)被激活過,但現(xiàn)在處于未激活狀態(tài)。

進(jìn)一步,bsp模型可以由以下幾個方面來描述:

a、processors,指的是集群中的可以進(jìn)行并行計算的進(jìn)程,一個集群中往往會包含多個processors計算進(jìn)程;

b、localcomputation,指單個processors的計算,即每個processors進(jìn)行的本地計算;

c、communication,指各個processors間的通訊,各個并行計算的進(jìn)程通過信息交互來實(shí)現(xiàn)同步;

d、superstep,叫做超級步,指bsp的一次計算迭代,一個算法往往由許多的超級步構(gòu)成,一個超級步相當(dāng)于一個集群一次總體的分布式計算;

e、barriersynchronization,叫做障礙同步或者柵欄同步,每一次同步就是一個超步的完成以及下一個超步的開始;

f、程序什么時候結(jié)束,一般由程序的主節(jié)點(diǎn)master,master在若干個超步后,發(fā)現(xiàn)所有的進(jìn)程的計算都已經(jīng)結(jié)束且再沒有新的計算任務(wù),即通知所有的processors結(jié)束并退出任務(wù)。

進(jìn)一步,vprog負(fù)責(zé)在每個超級步的初始階段,對點(diǎn)信息進(jìn)行初始化以及更新,所以,其偽代碼如圖4所示,這其中,msg表示節(jié)點(diǎn)本身保存的信息,newmsg表示節(jié)點(diǎn)更新的信息,由mergemsg整合生成,分為2個方面:

a、當(dāng)?shù)谝淮芜\(yùn)行該算法時,圖信息的初始化;

b、該算法以及運(yùn)行了若干個超級步后,圖信息的更新。

進(jìn)一步,在進(jìn)行sendmsg時,源節(jié)點(diǎn)一定處于激活狀態(tài),由flag的狀態(tài)分類可知,flag可以分成以下3種情況:

a、situation1對應(yīng)它的源節(jié)點(diǎn)處于激活狀態(tài),而它的目標(biāo)節(jié)點(diǎn)處于非激活狀態(tài),且從未被訪問過。所以取源節(jié)點(diǎn)中的route信息,更新目標(biāo)節(jié)點(diǎn)的route信息,源節(jié)點(diǎn)的route信息可能保存不只一條路徑,即當(dāng)源節(jié)點(diǎn)的上層節(jié)點(diǎn)有多個節(jié)點(diǎn)同時指向它時或者它的上層節(jié)點(diǎn)內(nèi)本身就保存了多條路由時,這個路由情況就會繼承下來,它也會保存多條路由,這種情況的產(chǎn)生會在mergemsg模塊進(jìn)行解釋,所以每一條路由信息都要更新到目標(biāo)節(jié)點(diǎn)中,在更新完路由信息后,還需將目標(biāo)節(jié)點(diǎn)激活,并在目標(biāo)節(jié)點(diǎn)的round中記錄當(dāng)前超級步階段,再把源節(jié)點(diǎn)轉(zhuǎn)換為非激活狀態(tài),除此之外,sendmsg模塊會將所有的信息先暫存在迭代器iterator中,信息的整合將在mergemsg模塊進(jìn)行;這種情況下的偽代碼如圖5所示;

b、situation2對應(yīng)它的源節(jié)點(diǎn)處于激活狀態(tài),目標(biāo)節(jié)點(diǎn)處于非激活狀態(tài),但目標(biāo)節(jié)點(diǎn)曾經(jīng)被訪問過,在這種情況下,除了像situation1一樣需要將路由情況更新到目標(biāo)節(jié)點(diǎn)中外,還需要判斷是否以及形成環(huán)路,假如沒有形成環(huán)路,則不需要進(jìn)行特別的處理;假如形成了環(huán)路,還要分成3種情況進(jìn)行分析,第1種就是源節(jié)點(diǎn)的route里只保存了一條路徑,那么假如這條路徑與目標(biāo)節(jié)點(diǎn)形成環(huán)路,那么將環(huán)路輸出,且不需要再對目標(biāo)節(jié)點(diǎn)進(jìn)行激活;第2種情況就是源節(jié)點(diǎn)的route里保存了多條路徑,且至少有一條路徑與目標(biāo)節(jié)點(diǎn)形成環(huán),但沒有全部路徑都形成環(huán)路,那么將形成環(huán)路的節(jié)點(diǎn)輸出,在更新目標(biāo)節(jié)點(diǎn)的route時,去掉以及形成環(huán)路的路徑,保存還沒有形成環(huán)路的路徑,再更新目標(biāo)節(jié)點(diǎn)的round值并激活目標(biāo)節(jié)點(diǎn);第3種情況與第1中情況類似,源節(jié)點(diǎn)的route里保存了多條路徑,但每條路徑都與目標(biāo)節(jié)點(diǎn)構(gòu)成了環(huán)路,那么也將形成環(huán)路的路徑輸出,也不必對目標(biāo)節(jié)點(diǎn)進(jìn)行激活,最后,再將源節(jié)點(diǎn)的激活狀態(tài)轉(zhuǎn)化成非激活狀態(tài),與situation1,這些輸出會都先暫存在迭代器iterator中,所以,這種情況下的偽代碼如圖6所示;

c、situation3,的路由情況為源節(jié)點(diǎn)處于激活狀態(tài),而其目標(biāo)節(jié)點(diǎn)也處于激活狀態(tài),目標(biāo)節(jié)點(diǎn)是否處于激活狀態(tài)對sendmsg并不會造成影響,它提供的有用的信息就是它的目標(biāo)節(jié)點(diǎn)曾經(jīng)被訪問過,也就是situation2這種情況,sendmsg更新的信息是先暫存在迭代器iterator中,直到mergemsg模塊,再將這個超級步中所有的運(yùn)行結(jié)果更新,所以偽代碼如圖7所示;

更進(jìn)一步,對于第一種情況,需要考慮的節(jié)點(diǎn)的前驅(qū),即上層有多個的情況,也就是這個原因,造成了上文sendmsg模塊中situation1的節(jié)點(diǎn)的route中保存了多條路徑,需要將他們所有的route信息都要結(jié)合到一起形成newmsg,同時,使用“;”來進(jìn)行分隔多條路徑,對于第二種情況,使用到點(diǎn)屬性中的round屬性值,也就是通過round值來區(qū)分是第一類情況還是第二類情況。round值記錄了改點(diǎn)被激活時的超級步的階段,假如取出2個迭代器中的round相同,則表明這是第一種情況,而假如取出2個迭代器中的round有大小只差,則表明round值較小的是“過時”的,即可去掉,保存round值較大的值即可,mergemsg模塊的偽代碼即如圖8所示。

實(shí)施例

對于一個完整的計算任務(wù)而言,該算法的輸入為一個文本文檔(.txt),其中記錄了圖中所有點(diǎn)的連接關(guān)系,一般形式為(1號頂點(diǎn)2號頂點(diǎn)2個頂點(diǎn)的距離),默認(rèn)指向?yàn)橛?號頂點(diǎn)指向2號頂點(diǎn)。當(dāng)程序接收到對應(yīng)文檔后,會自動解析文本并提取相應(yīng)的信息,并將其轉(zhuǎn)化為設(shè)計的數(shù)據(jù)格式。然后再加載計算模塊,將計算任務(wù)分配給分布式集群中的計算機(jī)。最后,算法會將圖中所有的環(huán)路進(jìn)行輸出。實(shí)驗(yàn)測試了500個點(diǎn),在5s內(nèi)找出了所有的環(huán)路。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1