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