一種整數(shù)序列快速壓縮存儲算法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及一種整數(shù)序列快速壓縮存儲算法,屬于數(shù)據(jù)處理技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002] 工程結(jié)構(gòu)有限元計(jì)算分析時,使用整數(shù)編號來標(biāo)識結(jié)點(diǎn)與單元。在有限元計(jì)算分 析交互軟件設(shè)計(jì)時,如果需要對結(jié)點(diǎn)與單元進(jìn)行某類操作,往往會將操作的結(jié)點(diǎn)或者單元 的編號選擇出來,而由于大型結(jié)構(gòu)的網(wǎng)格數(shù)量較多(一般±木工程結(jié)構(gòu)采用實(shí)體單元進(jìn)行 分析時網(wǎng)格結(jié)點(diǎn)數(shù)量一般會在幾萬或幾十萬),選擇出來的該些編號如果使用數(shù)組單一存 儲的話數(shù)量較多,占用內(nèi)存較大,而且將該些數(shù)據(jù)呈現(xiàn)給用戶的時候,同質(zhì)數(shù)據(jù)多行顯示可 讀性較差,給用戶檢查數(shù)據(jù)帶來困難。由于上述整數(shù)序列存在等差數(shù)列的特點(diǎn),可W通過將 連續(xù)數(shù)字保存成等差數(shù)列的方式進(jìn)行壓縮存儲可W解決上述問題。但是由于整數(shù)編號序列 數(shù)量較大時,常規(guī)算法耗時較大,軟件實(shí)現(xiàn)時存在明顯停滯,用戶體驗(yàn)較差。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明的目的在于克服現(xiàn)有技術(shù)中的不足,提供一種整數(shù)序列快速壓縮存儲算 法,解決現(xiàn)有技術(shù)中數(shù)據(jù)壓縮存儲耗時長的技術(shù)問題。
[0004] 為達(dá)到解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是:一種整數(shù)序列快速壓縮 存儲算法,包括如下步驟:
[0005] 步驟一:將整數(shù)序列Tk中的整數(shù)元素Mi按從小到大的順序進(jìn)行排列,排序后的整 數(shù)序列為Sk;
[0006] 其中;k表示整數(shù)序列包含整數(shù)的數(shù)量,i= {1,2, 3......k};
[0007] 步驟二;從排序后的整數(shù)序列Sk中的未被壓縮的第一個整數(shù)元素My開始,查找所 有與組成等差數(shù)列的整數(shù)元素,分別組成公差不等的等差數(shù)列,其中;xGi;
[000引步驟將包含整數(shù)元素最多的等差數(shù)列使用非數(shù)字字符格式進(jìn)行存儲,具體 為:
[0009] Mm化&Mmax蝴a;
[0010] 其中;
[0011] Mmi。表示等差數(shù)列中最小的整數(shù)元素;
[0012] 表示等差數(shù)列中最大的整數(shù)元素;
[0013] D。表示等差數(shù)列的公差;
[0014] 符號為任意非數(shù)字字符,為連接關(guān)鍵字;為差值關(guān)鍵字;
[0015] 步驟四:循環(huán)步驟二~步驟=,直至整數(shù)序列中所有的整數(shù)元素全部被壓縮存儲。
[0016] 如果整數(shù)序列中某個整數(shù)無法與其它整數(shù)組成等差數(shù)列或只有2個整數(shù)可W組 成等差數(shù)列,則該整數(shù)壓縮后保持不變。
[0017] 步驟四種判定所有整數(shù)元素全部被壓縮的方法是:
[001引將整數(shù)序列為Sk中的整數(shù)元素M店義壓縮標(biāo)識F[i],當(dāng)F山=0代表Mi未被壓 縮,F(xiàn)[i] = 1代表Mi已被壓縮;當(dāng)集合F= {F[1],F(xiàn)[2],F(xiàn)巧],……,F(xiàn)比]}中已經(jīng)沒有非 0元素時,表示Sk中所有整數(shù)元素已被壓縮。
[0019] 與現(xiàn)有技術(shù)相比,本發(fā)明所達(dá)到的有益效果是;采用本發(fā)明專利的方法對整數(shù)序 列進(jìn)行壓縮,速度非常快,像幾萬甚至幾十萬的有限元編號數(shù)據(jù)可W控制在毫秒級完成壓 縮,而且壓縮后存儲量較小,比較適合應(yīng)用于有限元交互軟件設(shè)計(jì)中向用戶實(shí)時呈現(xiàn)數(shù)據(jù), 由于壓縮存儲過程能夠在用戶幾乎感受不到的時間內(nèi)完成,使得軟件與用戶的交互更加友 好。
【附圖說明】
[0020] 圖1是本發(fā)明的流程圖。
【具體實(shí)施方式】
[0021] 下面結(jié)合附圖對本發(fā)明作進(jìn)一步描述。W下實(shí)施例僅用于更加清楚地說明本發(fā)明 的技術(shù)方案,而不能W此來限制本發(fā)明的保護(hù)范圍。
[0022] 對于整數(shù)序列Tk= {M。M2,Ms,...Mi, ...MJ應(yīng)當(dāng)具有如下特點(diǎn):
[0023] 1、整數(shù)序列全部由整數(shù)組成;
[0024] 2、整數(shù)序列包含的任意兩個整數(shù)不相等,即當(dāng)i聲j,Mi聲Mj。
[0025] 其中,k表示整數(shù)序列包含整數(shù)的數(shù)量。
[0026] 如圖1所示,是本發(fā)明的流程圖,一種整數(shù)序列快速壓縮存儲算法的具體步驟如 下:
[0027] 步驟一:將整數(shù)序列Tk中的整數(shù)元素Mi按從小到大的順序進(jìn)行排列,排序后的整 數(shù)序列為Sk;
[002引其中;k表示整數(shù)序列包含整數(shù)的數(shù)量,i= {1,2, 3……k};
[0029] 步驟二;從排序后的整數(shù)序列Sk中的未被壓縮的第一個整數(shù)元素MJf始,查找所 有與My組成等差數(shù)列的整數(shù)元素,分別組成公差不等的等差數(shù)列,其中;xGi;
[0030] 步驟將包含整數(shù)元素最多的等差數(shù)列使用非數(shù)字字符格式進(jìn)行存儲,具體 為:
[003UMmh&Mm。,蝴。;
[0032] 其中;
[0033] Mmi。表示等差數(shù)列中最小的整數(shù)元素;
[0034] 表示等差數(shù)列中最大的整數(shù)元素;
[0035] D。表示等差數(shù)列的公差;
[0036] 符號為任意非數(shù)字字符;
[0037] 當(dāng)?shù)炔顢?shù)列的公差為1時,Mmh&M。。,蝴??筛呐c為Mmh&Mm。,。
[0038] 例如;W"to"表示為連接關(guān)鍵字,"by"表示差值關(guān)鍵字;整數(shù)序列Ss= (1、3、引 可W表示成"Ito化y2";整數(shù)序列S4= {1、2、3、4}可W表示成"lto4"。
[0039] 如果整數(shù)序列中某個整數(shù)無法與其它整數(shù)組成等差數(shù)列或只有2個整數(shù)可W組 成等差數(shù)列,則該整數(shù)壓縮后保持不變。
[0040] 步驟四:循環(huán)步驟二~步驟=,直至整數(shù)序列中所有的整數(shù)元素全部被壓縮存儲。 判定所有整數(shù)元素全部被壓縮的方法是:
[0041] 將整數(shù)序列為Sk中的整數(shù)元素Mi定義壓縮標(biāo)識F[i],在壓縮前,將所有壓縮標(biāo)識 置零,F(xiàn)[i] =0代表Mi未被壓縮,F(xiàn)[i] = 1代表Mi已被壓縮。當(dāng)集合F=伊[1],F(xiàn)巧], F巧],……,F(xiàn)比]}中已經(jīng)沒有非0元素時,表示Sk中所有整數(shù)元素已被壓縮。
[0042] 下面W具體實(shí)例說明本發(fā)明方法的實(shí)施過程:
[004引(1)假定整數(shù)序列為Tk= [10 9 5 1 3 13 45 30 21 17 1引;
[0044] 似對Tk進(jìn)行排序,Sk= [1 3 5 9 10 13 15 17 21 30 4引;
[0045] 0)初始化壓縮標(biāo)識F,F(xiàn)= [0 000000000 0];
[0046] (4)W第1個元素1為基點(diǎn),求后序元素Mh與1之間的差值序列,Mh需滿足 Mh《(Mk-Mi)/2與F比]=0,即小于等于(45 -1)/2 = 22;那么根據(jù)Sk的元素值可W判斷, 只需要求從第2個元素3至第9個元素21之間的數(shù)據(jù):
[0047] 0。=巧 4 8 9 12 14 16 20]
[0048] 妨判斷Sk中W1基點(diǎn),WD。為等差值,可能組成"ToBy"的壓縮形式的數(shù)量,例 如,W1為基點(diǎn),2為等差值,Sk中只有3、5可與1組成"Ito化y2",只有2個元素可與1組 成W2為等差值的壓縮存儲,即E1 = 2 ;再W1為基點(diǎn),D。中的第2個元素4為等差值,Sk 中有5、9、13、17、21可與1組成"lto2化y4",那E2 = 5 ;W此類推,可W得到E=巧5 2 1 1211];
[0049] (6)顯然,E2值最在,即W1為基點(diǎn),WD。的第2個元素4為等差值進(jìn)行壓縮后壓 縮量最大。那么,1壓縮后為"lto2化74",1、5、9、13、17、21各元素已經(jīng)被壓縮,設(shè)置對應(yīng)的 標(biāo)識為1,新的F值:
[0化0]F= [101 10101 10 0];
[0化1] (7)Sk第一個未壓縮數(shù)字變成3,W3為基點(diǎn),可W得到:
[0052] 0。= [7 12 27 42]
[0化引 E= [1 1 1 1]
[0化4]E的最大值為為1,3壓縮后仍然為3,新的F值;
[0化引 F= [1 1 1 10101 10 0]
[0化6] 巧)Sk第一個未壓縮數(shù)字變成10,W10為基點(diǎn),可W得到:
[0化7] 0。= [5 20 3引
[005引 E= [1 1 1]
[0化9]E的最大值為為1,10壓縮后仍然為10,新的F值;
[0060]F= [1 1 1 1 1 101 10 0]
[0061] 巧)Sk第一個未壓縮數(shù)字變成15,W15為基點(diǎn),可W得到:
[0062] 0。= [15 30]
[0063]E=巧 1]
[0064] E的最大值為為2,15壓縮后仍然為15to45byl5,新的F值;
[00 化]F= [1 1 1 1 1 1 1 1 1 1 1]
[0066] F中已經(jīng)沒有非0元素,Sk所有元素已經(jīng)被壓縮。
[0067] (10)整數(shù)序列Sk被壓縮后變成[lto2化y4 3 10 15to45byl5]。
[0068] 如表1所示,是采用非壓縮存儲方式和采用本發(fā)明提供的壓縮存儲方式的對比表 格,從表1中可W看出;非壓縮存儲方式在存儲10個結(jié)點(diǎn)的集中荷載時,必須記錄每個結(jié)點(diǎn) 的編號,共需要記錄10個整數(shù),壓縮存儲后只需要記錄"1192"s個整數(shù)即可,而且對于大 數(shù)據(jù)量的有限元編號操作,采用壓縮后的方式進(jìn)行管理,存儲量的優(yōu)勢會更加明顯。本發(fā)明 方法提出的整數(shù)序列快速壓縮存儲算法,大幅度提高了壓縮速度,減少了存儲空間的占用。
[0069] 表1;數(shù)據(jù)壓縮存儲的優(yōu)勢對比
[0070]
[0072] W上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人 員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可W做出若干改進(jìn)和變形,該些改進(jìn)和變形 也應(yīng)視為本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1. 一種整數(shù)序列快速壓縮存儲算法,其特征在于,包括如下步驟: 步驟一:將整數(shù)序列Tk中的整數(shù)元素Mi按從小到大的順序進(jìn)行排列,排序后的整數(shù)序 列為Sk; 其中:k表示整數(shù)序列包含整數(shù)的數(shù)量,i= {1,2, 3......k}; 步驟二:從排序后的整數(shù)序列Sk中的未被壓縮的第一個整數(shù)元素Mx開始,查找所有與Mx組成等差數(shù)列的整數(shù)元素,分別組成公差不等的等差數(shù)列,其中:xei; 步驟三:將包含整數(shù)元素最多的等差數(shù)列使用非數(shù)字字符格式進(jìn)行存儲,具體為: 其中: Mmin表示等差數(shù)列中最小的整數(shù)元素; Mmax表示等差數(shù)列中最大的整數(shù)元素; Dq表示等差數(shù)列的公差; 符號為任意非數(shù)字字符,"&"為連接關(guān)鍵字;為差值關(guān)鍵字; 步驟四:循環(huán)步驟二~步驟三,直至整數(shù)序列中所有的整數(shù)元素全部被壓縮存儲。2. 根據(jù)權(quán)利要求1所述的整數(shù)序列快速壓縮存儲算法,其特征在于,如果整數(shù)序列中 某個整數(shù)無法與其它整數(shù)組成等差數(shù)列或只有2個整數(shù)可以組成等差數(shù)列,則該整數(shù)壓縮 后保持不變。3. 根據(jù)權(quán)利要求1所述的整數(shù)序列快速壓縮存儲算法,其特征在于,步驟四種判定所 有整數(shù)元素全部被壓縮的方法是: 將整數(shù)序列為Sk中的整數(shù)元素Mi定義壓縮標(biāo)識F[i],當(dāng)F[i] =O代表Mi未被壓縮,F(xiàn)[i] = 1代表Mi已被壓縮;當(dāng)集合F= {F[l],F(xiàn)[2],F(xiàn)[3],……,F(xiàn)[k]}中已經(jīng)沒有非O 元素時,表示Sk中所有整數(shù)元素已被壓縮。
【專利摘要】本發(fā)明公開了一種整數(shù)序列快速壓縮存儲算法,包括:將整數(shù)序列Tk中的整數(shù)元素按從小到大的順序進(jìn)行排列;從未被壓縮的第一個整數(shù)元素開始,查找所有與其組成等差數(shù)列的整數(shù)元素,分別組成公差不等的等差數(shù)列;將包含整數(shù)元素最多的等差數(shù)列使用非數(shù)字字符格式進(jìn)行壓縮存儲,具體為:Mmin&Mmax*Dq;其中:Mmin表示等差數(shù)列中最小的整數(shù)元素;Mmax表示等差數(shù)列中最大的整數(shù)元素;Dq表示等差數(shù)列的公差;“&”、“*”為任意非數(shù)字字符,“&”為連接關(guān)鍵字;“*”為差值關(guān)鍵字。本發(fā)明方法對整數(shù)序列進(jìn)行壓縮,速度快,且壓縮后存儲量較小,比較適合應(yīng)用于有限元交互軟件設(shè)計(jì)中向用戶實(shí)時呈現(xiàn)數(shù)據(jù)。
【IPC分類】H03M7/30
【公開號】CN104901703
【申請?zhí)枴緾N201510162747
【發(fā)明人】馬志國
【申請人】河海大學(xué)
【公開日】2015年9月9日
【申請日】2015年4月8日