許伶俐+董會蘭
摘要:針對分段收費(fèi)系統(tǒng)中程序邏輯結(jié)構(gòu)復(fù)雜、維護(hù)升級困難等問題,提出了一種在計費(fèi)程序中運(yùn)用區(qū)間編碼的方法,結(jié)合實(shí)際應(yīng)用中的收費(fèi)標(biāo)準(zhǔn),闡述了區(qū)間編碼應(yīng)用原理,給出了區(qū)間基于區(qū)間編碼的編程模型,并對區(qū)間編碼方法的性能和優(yōu)勢進(jìn)行了討論。該方法可顯著改善程序的邏輯結(jié)構(gòu),方面計費(fèi)程序維護(hù)和升級。
關(guān)鍵詞:區(qū)間編碼;計費(fèi)程序;程序設(shè)計
中圖分類號:TP301
文獻(xiàn)標(biāo)識碼:A 文章編號:1672-7800(2015)003-0034-02
0 引言
日常生活中,很多計費(fèi)系統(tǒng)在不同時間段有不同的收費(fèi)標(biāo)準(zhǔn),例如電話通信計費(fèi)、出租車計費(fèi)、停車場收費(fèi)和網(wǎng)吧計費(fèi)等,在不同時段使用服務(wù)需要支付的費(fèi)用往往相差較大。這些收費(fèi)標(biāo)準(zhǔn)在數(shù)學(xué)上可使用分段函數(shù)來表示,但在使用編程語言實(shí)現(xiàn)時,需要比較復(fù)雜的分支選擇結(jié)構(gòu)來描述[1],當(dāng)計費(fèi)系統(tǒng)劃分的收費(fèi)區(qū)間較多時,程序的邏輯將變得非常復(fù)雜,如果程序設(shè)計使用了大量的“if… else…”選擇語句,那么程序的可讀性將變得極差[2-3],這不利于收費(fèi)系統(tǒng)的維護(hù)和升級。為此,本文提出了一種區(qū)間編碼方法,可以有效簡化程序設(shè)計,給計費(fèi)系統(tǒng)的維護(hù)和升級帶來方便。
1 算法設(shè)計
本文結(jié)合某停車場收費(fèi)實(shí)例詳述算法原理,停車場收費(fèi)規(guī)則如下:
將一晝夜劃分為兩個收費(fèi)時間段:(T0,T1)和(T1,T0),例如白天計費(fèi)時段(6:00-22:00)和夜晚計費(fèi)時段(22:00-6:00)。不同區(qū)間有不同的收費(fèi)標(biāo)準(zhǔn),區(qū)間(T0,T1):第一計費(fèi)時間單位收費(fèi)x元,每超過一個計費(fèi)單位按y元收費(fèi);區(qū)間(T1,T0):統(tǒng)一收費(fèi)z元,不論時間長短。
對于停車超過一個晝夜的情況,整個晝夜計費(fèi)為區(qū)間(T0,T1)和區(qū)間 (T1,T0)的計費(fèi)之和,不足一晝夜的部分,依照上述規(guī)則按實(shí)際情況進(jìn)行收費(fèi)。在上述計費(fèi)標(biāo)準(zhǔn)中,停車不滿一個計費(fèi)時間單位的按一個計費(fèi)時間單位計費(fèi)。
1.1 區(qū)間模型
根據(jù)上述收費(fèi)標(biāo)準(zhǔn),一晝夜以24小時制表示,將00:00作為晝夜分界點(diǎn)[4],其極坐標(biāo)如圖1所示。由于晝夜分界點(diǎn)的存在,實(shí)際上兩個收費(fèi)區(qū)間被劃分為3個收費(fèi)區(qū)間,即(T0,T1)、(T1,Td)和區(qū)間(Td,T0)。
1.2 計費(fèi)區(qū)間編碼
根據(jù)一晝夜計費(fèi)區(qū)間劃分情況,對每個計費(fèi)區(qū)間進(jìn)行二進(jìn)制行編碼[5]。本計費(fèi)系統(tǒng)中有3個計費(fèi)區(qū)間,需要兩位二進(jìn)制數(shù)來進(jìn)行編碼。對于有N個計費(fèi)區(qū)間的情況,編碼位數(shù)i與N滿足約束表達(dá)式:2i-1 對于任意的停車開始時間和停車結(jié)束時間都落在三者之中的任意一個區(qū)間,因此可以用一個區(qū)間對來表征一次停車,區(qū)間對用四位二進(jìn)制數(shù)表示前兩位代表停車開始時間所在區(qū)間,后兩位代表收費(fèi)結(jié)束時間所在區(qū)間,三區(qū)間的任意組合形成的區(qū)間對集合包括了所有計費(fèi)情況。窮舉每一種組合可以得出每一種收費(fèi)情況的編碼和計費(fèi)表達(dá)式,收費(fèi)編碼如表3所示。 2 編程模型 根據(jù)計費(fèi)編碼,可設(shè)計清晰的編程步驟,整個算法流程如圖2所示。整個程序設(shè)計基于switch分支選擇結(jié)構(gòu),首先計算t0~t1時間間隔內(nèi)包含整個晝夜的數(shù)目,即時間間隔除24小時所得的商數(shù),根據(jù)商數(shù)計算整晝夜收費(fèi)價格,然后根據(jù)t0、t1所在區(qū)間確定收費(fèi)編碼進(jìn)而確定要采用的計費(fèi)表達(dá)式,根據(jù)計費(fèi)表達(dá)式計算不足一晝夜部分的計費(fèi)價格,最后將與上述整晝夜收費(fèi)價格相加得到總的收費(fèi)價格。 計費(fèi)編碼占4bit,可選用一個字節(jié)表示。例如停車開始時間為09:00,結(jié)束時間是當(dāng)天23:00的情況,根據(jù)區(qū)間編碼,開始時間對應(yīng)的區(qū)間碼為01,結(jié)束時間對應(yīng)的區(qū)間碼為10,因此計費(fèi)編碼為(0b00000001<<2)+0b00000010 ,即0110,值為6。 3 性能分析 與普通分段收費(fèi)算法相比,引入?yún)^(qū)間編碼方法可以有效改善計費(fèi)算法設(shè)計,利用區(qū)間排列組合方法,可以窮舉任意一種收費(fèi)情況,防止遺漏;對區(qū)間進(jìn)行編碼后,在設(shè)計程序時,使用switch…case…語句替代if…else…語句,同時利用switch語句的順序執(zhí)行特性,對相同的收費(fèi)表達(dá)式進(jìn)行合并。以上述停車場計費(fèi)標(biāo)準(zhǔn)為例,使用區(qū)間編碼方法,至少可以省去12個“if…else…”語句對,極大改善了程序的邏輯結(jié)構(gòu)保證了程序的可讀性;同時該算法具有很好的可擴(kuò)展性,當(dāng)計費(fèi)區(qū)間增多,只需增加區(qū)間的編碼位數(shù)即可容納增加的計費(fèi)區(qū)間。隨著區(qū)間增多,區(qū)間編碼方法對計費(fèi)算法的輔助設(shè)計效果愈加明顯。 4 結(jié)語 本文主要闡述區(qū)間編碼方法在計費(fèi)系統(tǒng)中的應(yīng)用原理,所涉及的停車場收費(fèi)標(biāo)準(zhǔn)是實(shí)際運(yùn)用中的一個計費(fèi)系統(tǒng)特例,在其它收費(fèi)場合可能并不適用,例如收費(fèi)規(guī)則中沒有考慮不同區(qū)間之間的緩沖時間問題,但它具有分段收費(fèi)問題的一般特性,并不妨礙區(qū)間編碼方法的運(yùn)用。對于其它分段計費(fèi)系統(tǒng),可參照本文應(yīng)用原理設(shè)計收費(fèi)程序,改善程序的邏輯結(jié)構(gòu),方便計費(fèi)系統(tǒng)的維護(hù)和升級。 參考文獻(xiàn): [1] MARK ALLEN WEISS.數(shù)據(jù)結(jié)構(gòu)與算法分析[M].北京:機(jī)械工業(yè)出版社,2004. [2] 劉偉峰,王智廣.細(xì)粒度并行計算編程模型研究[J].微電子學(xué)與計算機(jī),2008,25(10):103-106. [3] 古思山,蔡樹彬,李師賢.從面向方面程序設(shè)計的定義到面向方面程序設(shè)計語言[J].計算機(jī)科學(xué),2011,38(10):133-139. [4] 姜濤.地-電離層波導(dǎo)中甚低頻波晝夜過渡期特性研究[J].通訊電源技術(shù),2014,31(3):43-45. [5] 朱付保,關(guān)佶紅,周水庚.基于區(qū)間編碼的GML索引與查詢[J].計算機(jī)科學(xué),2008,35(3):65-67. (責(zé)任編輯:孫 娟)