一種拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法
【專利摘要】本發(fā)明涉及一種拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法,包括步驟如下:(1)生成拓?fù)鋽?shù)據(jù):遍歷圖形中的網(wǎng)絡(luò)節(jié)點(diǎn),獲取節(jié)點(diǎn)之間的關(guān)聯(lián)信息;(2)執(zhí)行分塊操作:分塊操作共分為一級(jí)分塊和二級(jí)分塊,一級(jí)分塊是根據(jù)節(jié)點(diǎn)之間的連通性來劃分,二級(jí)分塊是根據(jù)設(shè)定的最大節(jié)點(diǎn)數(shù)來劃分;(3)拓?fù)鋲K信息的更新與維護(hù):在動(dòng)態(tài)網(wǎng)絡(luò)中,節(jié)點(diǎn)是允許發(fā)生改變的,因此在編輯網(wǎng)絡(luò)時(shí)要保證相應(yīng)拓?fù)鋲K信息的同步更新;(4)基于兩級(jí)分塊的拓?fù)浞治?。本發(fā)明利用了兩級(jí)分塊的算法有效的控制了拓?fù)浔闅v的數(shù)據(jù)量,避免了拓?fù)浞治鰰r(shí)對(duì)整個(gè)拓?fù)渚W(wǎng)絡(luò)的遍歷,也能很好地解決整個(gè)網(wǎng)絡(luò)都是一個(gè)連通整體時(shí)的情況。
【專利說明】一種拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于地理信息系統(tǒng)中海量拓?fù)鋽?shù)據(jù)的分塊操作【技術(shù)領(lǐng)域】,特別是一種拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法。
【背景技術(shù)】
[0002]拓?fù)渚W(wǎng)絡(luò)分析是地理信息系統(tǒng)領(lǐng)域一個(gè)重要的內(nèi)容,一般的分析算法是對(duì)整個(gè)拓?fù)渚W(wǎng)絡(luò)進(jìn)行遍歷分析,然而在實(shí)際生產(chǎn)應(yīng)用環(huán)境中,拓?fù)渚W(wǎng)絡(luò)往往比較復(fù)雜,遍歷整個(gè)拓?fù)渚W(wǎng)絡(luò)不僅占用內(nèi)存大,而且分析效率低下,目前一種常用的拓?fù)渚W(wǎng)絡(luò)優(yōu)化方法是根據(jù)連通性對(duì)拓?fù)浣Y(jié)構(gòu)進(jìn)行分塊,建立一個(gè)個(gè)的孤島來減少遍歷的數(shù)據(jù)量,然而,如果整個(gè)網(wǎng)絡(luò)都是一個(gè)連通的整體,這種分塊方式就失去了優(yōu)勢。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)的不足,提供一種拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法。
[0004]本發(fā)明解決其技術(shù)問題是采取以下技術(shù)方案實(shí)現(xiàn)的:
[0005]一種拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法,包括步驟如下:
[0006](I)生成拓?fù)鋽?shù)據(jù):遍歷圖形中的網(wǎng)絡(luò)節(jié)點(diǎn),獲取節(jié)點(diǎn)之間的關(guān)聯(lián)信息;
[0007](2)執(zhí)行分塊操作:分塊操作共分為一級(jí)分塊和二級(jí)分塊,一級(jí)分塊是根據(jù)節(jié)點(diǎn)之間的連通性來劃分,二級(jí)分塊是根據(jù)設(shè)定的最大節(jié)點(diǎn)數(shù)來劃分;
[0008](3)拓?fù)鋲K信息的更新與維護(hù):在動(dòng)態(tài)網(wǎng)絡(luò)中,節(jié)點(diǎn)是允許發(fā)生改變的,因此在編輯網(wǎng)絡(luò)時(shí)要保證相應(yīng)拓?fù)鋲K信息的同步更新;
[0009](4)基于兩級(jí)分塊的拓?fù)浞治觥?br>
[0010]而且,所述步驟(I)生成拓?fù)鋽?shù)據(jù)的具體步驟如下:
[0011]①遍歷整個(gè)網(wǎng)絡(luò),獲取節(jié)點(diǎn)之間的雙向關(guān)聯(lián)關(guān)系;
[0012]②將節(jié)點(diǎn)之間的所有關(guān)系存儲(chǔ)到內(nèi)存數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)關(guān)系表中,另外,為每一個(gè)節(jié)點(diǎn)創(chuàng)建狀態(tài)標(biāo)識(shí)信息并存儲(chǔ)到數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)狀態(tài)表中,并設(shè)定初始值為:未檢測狀態(tài);
[0013]③創(chuàng)建執(zhí)行分塊操作所需要的變量:
[0014]—級(jí)塊號(hào),初始值為1,
[0015]二級(jí)塊號(hào),初始值為I,
[0016]二級(jí)塊節(jié)點(diǎn)數(shù)目,
[0017]執(zhí)行分塊操作所需要的變量:
[0018]二級(jí)塊信息存儲(chǔ)二級(jí)塊號(hào)與二級(jí)塊所包含的節(jié)點(diǎn)數(shù)目的對(duì)應(yīng)關(guān)系信息;塊邊界關(guān)系存放二級(jí)塊與塊之間的邊界信息;鄰接塊信息存放與當(dāng)前二級(jí)塊相連的其他二級(jí)塊的塊號(hào)及節(jié)點(diǎn)數(shù)目的對(duì)應(yīng)關(guān)系;
[0019]④設(shè)置每個(gè)二級(jí)塊最多包含節(jié)點(diǎn)的數(shù)目為最大塊節(jié)點(diǎn)數(shù)目;
[0020]⑤判斷節(jié)點(diǎn)狀態(tài)表中是否存在狀態(tài)為未檢測狀態(tài)的節(jié)點(diǎn),若存在則以此節(jié)點(diǎn)為起點(diǎn)開始探測并對(duì)探測到的節(jié)點(diǎn)執(zhí)行分塊操作,,若不存在則表示所有的節(jié)點(diǎn)已經(jīng)探測完成,此時(shí)將每個(gè)節(jié)點(diǎn)的塊信息以及塊與塊之間的邊界信息存儲(chǔ)到數(shù)據(jù)庫中。
[0021]而且,所述步驟(2)執(zhí)行分塊操作的具體步驟是:
[0022]①從節(jié)點(diǎn)狀態(tài)表中獲取到狀態(tài)為未檢測狀態(tài)節(jié)點(diǎn),然后將其加入到檢測隊(duì)列中,執(zhí)行步驟②;
[0023]②判斷檢測隊(duì)列是否為空,若不為空,執(zhí)行步驟③,若為空,執(zhí)行步驟④;
[0024]③取檢測隊(duì)列第一個(gè)元素,定為當(dāng)前節(jié)點(diǎn),并將其從隊(duì)列中刪除,執(zhí)行步驟⑤;
[0025]④隊(duì)列為空說明當(dāng)前塊劃分完畢,比較二級(jí)塊節(jié)點(diǎn)數(shù)目與最大塊節(jié)點(diǎn)數(shù)目的一半的大小,若二級(jí)塊節(jié)點(diǎn)數(shù)目小于最大塊節(jié)點(diǎn)數(shù)目的一半,說明當(dāng)前的二級(jí)塊包含的節(jié)點(diǎn)的數(shù)目還不足設(shè)定的最大數(shù)量值的一半,為了防止產(chǎn)生零碎的小塊,需要將當(dāng)前的二級(jí)塊與相鄰的最小的二級(jí)塊進(jìn)行合并,然后使一、二級(jí)塊號(hào)的值各自加1,此時(shí)保存當(dāng)前二級(jí)塊號(hào)及二級(jí)塊節(jié)點(diǎn)數(shù)目到數(shù)據(jù)結(jié)構(gòu)二級(jí)塊信息中,返回繼續(xù)判斷節(jié)點(diǎn)狀態(tài)表中是否有未檢測狀態(tài)的節(jié)點(diǎn),若二級(jí)塊節(jié)點(diǎn)數(shù)目大于最大塊節(jié)點(diǎn)數(shù)目的一半,首先使一級(jí)塊號(hào),二級(jí)塊號(hào)的值各自加1,此時(shí)保存當(dāng)前二級(jí)塊號(hào)及二級(jí)塊節(jié)點(diǎn)數(shù)目到數(shù)據(jù)結(jié)構(gòu)二級(jí)塊信息,然后執(zhí)行步驟①,繼續(xù)判斷節(jié)點(diǎn)狀態(tài)表中是否有未檢測狀態(tài)的節(jié)點(diǎn);
[0026]⑤在節(jié)點(diǎn)關(guān)系表中查找與當(dāng)前節(jié)點(diǎn)直接相連節(jié)點(diǎn)數(shù),執(zhí)行步驟⑥;
[0027]⑥若直接相連節(jié)點(diǎn)數(shù)大于O,說明存在相連的節(jié)點(diǎn),取出其中一個(gè)鄰接節(jié)點(diǎn)并查看其狀態(tài),若為未檢測狀態(tài),說明此節(jié)點(diǎn)尚未探測,執(zhí)行步驟⑦?’若為已檢測狀態(tài),說明此節(jié)點(diǎn)已經(jīng)被探測過,執(zhí)行步驟⑧,若直接相連節(jié)點(diǎn)數(shù)等于0,說明當(dāng)前節(jié)點(diǎn)的相連節(jié)點(diǎn)已經(jīng)處理完成或者不存在相連節(jié)點(diǎn),設(shè)置當(dāng)前節(jié)點(diǎn)的狀態(tài)為已檢測狀態(tài),設(shè)置當(dāng)前節(jié)點(diǎn)的一級(jí)塊號(hào)和二級(jí)塊號(hào)分別為當(dāng)前一級(jí)塊號(hào)和二級(jí)塊號(hào)的值,執(zhí)行步驟②;
[0028]⑦比較二級(jí)塊節(jié)點(diǎn)數(shù)目與最大塊節(jié)點(diǎn)數(shù)目的大小;
[0029]A.若二級(jí)塊節(jié)點(diǎn)數(shù)目小于最大塊節(jié)點(diǎn)數(shù)目,說明當(dāng)前的二級(jí)塊沒有達(dá)到個(gè)數(shù)限制,使直接相連節(jié)點(diǎn)數(shù)減1,并將當(dāng)前節(jié)點(diǎn)加入隊(duì)列中,執(zhí)行步驟⑥;
[0030]B.若二級(jí)塊節(jié)點(diǎn)數(shù)目大于最大塊節(jié)點(diǎn)數(shù)目,說明當(dāng)前二級(jí)塊已經(jīng)飽和,不能再加入新的節(jié)點(diǎn)元素,執(zhí)行步驟⑧;
[0031]⑧判斷鄰接節(jié)點(diǎn)的二級(jí)塊號(hào)是否與當(dāng)前二級(jí)塊號(hào)的值一致;
[0032]A.若不一致,存儲(chǔ)鄰接節(jié)點(diǎn)的二級(jí)塊號(hào)到數(shù)據(jù)結(jié)構(gòu)鄰接塊信息中,并存儲(chǔ)邊界信息存儲(chǔ)到數(shù)據(jù)結(jié)構(gòu)塊邊界關(guān)系中,合并當(dāng)前節(jié)點(diǎn)當(dāng)前節(jié)點(diǎn)與鄰接節(jié)點(diǎn)的一級(jí)塊號(hào),使直接相連節(jié)點(diǎn)數(shù)減I,執(zhí)行步驟⑥;
[0033]B.若一致,使二級(jí)塊號(hào)加1,直接相連節(jié)點(diǎn)數(shù)減1,執(zhí)行步驟⑥。
[0034]而且,所述步驟(3)拓?fù)鋲K信息的更新與維護(hù)的具體步驟是:
[0035]①讀取數(shù)據(jù)庫中一級(jí)分塊和二級(jí)分塊的最大值,分別賦值給變量最大一級(jí)塊號(hào)、最大二級(jí)塊號(hào),執(zhí)行步驟②;
[0036]②若執(zhí)行添加操作,則執(zhí)行步驟③;若執(zhí)行刪除操作,則執(zhí)行步驟⑧;若執(zhí)行修改操作,則先執(zhí)行步驟⑧再執(zhí)行步驟③;
[0037]③添加一個(gè)新節(jié)點(diǎn),從網(wǎng)絡(luò)中查找與其直接相連節(jié)點(diǎn)數(shù)并獲取數(shù)據(jù)庫中相連節(jié)點(diǎn)的拓?fù)鋲K信息,執(zhí)行步驟④;
[0038]④判斷直接相連節(jié)點(diǎn)數(shù)的值,若直接相連節(jié)點(diǎn)數(shù)為1,說明在原有的拓?fù)渚W(wǎng)絡(luò)中與新加的節(jié)點(diǎn)直接相連的節(jié)點(diǎn)只有一個(gè),執(zhí)行步驟⑤,若直接相連節(jié)點(diǎn)數(shù)為0,說明新節(jié)點(diǎn)為孤立節(jié)點(diǎn),使最大一級(jí)塊號(hào)、最大二級(jí)塊號(hào)的值各自加I并分別賦值給新節(jié)點(diǎn)的一、二級(jí)塊號(hào),然后保存相關(guān)信息,退出;若鄰接塊信息大于1,說明相連節(jié)點(diǎn)數(shù)目有多個(gè),執(zhí)行步驟⑥;
[0039]⑤設(shè)置新節(jié)點(diǎn)的一級(jí)塊號(hào)為鄰接節(jié)點(diǎn)的一級(jí)塊號(hào),讀取鄰接節(jié)點(diǎn)的二級(jí)塊節(jié)點(diǎn)數(shù)目;若二級(jí)塊節(jié)點(diǎn)數(shù)目大于1.5X最大塊節(jié)點(diǎn)數(shù)目,說明相連節(jié)點(diǎn)所在的二級(jí)塊不能再添加新的節(jié)點(diǎn),此時(shí)要重新創(chuàng)建一個(gè)新的二級(jí)塊,使最大二級(jí)塊號(hào)的值加I并設(shè)置其為新二級(jí)塊的塊號(hào);若二級(jí)塊節(jié)點(diǎn)數(shù)目小于1.5X最大塊節(jié)點(diǎn)數(shù)目,說明相連節(jié)點(diǎn)所在的二級(jí)塊還可以接受新的節(jié)點(diǎn),設(shè)置新節(jié)點(diǎn)的二級(jí)塊為鄰接節(jié)點(diǎn)的二級(jí)塊號(hào),最后保存到數(shù)據(jù)庫中,退出;
[0040]⑥首先,判斷與新節(jié)點(diǎn)相連的每個(gè)節(jié)點(diǎn)所在的一級(jí)塊是否相同,若不相同,則合并一級(jí)塊并統(tǒng)一一級(jí)塊號(hào)為之前最大的一級(jí)塊的塊號(hào),然后進(jìn)一步判斷是否需要合并二級(jí)分塊,若需要?jiǎng)t直接合并,若不需要?jiǎng)t存儲(chǔ)兩個(gè)二級(jí)塊之間的邊界信息到塊邊界關(guān)系,并將相關(guān)信息保存到數(shù)據(jù)庫中;退出,若相同,則直接執(zhí)行步驟⑦;
[0041]⑦判斷與新節(jié)點(diǎn)相連的每個(gè)節(jié)點(diǎn)所在的二級(jí)塊是否相同,若不相同,則獲取所有相鄰節(jié)點(diǎn)的二級(jí)塊中最小塊的二級(jí)塊號(hào),并將其設(shè)為新節(jié)點(diǎn)的二級(jí)塊號(hào),同時(shí),增加若干條由于新節(jié)點(diǎn)導(dǎo)致的塊與塊之間的邊界信息,最后保存到數(shù)據(jù)庫中,退出;若相同,則執(zhí)行步驟④;
[0042]⑧刪除一個(gè)舊節(jié)點(diǎn),首先,讀取舊節(jié)點(diǎn)的拓?fù)湫畔ⅲ瑒h除舊節(jié)點(diǎn)到其他相鄰節(jié)點(diǎn)的單向關(guān)系信息,然后,查看與舊節(jié)點(diǎn)直接相連的所有節(jié)點(diǎn)鄰接節(jié)點(diǎn)的直接相連節(jié)點(diǎn)數(shù),并從數(shù)據(jù)庫中讀取每個(gè)相連節(jié)點(diǎn)的拓?fù)湫畔ⅲ糁苯酉噙B節(jié)點(diǎn)數(shù)為0,則直接退出;若直接相連節(jié)點(diǎn)數(shù)為1,則更新相鄰節(jié)點(diǎn)到的單向關(guān)聯(lián)關(guān)系,然后退出,若直接相連節(jié)點(diǎn)數(shù)大于1,執(zhí)行步驟⑨;
[0043]⑨判斷舊節(jié)點(diǎn)與所有直接相連的鄰接節(jié)點(diǎn)是否處在相同二級(jí)塊內(nèi),若是,由于刪除掉節(jié)點(diǎn)可能導(dǎo)致原來的二級(jí)塊不再是一個(gè)連通的整體,所以需要加載此二級(jí)塊的數(shù)據(jù)進(jìn)行重新進(jìn)行探測,重新探測二級(jí)塊,若原來的塊仍然是一個(gè)連通的整體,則直接退出,若原來的塊不再是一個(gè)連通的整體,則需要進(jìn)一步探測所在的一級(jí)塊是否是一個(gè)連通的整體,執(zhí)行步驟⑩,若不是,則刪除掉用舊節(jié)點(diǎn)來標(biāo)識(shí)的二級(jí)塊邊界信息,執(zhí)行步驟⑩;
[0044]⑩加載當(dāng)前一級(jí)塊數(shù)據(jù),并重新探測當(dāng)前一級(jí)塊是否仍然是一個(gè)連通的整體,若是,則直接退出,若不是,則需要對(duì)當(dāng)前一級(jí)塊單獨(dú)執(zhí)行分塊操作來重新劃分塊。
[0045]而且,所述步驟(4)基于兩級(jí)分塊的拓?fù)浞治龅木唧w步驟是:
[0046]①確定分析類型,若基于單節(jié)點(diǎn)分析,則執(zhí)行步驟②;若基于多節(jié)點(diǎn)分析,則執(zhí)行步驟③;
[0047]②輸入待分析節(jié)點(diǎn)單節(jié)點(diǎn)的信息,查詢數(shù)據(jù)庫讀取單節(jié)點(diǎn)的一級(jí)塊號(hào)和二級(jí)塊號(hào),然后加載整個(gè)一級(jí)塊或者二級(jí)塊的數(shù)據(jù)進(jìn)行分析;
[0048]③輸入多個(gè)節(jié)點(diǎn)的信息,分別獲取它們的一級(jí)塊號(hào)和二級(jí)塊號(hào),首先,判斷一級(jí)塊號(hào)是否相同,若不相同,則節(jié)點(diǎn)之間肯定不存在拓?fù)潢P(guān)系,若相同,則繼續(xù)判斷一級(jí)塊號(hào)是否相同,若相同,則加載二級(jí)塊號(hào)的塊數(shù)據(jù)進(jìn)行分析或者直接加載一級(jí)塊的數(shù)據(jù)進(jìn)行分析,若不相同,則需要分別加載每個(gè)節(jié)點(diǎn)所在的二級(jí)塊數(shù)據(jù),以及當(dāng)前一級(jí)塊內(nèi)的所有二級(jí)塊之間的邊界信息進(jìn)行拓?fù)浞治龌蛘咧苯蛹虞d一級(jí)塊的數(shù)據(jù)進(jìn)行分析。[0049]本發(fā)明的優(yōu)點(diǎn)和積極效果是
[0050]本發(fā)明利用了兩級(jí)分塊的算法,通過連通性建立網(wǎng)絡(luò)孤島,對(duì)每個(gè)網(wǎng)絡(luò)孤島又執(zhí)行了進(jìn)一步的劃分。該方法有效的控制了拓?fù)浔闅v的數(shù)據(jù)量,避免了拓?fù)浞治鰰r(shí)對(duì)整個(gè)拓?fù)渚W(wǎng)絡(luò)的遍歷,也能很好地解決整個(gè)網(wǎng)絡(luò)都是一個(gè)連通整體時(shí)的情況。
【專利附圖】
【附圖說明】
[0051 ]圖1是根據(jù)網(wǎng)絡(luò)生成拓?fù)涞牧鞒虉D;
[0052]圖2是拓?fù)浞謮K的流程圖;
[0053]圖3是動(dòng)態(tài)拓?fù)渚W(wǎng)絡(luò)中實(shí)時(shí)維護(hù)拓?fù)鋲K信息的流程圖;
[0054]圖4基于兩級(jí)分塊的拓?fù)渚W(wǎng)絡(luò)分析流程圖;
[0055]圖5是分塊操作實(shí)例圖;
[0056]圖6刪除一個(gè)節(jié)點(diǎn)的實(shí)例圖;
[0057]圖7添加一個(gè)節(jié)點(diǎn)的實(shí)例圖。
【具體實(shí)施方式】
[0058]以下結(jié)合附圖對(duì)本發(fā)明實(shí)施例做進(jìn)一步詳述,以下實(shí)施例只是描述性的,不是限定性的,不能以此限定本發(fā)明的保護(hù)范圍。
[0059]一種拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法,如圖1所示,包括步驟如下:
[0060](I)生成拓?fù)鋽?shù)據(jù):拓?fù)鋽?shù)據(jù)是根據(jù)圖形數(shù)據(jù)來生成的,需要遍歷圖形中的網(wǎng)絡(luò)節(jié)點(diǎn)來獲取節(jié)點(diǎn)之間的關(guān)聯(lián)信息,具體步驟如下:
[0061]①遍歷整個(gè)網(wǎng)絡(luò),獲取節(jié)點(diǎn)之間的雙向關(guān)聯(lián)關(guān)系;比如:節(jié)點(diǎn)A與節(jié)點(diǎn)B直接相連,關(guān)系表示為:A, B, info (A) ; B, A, info (B);
[0062]②將節(jié)點(diǎn)之間的所有關(guān)系存儲(chǔ)到內(nèi)存數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)關(guān)系表RelationTable中,另夕卜,為每一個(gè)節(jié)點(diǎn)創(chuàng)建狀態(tài)標(biāo)識(shí)信息并存儲(chǔ)到數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)狀態(tài)表StateTable中,并設(shè)定初始值為:未檢測狀態(tài)Unchecked。
[0063]③創(chuàng)建執(zhí)行分塊操作所需要的變量:
[0064]一級(jí)塊號(hào)SectionOneID,初始值為I
[0065]二級(jí)塊號(hào) SectionTwoID,初始值為 I,
[0066]二級(jí)塊節(jié)點(diǎn)數(shù)目 SectionTwoSize,
[0067]執(zhí)行分塊操作所需要的變量:
[0068]二級(jí)塊信息SectionInfo存儲(chǔ)二級(jí)塊號(hào)與二級(jí)塊所包含的節(jié)點(diǎn)數(shù)目的對(duì)應(yīng)關(guān)系信息;塊邊界關(guān)系BoundaryRelation存放二級(jí)塊與塊之間的邊界信息;鄰接塊信息AbutSection存放與當(dāng)前二級(jí)塊相連的其他二級(jí)塊的塊號(hào)及節(jié)點(diǎn)數(shù)目SectionTwoSize的對(duì)應(yīng)關(guān)系;
[0069]④為了限制拓?fù)浞治鰰r(shí)加載的數(shù)據(jù)量,提高拓?fù)浞治鲂?,設(shè)置每個(gè)二級(jí)塊最多包含節(jié)點(diǎn)的數(shù)目為最大塊節(jié)點(diǎn)數(shù)目MaxSectionSize。
[0070]⑤接下來判斷節(jié)點(diǎn)狀態(tài)表StateTable中是否存在狀態(tài)為未檢測狀態(tài)Unchecked的節(jié)點(diǎn),若存在則以此節(jié)點(diǎn)為起點(diǎn)開始探測并對(duì)探測到的節(jié)點(diǎn)執(zhí)行分塊操作,如圖2所示,若不存在則表示所有的節(jié)點(diǎn)已經(jīng)探測完成,此時(shí)將每個(gè)節(jié)點(diǎn)的塊信息以及塊與塊之間的邊界信息存儲(chǔ)到數(shù)據(jù)庫中;
[0071](2)執(zhí)行分塊操作;分塊操作共分為一級(jí)分塊和二級(jí)分塊,一級(jí)分塊是根據(jù)節(jié)點(diǎn)之間的連通性來劃分,二級(jí)分塊是根據(jù)設(shè)定的最大節(jié)點(diǎn)數(shù)來劃分,整個(gè)分塊過程如圖2所示,此部分承接自圖1中的“執(zhí)行拓?fù)浞謮K操作”,具體步驟如下:
[0072]①從節(jié)點(diǎn)狀態(tài)表StateTable中獲取到狀態(tài)為未檢測狀態(tài)Unchecked節(jié)點(diǎn),然后將其加入到檢測隊(duì)列CheckingQueue中,等待進(jìn)一步的處理,執(zhí)行步驟②。
[0073]②判斷檢測隊(duì)列CheckingQueue是否為空,若不為空,執(zhí)行步驟③,若為空,執(zhí)行步驟④;
[0074]③取檢測隊(duì)列CheckingQueue第一個(gè)元素,賦值給當(dāng)前節(jié)點(diǎn)TempJoint,并將其從隊(duì)列中刪除,執(zhí)行步驟⑤;
[0075]④隊(duì)列為空說明當(dāng)前塊劃分完畢,比較二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize與最大塊節(jié)點(diǎn)數(shù)目的一半MaxSectionSize/2的大小,若二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize〈最大塊節(jié)點(diǎn)數(shù)目的一半MaxSectionSize/2,說明當(dāng)前的二級(jí)塊包含的節(jié)點(diǎn)的數(shù)目還不足設(shè)定的最大數(shù)量值的一半,為了防止產(chǎn)生零碎的小塊,需要將當(dāng)前的二級(jí)塊與相鄰的最小的二級(jí)塊進(jìn)行合并,然后使一級(jí)塊號(hào)SectionOneID, 二級(jí)塊號(hào)SectionTwoID的值各自加I,此時(shí)保存當(dāng)前二級(jí)塊號(hào)SectionTwoID及二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize到數(shù)據(jù)結(jié)構(gòu)二級(jí)塊信息SectionInfo中,返回繼續(xù)判斷節(jié)點(diǎn)狀態(tài)表StateTable中是否有未檢測狀態(tài)Unchecked的節(jié)點(diǎn),如圖1所示,若二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize〉最大塊節(jié)點(diǎn)數(shù)目的一半MaxSectionSize/2,首先使一級(jí)塊號(hào)SectionOneID, 二級(jí)塊號(hào)SectionTwoID的值各自加I,此時(shí)保存當(dāng)前二級(jí)塊號(hào)SectionTwoID及二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize到數(shù)據(jù)結(jié)構(gòu)二級(jí)塊信息SectionInfo,然后執(zhí)行步驟①,繼續(xù)判斷節(jié)點(diǎn)狀態(tài)表StateTable中是否有未檢測狀態(tài)Unchecked的節(jié)點(diǎn);
[0076]⑤在節(jié)點(diǎn)關(guān)系表RelationTable中查找與當(dāng)前節(jié)點(diǎn)TempJoint直接相連節(jié)點(diǎn)數(shù)AbutJointNum,執(zhí)行步驟⑥;
[0077]⑥若直接相連節(jié)點(diǎn)數(shù)AbutJointNum>0,說明存在相連的節(jié)點(diǎn),取出其中一個(gè)鄰接節(jié)點(diǎn)AbutJoint并查看其狀態(tài),若為未檢測狀態(tài)Unchecked,說明此節(jié)點(diǎn)尚未探測,執(zhí)行步驟⑦;若為已檢測狀態(tài)Checked,說明此節(jié)點(diǎn)已經(jīng)被探測過,執(zhí)行步驟⑧,若直接相連節(jié)點(diǎn)數(shù)AbutJointNum=O,說明當(dāng)前節(jié)點(diǎn)TempJoint的相連節(jié)點(diǎn)已經(jīng)處理完成或者不存在相連節(jié)點(diǎn),設(shè)置當(dāng)前節(jié)點(diǎn)TempJoint的狀態(tài)為已檢測狀態(tài)Checked,當(dāng)前節(jié)點(diǎn)TempJoint的一級(jí)塊號(hào)和二級(jí)塊號(hào)分別為當(dāng)前一級(jí)塊號(hào)SectionOneID和二級(jí)塊號(hào)SectionTwoID的值,執(zhí)行步驟②;
[0078]⑦比較二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize與最大塊節(jié)點(diǎn)數(shù)目MaxSectionSize的大小:
[0079]A.若二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize〈最大塊節(jié)點(diǎn)數(shù)目MaxSectionSize,說明當(dāng)前的二級(jí)塊沒有達(dá)到個(gè)數(shù)限制,使直接相連節(jié)點(diǎn)數(shù)AbutJointNum-1,并將當(dāng)前節(jié)點(diǎn)加入隊(duì)列中,執(zhí)行步驟⑥;
[0080]B.若二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize〉最大塊節(jié)點(diǎn)數(shù)目MaxSectionSize,說明當(dāng)前二級(jí)塊已經(jīng)飽和,不能再加入新的節(jié)點(diǎn)元素,執(zhí)行步驟⑧。
[0081]⑧判斷鄰接節(jié)點(diǎn)AbutJoint的二級(jí)塊號(hào)是否與當(dāng)前二級(jí)塊號(hào)SectionTwoID的值一致;
[0082]A.若不一致,存儲(chǔ)鄰接節(jié)點(diǎn)AbutJoint的二級(jí)塊號(hào)SectionTwoID到數(shù)據(jù)結(jié)構(gòu)鄰接塊信息AbutSection中,并存儲(chǔ)邊界信息存儲(chǔ)到數(shù)據(jù)結(jié)構(gòu)塊邊界關(guān)系BoundaryRelation中,合并當(dāng)前節(jié)點(diǎn)當(dāng)前節(jié)點(diǎn)TempJoint與鄰接節(jié)點(diǎn)AbutJoint的一級(jí)塊號(hào)SectionOneID,使直接相連節(jié)點(diǎn)數(shù)AbutJointNum-1,執(zhí)行步驟⑥;
[0083]B.若一致,使二級(jí)塊號(hào)SectionTwoID+1,直接相連節(jié)點(diǎn)數(shù)AbutJointNum-l,執(zhí)行
步驟⑥;
[0084](3)拓?fù)鋲K信息的更新與維護(hù);在動(dòng)態(tài)網(wǎng)絡(luò)中,節(jié)點(diǎn)是允許發(fā)生改變的,因此在編輯網(wǎng)絡(luò)的時(shí)候要保證相應(yīng)的拓?fù)鋲K信息的同步更新,如圖3所示,其中修改操作,相當(dāng)于先執(zhí)行刪除,然后再執(zhí)行添加;具體步驟如下:
[0085]①讀取數(shù)據(jù)庫中一級(jí)分塊和二級(jí)分塊的最大值,分別賦值給變量最大一級(jí)塊號(hào)MaxSectionOnelD、最大二級(jí)塊號(hào) MaxSectionTwoID,執(zhí)行步驟②;
[0086]②若執(zhí)行“添加”操作,則執(zhí)行步驟③;若執(zhí)行“刪除”操作,則執(zhí)行步驟⑧;若執(zhí)行“修改”操作,則先執(zhí)行⑧再執(zhí)行步驟③。
[0087]③添加一個(gè)新節(jié)點(diǎn)NewJoint,從網(wǎng)絡(luò)中查找與其直接相連節(jié)點(diǎn)數(shù)AbutJointNum并獲取數(shù)據(jù)庫中相連節(jié)點(diǎn)的拓?fù)鋲K信息,執(zhí)行步驟④;
[0088]④判斷直接相連節(jié)點(diǎn)數(shù)AbutJointNum的值,若直接相連節(jié)點(diǎn)數(shù)AbutJointNum=I,說明在原有的拓?fù)渚W(wǎng)絡(luò)中與新加的節(jié)點(diǎn)直接相連的節(jié)點(diǎn)只有一個(gè),執(zhí)行步驟⑤,若直接相連節(jié)點(diǎn)數(shù)AbutJointNum=O,說明新節(jié)點(diǎn)NewJoint為孤立節(jié)點(diǎn),使最大一級(jí)塊號(hào)MaxSectionOnelD、最大二級(jí)塊號(hào)MaxSectionTwoID的值各自加I并分別賦值給新節(jié)點(diǎn)NewJoint的一二級(jí)塊號(hào),然后保存相關(guān)信息,退出,若鄰接塊信息AbutSectionNum>l,說明相連節(jié)點(diǎn)數(shù)目有多個(gè),執(zhí)行步驟⑥;
[0089]⑤設(shè)置新節(jié)點(diǎn)NewJoint的一級(jí)塊號(hào)為鄰接節(jié)點(diǎn)AbutJoint的一級(jí)塊號(hào)SectionOneID,讀取鄰接節(jié)點(diǎn)AbutJoint的二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize ;若二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize>l.5X最大塊節(jié)點(diǎn)數(shù)目MaxSectionSize,說明相連節(jié)點(diǎn)所在的二級(jí)塊不能再添加新的節(jié)點(diǎn),此時(shí)要重新創(chuàng)建一個(gè)新的二級(jí)塊,使最大二級(jí)塊號(hào)MaxSectionTwoID的值加I并設(shè)置其為新二級(jí)塊的塊號(hào);若二級(jí)塊節(jié)點(diǎn)數(shù)目SectionTwoSize<l.5X最大塊節(jié)點(diǎn)數(shù)目MaxSectionSize,說明相連節(jié)點(diǎn)所在的二級(jí)塊還可以接受新的節(jié)點(diǎn),設(shè)置新節(jié)點(diǎn)NewJoint的二級(jí)塊ID為鄰接節(jié)點(diǎn)AbutJoint的二級(jí)塊ID,最后保存到數(shù)據(jù)庫中,退出;
[0090]⑥首先,判斷與新節(jié)點(diǎn)NewJoint相連的每個(gè)節(jié)點(diǎn)所在的一級(jí)塊是否相同,若不相同,則合并一級(jí)塊并統(tǒng)一一級(jí)塊號(hào)為之前最大的一級(jí)塊的塊號(hào),然后進(jìn)一步判斷是否需要合并二級(jí)分塊,若需要?jiǎng)t直接合并,若不需要?jiǎng)t存儲(chǔ)兩個(gè)二級(jí)塊之間的邊界信息到塊邊界關(guān)系BoundaryRelation,并將相關(guān)信息保存到數(shù)據(jù)庫中,退出,若相同,則直接執(zhí)行步驟⑦。
[0091]⑦判斷與新節(jié)點(diǎn)NewJoint相連的每個(gè)節(jié)點(diǎn)所在的二級(jí)塊是否相同,若不相同,則獲取所有相鄰節(jié)點(diǎn)的二級(jí)塊中最小塊的二級(jí)塊號(hào)SectionTwoID,并將其設(shè)為新節(jié)點(diǎn)NewJoint的二級(jí)塊號(hào),同時(shí),增加若干條由于新節(jié)點(diǎn)NewJoint導(dǎo)致的塊與塊之間的邊界信息,最后保存到數(shù)據(jù)庫中,退出,若相同,則執(zhí)行步驟④;
[0092]⑧刪除一個(gè)舊節(jié)點(diǎn)OldJoint,首先,讀取舊節(jié)點(diǎn)OldJoint的拓?fù)湫畔?刪除舊節(jié)點(diǎn)OldJoint到其他相鄰節(jié)點(diǎn)的單向關(guān)系信息,然后,查看與舊節(jié)點(diǎn)OldJoint直接相連的所有節(jié)點(diǎn)鄰接節(jié)點(diǎn)AbutJoint的直接相連節(jié)點(diǎn)數(shù)AbutJointNum,并從數(shù)據(jù)庫中讀取每個(gè)相連節(jié)點(diǎn)的拓?fù)湫畔?,若直接相連節(jié)點(diǎn)數(shù)AbutJointNum=O,則直接退出;若直接相連節(jié)點(diǎn)數(shù)AbutJointNum=I,則更新相鄰節(jié)點(diǎn)到OldJoint的單向關(guān)聯(lián)關(guān)系,然后退出,若直接相連節(jié)點(diǎn)數(shù)AbutJointNum>l,執(zhí)行步驟⑨;
[0093]⑨判斷舊節(jié)點(diǎn)OldJoint與所有直接相連的鄰接節(jié)點(diǎn)AbutJoint是否處在相同二級(jí)塊內(nèi),若是,由于刪除掉節(jié)點(diǎn)可能導(dǎo)致原來的二級(jí)塊不再是一個(gè)連通的整體,所以需要加載此二級(jí)塊的數(shù)據(jù)進(jìn)行重新進(jìn)行探測,重新探測二級(jí)塊,若原來的塊仍然是一個(gè)連通的整體,則直接退出,若原來的塊不再是一個(gè)連通的整體,則需要進(jìn)一步探測所在的一級(jí)塊是否是一個(gè)連通的整體,執(zhí)行步驟⑩,若不是,則刪除掉用舊節(jié)點(diǎn)OldJoint來標(biāo)識(shí)的二級(jí)塊邊界信息,執(zhí)行步驟⑩;
[0094]⑩加載當(dāng)前一級(jí)塊數(shù)據(jù),并重新探測當(dāng)前一級(jí)塊是否仍然是一個(gè)連通的整體,若是,則直接退出,若不是,則需要對(duì)當(dāng)前一級(jí)塊單獨(dú)執(zhí)行分塊操作來重新劃分塊;
[0095](4)基于兩級(jí)分塊的拓?fù)浞治?;兩?jí)分塊使得拓?fù)浞治鲎兊酶臃奖愫涂旖?,在一定程度上,不僅節(jié)省了內(nèi)存而且提高了分析效率,具體步驟為:
[0096]①確定分析類型,若基于單節(jié)點(diǎn)分析,則執(zhí)行步驟②;若基于多節(jié)點(diǎn)分析,則執(zhí)行步驟③;
[0097]②輸入待分析節(jié)點(diǎn)單節(jié)點(diǎn)SingleJoint的信息,查詢數(shù)據(jù)庫讀取單節(jié)點(diǎn)SingleJoint的一級(jí)塊號(hào)SectionOneID和二級(jí)塊號(hào)SectionTwoID,然后根據(jù)需求加載整個(gè)一級(jí)塊或者二級(jí)塊的數(shù)據(jù)進(jìn)行分析;
[0098]③輸入多個(gè)節(jié)點(diǎn)的信息,分別獲取它們的一級(jí)塊號(hào)SectionOneID和二級(jí)塊號(hào)SectionTwoID,首先,判斷一級(jí)塊號(hào)SecionOneID是否相同,若不相同,貝U節(jié)點(diǎn)之間肯定不存在拓?fù)潢P(guān)系,若相同,則繼續(xù)判斷一級(jí)塊號(hào)SectionTwoID是否相同,若相同,則加載二級(jí)塊號(hào)SectionTwoID的塊數(shù)據(jù)進(jìn)行分析或者根據(jù)不同的需求直接加載一級(jí)塊的數(shù)據(jù)進(jìn)行分析,若不相同,則需要分別加載每個(gè)節(jié)點(diǎn)所在的二級(jí)塊數(shù)據(jù),以及當(dāng)前一級(jí)塊內(nèi)的所有二級(jí)塊之間的邊界信息進(jìn)行拓?fù)浞治龌蛘吒鶕?jù)不同的需求直接加載一級(jí)塊的數(shù)據(jù)進(jìn)行分析。
[0099]實(shí)例
[0100]為了清晰描述本發(fā)明的內(nèi)容,選取一個(gè)簡單的拓?fù)渚W(wǎng)絡(luò)來詳細(xì)說明執(zhí)行步驟,如圖5所示,網(wǎng)絡(luò)中總共有16個(gè)節(jié)點(diǎn),
[0101](I)生成拓?fù)鋽?shù)據(jù);
[0102]①獲取網(wǎng)絡(luò)中節(jié)點(diǎn)之間的雙向關(guān)聯(lián)關(guān)系,假設(shè)從Jl開始遍歷,依次獲取每個(gè)節(jié)點(diǎn)之間的雙向關(guān)聯(lián)關(guān)系,存儲(chǔ)到節(jié)點(diǎn)關(guān)系表RelationTable中,如表1,同時(shí)為每一個(gè)節(jié)點(diǎn)創(chuàng)建狀態(tài)信息存儲(chǔ)到節(jié)點(diǎn)狀態(tài)表StateTable ;
[0103]表1從網(wǎng)絡(luò)中獲取的節(jié)點(diǎn)關(guān)系表RelationTable表
[0104]
【權(quán)利要求】
1.一種拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法,其特征在于:包括步驟如下: (1)生成拓?fù)鋽?shù)據(jù):遍歷圖形中的網(wǎng)絡(luò)節(jié)點(diǎn),獲取節(jié)點(diǎn)之間的關(guān)聯(lián)信息; (2)執(zhí)行分塊操作:分塊操作共分為一級(jí)分塊和二級(jí)分塊,一級(jí)分塊是根據(jù)節(jié)點(diǎn)之間的連通性來劃分,二級(jí)分塊是根據(jù)設(shè)定的最大節(jié)點(diǎn)數(shù)來劃分; (3)拓?fù)鋲K信息的更新與維護(hù):在動(dòng)態(tài)網(wǎng)絡(luò)中,節(jié)點(diǎn)是允許發(fā)生改變的,因此在編輯網(wǎng)絡(luò)時(shí)要保證相應(yīng)拓?fù)鋲K信息的同步更新; (4)基于兩級(jí)分塊的拓?fù)浞治觥?br>
2.根據(jù)權(quán)利要求1所述的拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法,其特征在于:所述步驟(1)生成拓?fù)鋽?shù)據(jù)的具體步驟如下: ①遍歷整個(gè)網(wǎng)絡(luò),獲取節(jié)點(diǎn)之間的雙向關(guān)聯(lián)關(guān)系; ②將節(jié)點(diǎn)之間的所有關(guān)系存儲(chǔ)到內(nèi)存數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)關(guān)系表中,另外,為每一個(gè)節(jié)點(diǎn)創(chuàng)建狀態(tài)標(biāo)識(shí)信息并存儲(chǔ)到數(shù)據(jù)結(jié)構(gòu)節(jié)點(diǎn)狀態(tài)表中,并設(shè)定初始值為:未檢測狀態(tài); ③創(chuàng)建執(zhí)行分塊操作所需要的變量: 一級(jí)塊號(hào),初始值為1, 二級(jí)塊號(hào),初始值為1, 二級(jí)塊節(jié)點(diǎn)數(shù)目, 執(zhí)行分塊操作所需要的變量:` 二級(jí)塊信息存儲(chǔ)二級(jí)塊號(hào)與二級(jí)塊所包含的節(jié)點(diǎn)數(shù)目的對(duì)應(yīng)關(guān)系信息;塊邊界關(guān)系存放二級(jí)塊與塊之間的邊界信息;鄰接塊信息存放與當(dāng)前二級(jí)塊相連的其他二級(jí)塊的塊號(hào)及節(jié)點(diǎn)數(shù)目的對(duì)應(yīng)關(guān)系; ④設(shè)置每個(gè)二級(jí)塊最多包含節(jié)點(diǎn)的數(shù)目為最大塊節(jié)點(diǎn)數(shù)目; ⑤判斷節(jié)點(diǎn)狀態(tài)表中是否存在狀態(tài)為未檢測狀態(tài)的節(jié)點(diǎn),若存在則以此節(jié)點(diǎn)為起點(diǎn)開始探測并對(duì)探測到的節(jié)點(diǎn)執(zhí)行分塊操作,,若不存在則表示所有的節(jié)點(diǎn)已經(jīng)探測完成,此時(shí)將每個(gè)節(jié)點(diǎn)的塊信息以及塊與塊之間的邊界信息存儲(chǔ)到數(shù)據(jù)庫中。
3.根據(jù)權(quán)利要求1所述的拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法,其特征在于:所述步驟(2)執(zhí)行分塊操作的具體步驟是: ①從節(jié)點(diǎn)狀態(tài)表中獲取到狀態(tài)為未檢測狀態(tài)節(jié)點(diǎn),然后將其加入到檢測隊(duì)列中,執(zhí)行步驟②; ②判斷檢測隊(duì)列是否為空,若不為空,執(zhí)行步驟③,若為空,執(zhí)行步驟④; ③取檢測隊(duì)列第一個(gè)元素,定為當(dāng)前節(jié)點(diǎn),并將其從隊(duì)列中刪除,執(zhí)行步驟⑤; ④隊(duì)列為空說明當(dāng)前塊劃分完畢,比較二級(jí)塊節(jié)點(diǎn)數(shù)目與最大塊節(jié)點(diǎn)數(shù)目的一半的大小,若二級(jí)塊節(jié)點(diǎn)數(shù)目小于最大塊節(jié)點(diǎn)數(shù)目的一半,說明當(dāng)前的二級(jí)塊包含的節(jié)點(diǎn)的數(shù)目還不足設(shè)定的最大數(shù)量值的一半,為了防止產(chǎn)生零碎的小塊,需要將當(dāng)前的二級(jí)塊與相鄰的最小的二級(jí)塊進(jìn)行合并,然后使一、二級(jí)塊號(hào)的值各自加1,此時(shí)保存當(dāng)前二級(jí)塊號(hào)及二級(jí)塊節(jié)點(diǎn)數(shù)目到數(shù)據(jù)結(jié)構(gòu)二級(jí)塊信息中,返回繼續(xù)判斷節(jié)點(diǎn)狀態(tài)表中是否有未檢測狀態(tài)的節(jié)點(diǎn),若二級(jí)塊節(jié)點(diǎn)數(shù)目大于最大塊節(jié)點(diǎn)數(shù)目的一半,首先使一級(jí)塊號(hào),二級(jí)塊號(hào)的值各自加1,此時(shí)保存當(dāng)前二級(jí)塊號(hào)及二級(jí)塊節(jié)點(diǎn)數(shù)目到數(shù)據(jù)結(jié)構(gòu)二級(jí)塊信息,然后執(zhí)行步驟①,繼續(xù)判斷節(jié)點(diǎn)狀態(tài)表中是否有未檢測狀態(tài)的節(jié)點(diǎn); ⑤在節(jié)點(diǎn)關(guān)系表中查找與當(dāng)前節(jié)點(diǎn)直接相連節(jié)點(diǎn)數(shù),執(zhí)行步驟⑥;⑥若直接相連節(jié)點(diǎn)數(shù)大于O,說明存在相連的節(jié)點(diǎn),取出其中一個(gè)鄰接節(jié)點(diǎn)并查看其狀態(tài),若為未檢測狀態(tài),說明此節(jié)點(diǎn)尚未探測,執(zhí)行步驟⑦?’若為已檢測狀態(tài),說明此節(jié)點(diǎn)已經(jīng)被探測過,執(zhí)行步驟⑧,若直接相連節(jié)點(diǎn)數(shù)等于O,說明當(dāng)前節(jié)點(diǎn)的相連節(jié)點(diǎn)已經(jīng)處理完成或者不存在相連節(jié)點(diǎn),設(shè)置當(dāng)前節(jié)點(diǎn)的狀態(tài)為已檢測狀態(tài),設(shè)置當(dāng)前節(jié)點(diǎn)的一級(jí)塊號(hào)和二級(jí)塊號(hào)分別為當(dāng)前一級(jí)塊號(hào)和二級(jí)塊號(hào)的值,執(zhí)行步驟②; ⑦比較二級(jí)塊節(jié)點(diǎn)數(shù)目與最大塊節(jié)點(diǎn)數(shù)目的大??; A.若二級(jí)塊節(jié)點(diǎn)數(shù)目小于最大塊節(jié)點(diǎn)數(shù)目,說明當(dāng)前的二級(jí)塊沒有達(dá)到個(gè)數(shù)限制,使直接相連節(jié)點(diǎn)數(shù)減1,并將當(dāng)前節(jié)點(diǎn)加入隊(duì)列中,執(zhí)行步驟⑥; B.若二級(jí)塊節(jié)點(diǎn)數(shù)目大于最大塊節(jié)點(diǎn)數(shù)目,說明當(dāng)前二級(jí)塊已經(jīng)飽和,不能再加入新的節(jié)點(diǎn)元素,執(zhí)行步驟⑧; ⑧判斷鄰接節(jié)點(diǎn)的二級(jí)塊號(hào)是否與當(dāng)前二級(jí)塊號(hào)的值一致; A.若不一致,存儲(chǔ)鄰接節(jié)點(diǎn)的二級(jí)塊號(hào)到數(shù)據(jù)結(jié)構(gòu)鄰接塊信息中,并存儲(chǔ)邊界信息存儲(chǔ)到數(shù)據(jù)結(jié)構(gòu)塊邊界關(guān)系中,合并當(dāng)前節(jié)點(diǎn)當(dāng)前節(jié)點(diǎn)與鄰接節(jié)點(diǎn)的一級(jí)塊號(hào),使直接相連節(jié)點(diǎn)數(shù)減I,執(zhí)行步驟⑥; B.若一致,使二級(jí)塊號(hào)加1,直接相連節(jié)點(diǎn)數(shù)減1,執(zhí)行步驟⑥。
4.根據(jù)權(quán)利要求1所述的拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法,其特征在于:所述步驟(3)拓?fù)鋲K信息的更新與維護(hù)的具體步驟是: ①讀取數(shù)據(jù)庫中一級(jí)分塊和二級(jí)分塊的最大值,分別賦值給變量最大一級(jí)塊號(hào)、最大二級(jí)塊號(hào),執(zhí)行步 驟②; ②若執(zhí)行添加操作,則執(zhí)行步驟③;若執(zhí)行刪除操作,則執(zhí)行步驟⑧;若執(zhí)行修改操作,則先執(zhí)行步驟⑧再執(zhí)行步驟③; ③添加一個(gè)新節(jié)點(diǎn),從網(wǎng)絡(luò)中查找與其直接相連節(jié)點(diǎn)數(shù)并獲取數(shù)據(jù)庫中相連節(jié)點(diǎn)的拓?fù)鋲K信息,執(zhí)行步驟④; ④判斷直接相連節(jié)點(diǎn)數(shù)的值,若直接相連節(jié)點(diǎn)數(shù)為1,說明在原有的拓?fù)渚W(wǎng)絡(luò)中與新加的節(jié)點(diǎn)直接相連的節(jié)點(diǎn)只有一個(gè),執(zhí)行步驟⑤,若直接相連節(jié)點(diǎn)數(shù)為O,說明新節(jié)點(diǎn)為孤立節(jié)點(diǎn),使最大一級(jí)塊號(hào)、最大二級(jí)塊號(hào)的值各自加I并分別賦值給新節(jié)點(diǎn)的一、二級(jí)塊號(hào),然后保存相關(guān)信息,退出;若鄰接塊信息大于1,說明相連節(jié)點(diǎn)數(shù)目有多個(gè),執(zhí)行步驟⑥; ⑤設(shè)置新節(jié)點(diǎn)的一級(jí)塊號(hào)為鄰接節(jié)點(diǎn)的一級(jí)塊號(hào),讀取鄰接節(jié)點(diǎn)的二級(jí)塊節(jié)點(diǎn)數(shù)目;若二級(jí)塊節(jié)點(diǎn)數(shù)目大于1.5X最大塊節(jié)點(diǎn)數(shù)目,說明相連節(jié)點(diǎn)所在的二級(jí)塊不能再添加新的節(jié)點(diǎn),此時(shí)要重新創(chuàng)建一個(gè)新的二級(jí)塊,使最大二級(jí)塊號(hào)的值加I并設(shè)置其為新二級(jí)塊的塊號(hào);若二級(jí)塊節(jié)點(diǎn)數(shù)目小于1.5 X最大塊節(jié)點(diǎn)數(shù)目,說明相連節(jié)點(diǎn)所在的二級(jí)塊還可以接受新的節(jié)點(diǎn),設(shè)置新節(jié)點(diǎn)的二級(jí)塊為鄰接節(jié)點(diǎn)的二級(jí)塊號(hào),最后保存到數(shù)據(jù)庫中,退出; ⑥首先,判斷與新節(jié)點(diǎn)相連的每個(gè)節(jié)點(diǎn)所在的一級(jí)塊是否相同,若不相同,則合并一級(jí)塊并統(tǒng)一一級(jí)塊號(hào)為之前最大的一級(jí)塊的塊號(hào),然后進(jìn)一步判斷是否需要合并二級(jí)分塊,若需要?jiǎng)t直接合并,若不需要?jiǎng)t存儲(chǔ)兩個(gè)二級(jí)塊之間的邊界信息到塊邊界關(guān)系,并將相關(guān)信息保存到數(shù)據(jù)庫中;退出,若相同,則直接執(zhí)行步驟⑦; ⑦判斷與新節(jié)點(diǎn)相連的每個(gè)節(jié)點(diǎn)所在的二級(jí)塊是否相同,若不相同,則獲取所有相鄰節(jié)點(diǎn)的二級(jí)塊中最小塊的二級(jí)塊號(hào),并將其設(shè)為新節(jié)點(diǎn)的二級(jí)塊號(hào),同時(shí),增加若干條由于新節(jié)點(diǎn)導(dǎo)致的塊與塊之間的邊界信息,最后保存到數(shù)據(jù)庫中,退出;若相同,則執(zhí)行步驟④; ⑧刪除一個(gè)舊節(jié)點(diǎn),首先,讀取舊節(jié)點(diǎn)的拓?fù)湫畔?,刪除舊節(jié)點(diǎn)到其他相鄰節(jié)點(diǎn)的單向關(guān)系信息,然后,查看與舊節(jié)點(diǎn)直接相連的所有節(jié)點(diǎn)鄰接節(jié)點(diǎn)的直接相連節(jié)點(diǎn)數(shù),并從數(shù)據(jù)庫中讀取每個(gè)相連節(jié)點(diǎn)的拓?fù)湫畔?,若直接相連節(jié)點(diǎn)數(shù)為O,則直接退出;若直接相連節(jié)點(diǎn)數(shù)為1,則更新相鄰節(jié)點(diǎn)到的單向關(guān)聯(lián)關(guān)系,然后退出,若直接相連節(jié)點(diǎn)數(shù)大于1,執(zhí)行步驟⑨; ⑨判斷舊節(jié)點(diǎn)與所有直接相連的鄰接節(jié)點(diǎn)是否處在相同二級(jí)塊內(nèi),若是,由于刪除掉節(jié)點(diǎn)可能導(dǎo)致原來的二級(jí)塊不再是一個(gè)連通的整體,所以需要加載此二級(jí)塊的數(shù)據(jù)進(jìn)行重新進(jìn)行探測,重新探測二級(jí)塊,若原來的塊仍然是一個(gè)連通的整體,則直接退出,若原來的塊不再是一個(gè)連通的整體,則需要進(jìn)一步探測所在的一級(jí)塊是否是一個(gè)連通的整體,執(zhí)行步驟⑩,若不是,則刪除掉用舊節(jié)點(diǎn)來標(biāo)識(shí)的二級(jí)塊邊界信息,執(zhí)行步驟⑩; ⑩加載當(dāng)前一級(jí)塊數(shù)據(jù),并重新探測當(dāng)前一級(jí)塊是否仍然是一個(gè)連通的整體,若是,則直接退出,若不是,則需要對(duì)當(dāng)前一級(jí)塊單獨(dú)執(zhí)行分塊操作來重新劃分塊。
5.根據(jù)權(quán)利要求1所述的拓?fù)渚W(wǎng)絡(luò)的兩級(jí)分塊方法,其特征在于:所述步驟(4)基于兩級(jí)分塊的拓?fù)浞治龅木唧w步驟是: ①確定分析類型,若基于單節(jié)點(diǎn)分析,則執(zhí)行步驟②;若基于多節(jié)點(diǎn)分析,則執(zhí)行步驟③; ②輸入待分析節(jié)點(diǎn)單節(jié)點(diǎn)的信息,查詢數(shù)據(jù)庫讀取單節(jié)點(diǎn)的一級(jí)塊號(hào)和二級(jí)塊號(hào),然后加載整個(gè)一級(jí)塊或者二級(jí)塊的數(shù)據(jù)進(jìn)行分析; ③輸入多個(gè)節(jié)點(diǎn)的信息,分別獲取它們的一級(jí)塊號(hào)和二級(jí)塊號(hào),首先,判斷一級(jí)塊號(hào)是否相同,若不相同,則節(jié)點(diǎn)之間肯定不存在拓?fù)潢P(guān)系,若相同,則繼續(xù)判斷一級(jí)塊號(hào)是否相同,若相同,則加載二級(jí)塊號(hào)的塊數(shù)據(jù)進(jìn)行分析或者直接加載一級(jí)塊的數(shù)據(jù)進(jìn)行分析,若不相同,則需要分別加載每個(gè)節(jié)點(diǎn)所在的二級(jí)塊數(shù)據(jù),以及當(dāng)前一級(jí)塊內(nèi)的所有二級(jí)塊之間的邊界信息進(jìn)行拓?fù)浞治龌蛘咧苯蛹虞d一級(jí)塊的數(shù)據(jù)進(jìn)行分析。
【文檔編號(hào)】H04L12/28GK103684942SQ201310648160
【公開日】2014年3月26日 申請(qǐng)日期:2013年12月3日 優(yōu)先權(quán)日:2013年12月3日
【發(fā)明者】李寬榮, 韓雙立, 高勇, 趙光俊, 劉哲甫, 陸通 申請(qǐng)人:天津市普迅電力信息技術(shù)有限公司