王洋 楊亮 溫雅 趙秋月 安琪
摘?要:在某型部隊(duì)中,利用編組ID來標(biāo)識(shí)不同節(jié)點(diǎn)的身份。生成編組ID主要有兩個(gè)難點(diǎn):一是某型部隊(duì)身份難以直接確認(rèn)(因?yàn)榫幗M數(shù)據(jù)中包括所有部隊(duì)的信息,某型部隊(duì)沒有特殊標(biāo)識(shí));二是編組ID與現(xiàn)有編組數(shù)據(jù)之間沒有直接對(duì)應(yīng)的關(guān)系。本文提出一種自動(dòng)生成某型部隊(duì)編組ID的方法,一是利用遞歸算法尋找出某型部隊(duì),二是利用現(xiàn)有編組數(shù)據(jù)之間的相對(duì)關(guān)系來生成編組ID。通過實(shí)例驗(yàn)證,本文方法大大提高了生成編組ID的效率和穩(wěn)定性。
關(guān)鍵詞:編組ID;自動(dòng)生成
某型部隊(duì)中,利用編組ID來標(biāo)識(shí)本節(jié)點(diǎn)的身份。編組ID由八位十六進(jìn)制數(shù)組成,前四位目前設(shè)置為“0000”,第五位表示車輛類型,如果本級(jí)節(jié)點(diǎn)是部隊(duì)節(jié)點(diǎn),則用0表示;第六、七位分別為營(yíng)、連號(hào);第八位為車號(hào),如果本級(jí)節(jié)點(diǎn)是部隊(duì)節(jié)點(diǎn),則用0表示。生成編組ID主要有兩個(gè)難點(diǎn):一是編組數(shù)據(jù)中某型部隊(duì)沒有特殊標(biāo)識(shí),需要通過其他方法來篩選;二是編組ID與編組數(shù)據(jù)之間沒有直接對(duì)應(yīng)的關(guān)系,難以直接生成。之前的方法生成編組ID時(shí),是通過人工干預(yù)的方法對(duì)編組數(shù)據(jù)中的編組數(shù)據(jù)B(以下用CSB表示)進(jìn)行修改,使之與編組ID具有一一對(duì)應(yīng)的關(guān)系。這種方法的缺點(diǎn)是耗時(shí)比較長(zhǎng),往往需要幾十分鐘的時(shí)間;另外,這種方法局限性太大,人工干預(yù)多,要求操作人員按照事先規(guī)定的規(guī)則去修改編組數(shù)據(jù),不符合部隊(duì)的實(shí)際情況。基于此,本文提出一種自動(dòng)生成某型部隊(duì)編組ID的方法,提高生成編組ID的效率和穩(wěn)定性。
1 自動(dòng)篩選某型部隊(duì)算法
由于編組ID是針對(duì)某型部隊(duì)設(shè)置的,所以首先需要從編組數(shù)據(jù)中篩選出某型部隊(duì),確定某型部隊(duì)身份的依據(jù)是該部隊(duì)里面是否包含某幾型車輛。然而,某幾型車輛不一定直接掛在營(yíng)級(jí)節(jié)點(diǎn)下面,而是可能掛在指揮所、連級(jí)、排級(jí)、班級(jí)節(jié)點(diǎn)下面,所以難以直接確定某型部隊(duì)的身份。針對(duì)這種情況,本文使用遞歸算法來對(duì)編組數(shù)據(jù)進(jìn)行篩選,獲取某型部隊(duì):
步驟一:從編組數(shù)據(jù)中篩選出營(yíng)級(jí)部隊(duì)的編組數(shù)據(jù)A(以下用CSA表示),作為初始CSA;
步驟二:讀取編組數(shù)據(jù),獲取初始CSA的下級(jí)車輛CSA集合,[A1,A2,...,Ai,...,AM],其中1SymbolcB@
iSymbolcB@
M,Ai表示第i個(gè)CSA;
步驟三:判斷集合大小是否大于0,如果等于0,則函數(shù)返回false;如果大于0,則跳到步驟四;
步驟四:初始化i=1;
步驟五:判斷iSymbolcB@
M,如果是,跳到步驟六;如果不滿足,跳到步驟七;
步驟六:判斷Ai對(duì)應(yīng)的車是否為某幾型車輛;如果是,則返回true;如果不是,則i=i+1,跳到步驟五;
步驟七:根據(jù)初始CSA獲取其對(duì)應(yīng)的CSB;
步驟八:根據(jù)CSB獲取下級(jí)部隊(duì)CSB集合,[B1,B2,...,Bj,...,BN],其中1SymbolcB@
jSymbolcB@
N,Bj表示第j個(gè)CSB;
步驟九:判斷集合大小是否大于0,如果等于0,則函數(shù)返回false;如果大于0,則跳到步驟十;
步驟十:根據(jù)Bj獲取其對(duì)應(yīng)的CSA,并跳到步驟一。
至此,可以獲取到編組數(shù)據(jù)中所有的某型部隊(duì)營(yíng)級(jí)節(jié)點(diǎn),即初始CSA對(duì)應(yīng)的節(jié)點(diǎn)。
2 自動(dòng)生成編組ID方法
由于編組ID與現(xiàn)有編組數(shù)據(jù)之間沒有直接對(duì)應(yīng)的關(guān)系,難以直接給出,本文利用CSB之間的相對(duì)關(guān)系和車輛與部隊(duì)節(jié)點(diǎn)的隸屬關(guān)系來生成編組ID。CSB的特點(diǎn)是:下級(jí)節(jié)點(diǎn)的CSB是在上級(jí)節(jié)點(diǎn)CSB的基礎(chǔ)上加上兩位數(shù)字生成,同級(jí)節(jié)點(diǎn)的CSB后兩位是從“01”開始遞增的。由于本營(yíng)下面的車輛節(jié)點(diǎn)并不一定都是某幾型車輛,所以不能簡(jiǎn)單地利用CSB的后兩位來表示車號(hào)。編組ID是針對(duì)某型部隊(duì)的部隊(duì)節(jié)點(diǎn)和車輛節(jié)點(diǎn)生成的。獲取到某型部隊(duì)營(yíng)級(jí)節(jié)點(diǎn)后,本文根據(jù)編組數(shù)據(jù)自動(dòng)生成編組ID,方法如下:
步驟一:按照遍歷的順序?qū)δ承蜖I(yíng)級(jí)部隊(duì)進(jìn)行編號(hào),營(yíng)號(hào)從1開始遞增,如一營(yíng)編組ID為“00000100”;
步驟二:獲取一營(yíng)的下級(jí)車輛,編組ID根據(jù)車輛類型依次從1開始遞增,如一營(yíng)下面某個(gè)車的編組ID為“00004101”;
步驟三:獲取一營(yíng)下面各連級(jí)部隊(duì),依據(jù)是連級(jí)部隊(duì)的CSB是在營(yíng)級(jí)部隊(duì)CSB的基礎(chǔ)上加上兩位數(shù)字生成的,按照CSB由小到大的順序?yàn)楦鬟B生成編組ID,其連號(hào)是從一開始遞增,如一營(yíng)一連編組ID為“00000110”;
步驟四:獲取各連下面的車輛,包括排、班下面的車輛,判斷該車輛是否為某幾型車輛,如果是則按順序?yàn)樵撥囕v生成編組ID,如一營(yíng)一連下面某個(gè)車的編組ID為“00001111”;
步驟五:對(duì)其它營(yíng)按照步驟二到步驟四的順序進(jìn)行遍歷,為各連、各車輛生成編組ID。
3 算法驗(yàn)證
利用本文算法編寫程序,調(diào)用名錄接口將編組ID添加到名錄自定義屬性中,便于查看和后續(xù)調(diào)用。經(jīng)過實(shí)例驗(yàn)證,本文程序運(yùn)行的時(shí)間為0.979秒,大大提高了生成編組ID的效率。如圖2所示,“XX車”節(jié)點(diǎn)序號(hào)為1的自定義屬性項(xiàng)為編組ID,其屬性值為“00001111”,符合預(yù)期的結(jié)果。另外,名錄中其它各節(jié)點(diǎn)的編組ID屬性與預(yù)期的結(jié)果完全一致,從而驗(yàn)證了本文方法的可靠性。
4 結(jié)論
針對(duì)某型部隊(duì)編組ID難以直接生成的問題,提出一種自動(dòng)篩選某型部隊(duì)節(jié)點(diǎn)、并根據(jù)編組數(shù)據(jù)之間的相對(duì)關(guān)系來生成編組ID的方法。通過調(diào)用名錄接口增加自定義屬性,驗(yàn)證了本文方法的可靠性。