楊遠(yuǎn)恒,田 蘭,卜英竹,鄒 蓓
(貴州省氣象信息中心,貴州 貴陽 550002)
一種極值查找算法在區(qū)域自動站資料質(zhì)量控制中的應(yīng)用
楊遠(yuǎn)恒,田 蘭,卜英竹,鄒 蓓
(貴州省氣象信息中心,貴州 貴陽 550002)
在區(qū)域自動氣象站兩要素資料的質(zhì)量控制研究中,根據(jù)兩要素資料的特點,實現(xiàn)一種極值查找算法,快速的定位極值數(shù)據(jù),提高查找的效率。該文著重分析該查找算法的實現(xiàn),以供探討。
區(qū)域自動站質(zhì)量控制;極值查找;算法
在區(qū)域自動氣象站兩要素資料的質(zhì)量控制研究中,利用歷史極值檢查方法進(jìn)行實時資料質(zhì)量控制時,需要將實時觀測值與歷史極端值進(jìn)行比較,以便過濾出可疑值。因此,在進(jìn)行實時質(zhì)量控制時,需要在極端歷史資料文件中查找到極端歷史值。一般方法是將每一個臺站的實時觀測值和所有臺站的歷史極值進(jìn)行逐一的比較,以便查找到臺站的歷史極值。這種方法處理效率較低,不能滿足質(zhì)量控制實時業(yè)務(wù)需求。為保證兩要素資料質(zhì)量控制的實時處理,避免因查找極端歷史值耗時,本文根據(jù)兩要素資料的特點,實現(xiàn)一種數(shù)據(jù)查找算法,以提高歷史極值檢查的效率。
由于區(qū)域兩要素站是近年來才新建的臺站,其歷史極端要素值是根據(jù)常規(guī)地面觀測站的歷史極端要素值,通過兩要素臺站與地面觀測站之間區(qū)域的對應(yīng)關(guān)系,實現(xiàn)兩要素臺站極值的初始化。在新生成的每個兩要素極值文件中,每個臺站對應(yīng)一條歷史極值記錄,例如,月極端最低溫度記錄如下:
R1101-78-66-35 1 76 104 121 142 81 34-24-66
其中,每條極值記錄包含了臺站編號(如R1101)以及1—12月的極端值。
兩要素臺站編號是5位數(shù)編碼,其中,“R”是固定標(biāo)識,R后第1位數(shù)字代表地區(qū)、第2位數(shù)字代表縣、第3、4位數(shù)字代表該縣的第幾個兩要素站。
按照臺站編碼的規(guī)則,可以將臺站編號(staID)分別按照“地區(qū)級編碼”和“縣級編碼”分成不同的臺站類別(stasort)。若按照“地區(qū)級編碼”,貴陽地區(qū)臺站類別為“R1***”,遵義地區(qū)的臺站類別為“R2***”,等等。同理,若按照“縣級編碼”,如貴陽地區(qū)又可以劃分為8種臺站類別:“R11**、R12**、R13**、R14**、R15**、R16**、R17**、R18**”,其他地區(qū)依次類推。因此,當(dāng)初始化兩要素極值文件時,首先,每條極值記錄以臺站編號為索引,然后根據(jù)“縣級編碼”進(jìn)行臺站類別歸類,每個臺站類別的臺站編號再按照第3、4位數(shù)字進(jìn)行排序,同時存儲到文件中,為實現(xiàn)歷史極值檢查算法做前期準(zhǔn)備。
通常,在資料的處理過程中,根據(jù)記錄的臺站編號,采取遍歷極值記錄的方式就可以查找到極值記錄,這種查找方式使得每一條實時記錄都需要循環(huán)遍歷極值數(shù)組。隨著兩要素臺站的不斷新建,處理兩要素資料的數(shù)據(jù)量不斷加大,為了提供更快更好的氣象服務(wù),兩要素資料的質(zhì)量控制處理需要具備較高的實時性,采取常規(guī)的查找方式,增加了算法的時間復(fù)雜度,在一定程度上降低了資料質(zhì)量控制處理的實時性。
為了能夠減少頻繁循環(huán)遍歷極值記錄,比較快的查找到極值,考慮對極值記錄進(jìn)行預(yù)處理,通過預(yù)處理的輔助幫助來實現(xiàn)快速定位極值的目的。也就是說,從極值文件中讀取記錄初始化極值數(shù)組時,預(yù)先對極值記錄按臺站類別進(jìn)行統(tǒng)計,結(jié)果存放在輔助數(shù)組中,當(dāng)查找極值時,由實時資料記錄的臺站編號,通過輔助數(shù)組計算,就可以縮小在極值數(shù)組中查找的范圍,提高了查找效率。并且存在一種特殊情況,如果臺站編號的第3、4位數(shù)字編碼是順序遞增編碼,那么可以直接計算出該臺站的歷史記錄的準(zhǔn)確位置,從而實現(xiàn)更加快捷的查找到極值記錄。
第一步,預(yù)處理實現(xiàn)輔助數(shù)組的初始化。在初始化極值數(shù)組(extremum)的同時,按照“縣級編碼”統(tǒng)計出每種臺站類別的臺站個數(shù),并存放到一個輔助數(shù)組(assistant)中。首先獲得極值記錄中的staID所屬的臺站類別,如果當(dāng)前記錄的staID所屬的臺站類別(curstasort)不等于前一條記錄臺站類別(prestasort),則表明前一個類別的臺站個數(shù)統(tǒng)計結(jié)束,開始統(tǒng)計下一個臺站類別的臺站個數(shù)。
第二步,準(zhǔn)確查找到極值數(shù)據(jù)。當(dāng)接收到實時數(shù)據(jù)記錄時,根據(jù)記錄的staID,準(zhǔn)確計算出對應(yīng)的極值在極值數(shù)組中的位置。例如:staID為R1303,通過輔助數(shù)組可以得知,在臺站類別“R13**”之前存在“R11**、R12**”2個臺站類別,“R13**”類別的初始位置(INITPOS)為前2個類別的統(tǒng)計數(shù)之和,即:
INITPOSR13**=INITPOSR11**+INITPOSR12**
考慮特殊情況:如果staID的第3、4位數(shù)字編碼是順序遞增,那么可以知道,“R1303”在“R13**”類別的位置是在第3個:N3,則“R1303”在極值數(shù)組中的位置POS為:
其中x為staID在某一類臺站類別中的第幾個臺站個數(shù)。當(dāng)計算出具體的位置,那么可以直接從數(shù)組中取出相應(yīng)的極值,達(dá)到了快速的找到極值的目的,優(yōu)化了程序的運(yùn)行。
但是,如果兩要素的臺站編號的第3、4位編碼不是按照順序遞增編碼,而是隨機(jī)編碼,通過以上計算就不能確定該臺站在該類別中的位置,而需要在同一個類別中,通過極值記錄的臺站編號(ext-StaID)和當(dāng)前記錄的臺站編號(curStaID)判斷而獲得極值。
通過判斷,縮小了查找極值數(shù)據(jù)的范圍,同樣實現(xiàn)了快速的定位極值的目的,優(yōu)化了程序的運(yùn)行。
通過輔助數(shù)組的方式查找氣象極值記錄,其輔助數(shù)組和極值記錄一一對應(yīng),當(dāng)極值文件中的記錄發(fā)生變化時,相應(yīng)的輔助數(shù)組中統(tǒng)計數(shù)也會發(fā)生變化。同時,該算法在實現(xiàn)查找極值的過程中降低了算法的時間復(fù)雜度,但增加一個輔助數(shù)組的開銷,增加了算法的空間復(fù)雜度。在區(qū)域自動站實時質(zhì)量控制處理時,能夠簡單、快速的查找到極值記錄,提高了兩要素實時資料質(zhì)量控制處理的效率,能夠滿足區(qū)域自動站實時質(zhì)量控制實時業(yè)務(wù)需求。
[1] 吳偉民,嚴(yán)蔚敏.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2009.
P413
B
1003-6598(2011)03-0050-02
2010-06-11
楊遠(yuǎn)恒(1979-),女,工程師,主要從事氣象數(shù)據(jù)處理工作。