本發(fā)明實(shí)施例涉及數(shù)據(jù)壓縮領(lǐng)域,特別涉及一種整數(shù)壓縮方法及裝置。
背景技術(shù):
在計(jì)算機(jī)網(wǎng)絡(luò)中,為了提高數(shù)據(jù)的傳輸及存儲(chǔ)效率,在確保數(shù)據(jù)完整性的前提下,數(shù)據(jù)在傳輸及存儲(chǔ)前需要經(jīng)過(guò)數(shù)據(jù)壓縮處理。
相關(guān)技術(shù)中,計(jì)算機(jī)通常采用哈夫曼編碼算法對(duì)數(shù)據(jù)進(jìn)行數(shù)據(jù)壓縮處理。比如,計(jì)算機(jī)在傳輸大量32位IP(Internet Protocol,互聯(lián)網(wǎng)協(xié)議)地址前,通常采用哈夫曼編碼算法對(duì)IP地址進(jìn)行編碼壓縮,從而對(duì)壓縮后的數(shù)據(jù)進(jìn)行傳輸。然而,利用哈夫曼編碼算法對(duì)數(shù)據(jù)進(jìn)行編碼壓縮時(shí),需要進(jìn)行兩次完整的數(shù)據(jù)遍歷,其中,第一次遍歷用于統(tǒng)計(jì)數(shù)據(jù)的出現(xiàn)概率,而第二次遍歷用于產(chǎn)生編碼,導(dǎo)致哈夫曼編碼算法的編碼速度較慢,影響數(shù)據(jù)的壓縮速度。
技術(shù)實(shí)現(xiàn)要素:
為了解決相關(guān)技術(shù)中哈夫曼編碼算法的編碼速度較慢,影響數(shù)據(jù)壓縮速度的問(wèn)題,本發(fā)明實(shí)施例提供了一種整數(shù)壓縮方法及裝置。所述技術(shù)方案如下:
根據(jù)本發(fā)明實(shí)施例的第一方面,提供了一種整數(shù)壓縮方法,該方法包括:
獲取待壓縮整數(shù)集合,待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù)的整數(shù)長(zhǎng)度相同,且各個(gè)待壓縮整數(shù)的數(shù)值互不相同;
對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,目標(biāo)位數(shù)組中的數(shù)組位與壓縮整數(shù)集合中的待壓縮整數(shù)對(duì)應(yīng);
通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)。
可選的,對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,包括:
根據(jù)待壓縮整數(shù)的整數(shù)長(zhǎng)度生成初始位數(shù)組,初始位數(shù)組中包含2n個(gè)數(shù)組位,且各個(gè)數(shù)組位均為0,n為整數(shù)長(zhǎng)度;
讀取待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù);
將待壓縮整數(shù)在初始位數(shù)組中對(duì)應(yīng)的數(shù)組位設(shè)置為1,生成目標(biāo)位數(shù)組。
可選的,對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組之前,包括:
獲取內(nèi)存容量;
根據(jù)待壓縮整數(shù)的整數(shù)長(zhǎng)度計(jì)算目標(biāo)位數(shù)組的預(yù)計(jì)內(nèi)存占用量,預(yù)計(jì)內(nèi)存占用量為2nbit,n為整數(shù)長(zhǎng)度;
若預(yù)計(jì)內(nèi)存占用量小于內(nèi)容容量,則執(zhí)行對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組的步驟。
可選的,通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)之前,還包括:
獲取待壓縮集合中待壓縮整數(shù)的數(shù)量以及待壓縮整數(shù)的整數(shù)長(zhǎng)度;
根據(jù)待壓縮整數(shù)的數(shù)量以及整數(shù)長(zhǎng)度計(jì)算待壓縮整數(shù)集合的極限壓縮率;
若極限壓縮率小于預(yù)設(shè)壓縮率閾值,則執(zhí)行通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)的步驟。
可選的,極限壓縮率=mn÷{-2n×[m/2n×log2(m/2n)+(1-m/2n)×log2(1-m/2n)]},
其中,m為待壓縮整數(shù)的數(shù)量,n為整數(shù)長(zhǎng)度。
可選的,預(yù)定壓縮算法為區(qū)間編碼算法或算數(shù)編碼算法。
根據(jù)本發(fā)明實(shí)施例的第二方面,提供了一種整數(shù)壓縮裝置,該裝置包括:
第一獲取模塊,用于獲取待壓縮整數(shù)集合,待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù)的整數(shù)長(zhǎng)度相同,且各個(gè)待壓縮整數(shù)的數(shù)值互不相同;
生成模塊,用于對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,目標(biāo)位數(shù)組中的數(shù)組位與壓縮整數(shù)集合中的待壓縮整數(shù)對(duì)應(yīng);
壓縮模塊,用于通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)。
可選的,生成模塊,包括:
第一生成單元,用于根據(jù)待壓縮整數(shù)的整數(shù)長(zhǎng)度生成初始位數(shù)組,初始位數(shù)組中包含2n個(gè)數(shù)組位,且各個(gè)數(shù)組位均為0,n為整數(shù)長(zhǎng)度;
讀取單元,用于讀取待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù);
第二生成單元,用于將待壓縮整數(shù)在初始位數(shù)組中對(duì)應(yīng)的數(shù)組位設(shè)置為1,生成目標(biāo)位數(shù)組。
可選的,該裝置,包括:
第二獲取模塊,用于獲取內(nèi)存容量;
第一計(jì)算模塊,用于根據(jù)待壓縮整數(shù)的整數(shù)長(zhǎng)度計(jì)算目標(biāo)位數(shù)組的預(yù)計(jì)內(nèi)存占用量,預(yù)計(jì)內(nèi)存占用量為2nbit,n為整數(shù)長(zhǎng)度;
生成模塊,還用于在預(yù)計(jì)內(nèi)存占用量小于內(nèi)容容量時(shí),對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組。
可選的,該裝置,還包括:
第三獲取模塊,用于獲取待壓縮集合中待壓縮整數(shù)的數(shù)量以及待壓縮整數(shù)的整數(shù)長(zhǎng)度;
第二計(jì)算模塊,用于根據(jù)待壓縮整數(shù)的數(shù)量以及整數(shù)長(zhǎng)度計(jì)算待壓縮整數(shù)集合的極限壓縮率;
壓縮模塊,還用于在極限壓縮率小于預(yù)設(shè)壓縮率閾值時(shí),通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)。
可選的,極限壓縮率=mn÷{-2n×[m/2n×log2(m/2n)+(1-m/2n)×log2(1-m/2n)]},
其中,m為待壓縮整數(shù)的數(shù)量,n為整數(shù)長(zhǎng)度。
可選的,預(yù)定壓縮算法為區(qū)間編碼算法或算數(shù)編碼算法。
通過(guò)遍歷待壓縮整數(shù)集合中的各個(gè)待壓縮整數(shù),從而對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,并進(jìn)一步對(duì)生成的目標(biāo)位數(shù)組進(jìn)行壓縮,得到相應(yīng)的壓縮數(shù)據(jù),進(jìn)而實(shí)現(xiàn)對(duì)整數(shù)集合的壓縮;相較于哈夫曼編碼算法重復(fù)遍歷整數(shù)集合影響壓縮速度,本發(fā)明實(shí)施例中,整個(gè)壓縮過(guò)程中只需對(duì)待壓縮整數(shù)集合進(jìn)行一次遍歷,從而提高了整數(shù)集合的壓縮速度。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1示出了本發(fā)明一個(gè)實(shí)施例提供的整數(shù)壓縮方法的方法流程圖;
圖2A示出了本發(fā)明另一個(gè)實(shí)施例提供的整數(shù)壓縮方法的方法流程圖;
圖2B是服務(wù)器通過(guò)桶排序生成目標(biāo)位數(shù)組的實(shí)施示意圖;
圖2C示出了本發(fā)明另一個(gè)實(shí)施例提供的整數(shù)壓縮方法的方法流程圖;
圖2D示出了本發(fā)明另一個(gè)實(shí)施例提供的整數(shù)壓縮方法的方法流程圖;
圖2E是待壓縮整數(shù)集合的極限壓縮率與待壓縮整數(shù)數(shù)量的關(guān)系示意圖;
圖3示出了本發(fā)明一個(gè)實(shí)施例提供的整數(shù)壓縮裝置的結(jié)構(gòu)方框圖;
圖4示出了本發(fā)明另一個(gè)實(shí)施例提供的整數(shù)壓縮裝置的結(jié)構(gòu)方框圖;
圖5示出了本發(fā)明一個(gè)實(shí)施例提供的整數(shù)壓縮裝置的框圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
本發(fā)明各個(gè)實(shí)施例提供的整數(shù)壓縮方法用于具有數(shù)據(jù)處理功能的計(jì)算機(jī)或服務(wù)器,其中,該服務(wù)器為單臺(tái)服務(wù)器、多臺(tái)服務(wù)器構(gòu)成的服務(wù)器集群或云計(jì)算中心。并且,由于在壓縮過(guò)程中需要根據(jù)待壓縮整數(shù)集合生成位數(shù)組,而該位數(shù)組存儲(chǔ)在內(nèi)存中,因此,為了避免壓縮過(guò)程因內(nèi)存不足導(dǎo)致壓縮失敗,計(jì)算機(jī)或服務(wù)器需要配置大容量?jī)?nèi)存。為了方便描述,下述實(shí)施例以該整數(shù)壓縮方法用于服務(wù)器為例進(jìn)行說(shuō)明,并不對(duì)本發(fā)明構(gòu)成限定。
請(qǐng)參考圖1,其示出了本發(fā)明一個(gè)實(shí)施例提供的整數(shù)壓縮方法的方法流程圖。該方法包括:
步驟101,獲取待壓縮整數(shù)集合,待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù)的整數(shù)長(zhǎng)度相同,且各個(gè)待壓縮整數(shù)的數(shù)值互不相同。
其中,本發(fā)明各個(gè)實(shí)施例所述的待壓縮整數(shù)均為二進(jìn)制整數(shù)。
在一種可能的實(shí)施方式中,當(dāng)服務(wù)器需要對(duì)IP地址白名單進(jìn)行傳輸時(shí),獲取到的待壓縮整數(shù)集合即為IP地址集合,待壓縮整數(shù)集合中包含的待壓縮整數(shù)即為32位(二進(jìn)制)的IP地址。
步驟102,對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,目標(biāo)位數(shù)組中的數(shù)組位與壓縮整數(shù)集合中的待壓縮整數(shù)對(duì)應(yīng)。
獲取到待壓縮整數(shù)集合后,服務(wù)器即遍歷讀取待壓縮整數(shù)集合中的各個(gè)待壓縮整數(shù),并對(duì)待壓縮整數(shù)進(jìn)行桶排序。當(dāng)對(duì)待壓縮整數(shù)集合完成完整遍歷后,服務(wù)器即根據(jù)桶排序結(jié)果生成目標(biāo)位數(shù)組。
其中,該目標(biāo)位數(shù)組中各個(gè)數(shù)組位的取值為0或1,且目標(biāo)位數(shù)組中取值為1的數(shù)組位的數(shù)量與待壓縮整數(shù)集合中待壓縮整數(shù)的數(shù)量相同,即目標(biāo)位數(shù)組中取值為1的數(shù)組位與待壓縮整數(shù)集合中的待壓縮整數(shù)一一對(duì)應(yīng)。
步驟103,通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)。
在生成目標(biāo)位數(shù)組的過(guò)程中,服務(wù)器獲取目標(biāo)位數(shù)組中取值為1的位數(shù)組的數(shù)量(即待壓縮整數(shù)的數(shù)量),并進(jìn)一步根據(jù)目標(biāo)位數(shù)組中0和1的概率,通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,從而得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)。
可選的,服務(wù)器采用的預(yù)定壓縮算法為區(qū)間編碼算法或算數(shù)編碼算法。
與傳統(tǒng)的哈夫曼編碼算法相比,利用本實(shí)施例提供的整數(shù)壓縮方法對(duì)整數(shù)集合進(jìn)行壓縮時(shí),服務(wù)器通過(guò)桶排序生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,僅需要遍歷一次待壓縮整數(shù)集合(步驟102),且算法復(fù)雜度較低(為O(n)),極大的提高了壓縮整數(shù)集合的速度。
同時(shí),服務(wù)器并非直接對(duì)待壓縮整數(shù)集合進(jìn)行壓縮,而是利用待壓縮整數(shù)集合的無(wú)序性(即該待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù)之間沒(méi)有先后順序)及無(wú)重復(fù)性的特點(diǎn),采用桶排序的方法得到目標(biāo)位數(shù)組,并通過(guò)壓縮目標(biāo)位數(shù)組的方式實(shí)現(xiàn)整數(shù)集合壓縮,從而減少了壓縮時(shí)的信息熵,提高了待壓縮整數(shù)集合的壓縮率。
綜上所述,本實(shí)施例提供的整數(shù)壓縮方法中,通過(guò)遍歷待壓縮整數(shù)集合中的各個(gè)待壓縮整數(shù),從而對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,并進(jìn)一步對(duì)生成的目標(biāo)位數(shù)組進(jìn)行壓縮,得到相應(yīng)的壓縮數(shù)據(jù),進(jìn)而實(shí)現(xiàn)對(duì)整數(shù)集合的壓縮;相較于哈夫曼編碼算法重復(fù)遍歷整數(shù)集合影響壓縮速度,本發(fā)明實(shí)施例中,整個(gè)壓縮過(guò)程中只需對(duì)待壓縮整數(shù)集合進(jìn)行一次遍歷,從而提高了整數(shù)集合的壓縮速度。
在具體應(yīng)用場(chǎng)景下,服務(wù)器中存儲(chǔ)有不同組織的白名單,且各個(gè)白名單中IP地址達(dá)到數(shù)百萬(wàn)。當(dāng)需要快速傳輸這些白名單時(shí),服務(wù)器即采用本發(fā)明實(shí)施例提供的整數(shù)壓縮方法對(duì)白名單中的IP地址集合進(jìn)行壓縮。下面采用示意性的實(shí)施例對(duì)壓縮IP地址集合的過(guò)程進(jìn)行說(shuō)明。
請(qǐng)參考圖2A,其示出了本發(fā)明另一個(gè)實(shí)施例提供的整數(shù)壓縮方法的方法流程圖。該方法包括:
步驟201,獲取待壓縮整數(shù)集合,待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù)的整數(shù)長(zhǎng)度相同,且各個(gè)待壓縮整數(shù)的數(shù)值互不相同。
當(dāng)需要對(duì)白名單中的IP地址進(jìn)行壓縮時(shí),服務(wù)器即獲取包含各個(gè)IP地址的IP地址集合。比如,服務(wù)器獲取到的IP地址集合中包含300萬(wàn)個(gè)IP地址,且每個(gè)IP地址的大小為4Byte,則該IP地址集合的原始大小即為3000000×4=12000000Byte=11.44MB。
步驟202,根據(jù)待壓縮整數(shù)的整數(shù)長(zhǎng)度生成初始位數(shù)組,初始位數(shù)組中包含2n個(gè)數(shù)組位,且各個(gè)數(shù)組位均為0,n為整數(shù)長(zhǎng)度。
在對(duì)待壓縮整數(shù)進(jìn)行桶排序前,服務(wù)器需要根據(jù)待壓縮整數(shù)的整數(shù)長(zhǎng)度在內(nèi)存中生成初始位數(shù)組,方便后續(xù)根據(jù)待壓縮整數(shù)對(duì)初始位數(shù)組中對(duì)應(yīng)的數(shù)組位進(jìn)行標(biāo)定。其中,初始位數(shù)組中各個(gè)數(shù)組位的初始值均為0,且各個(gè)數(shù)組位對(duì)應(yīng)一個(gè)整數(shù)。
示意性的,如圖2B所示,當(dāng)待壓縮整數(shù)為32位IP地址時(shí),服務(wù)器生成的初始位數(shù)組中即包含232個(gè)數(shù)組位(所占的內(nèi)存空間為232bit=512MB),且各個(gè)數(shù)組位均為0。其中,該初始位數(shù)組中第1個(gè)數(shù)組位對(duì)應(yīng)IP地址0.0.0.0(即32位均為0的IP地址),該初始位數(shù)組中最后1個(gè)數(shù)組位對(duì)應(yīng)IP地址255.255.255.255(即32位均為1的IP地址)。該初始位數(shù)組中倒數(shù)第3個(gè)數(shù)組位對(duì)應(yīng)IP地址255.255.255.253。
步驟203,讀取待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù)。
生成初始位數(shù)組后,服務(wù)器遍歷讀取待壓縮整數(shù)集合中的各個(gè)待壓縮整數(shù)。
比如,當(dāng)獲取到的IP地址集合中包含300萬(wàn)個(gè)IP地址時(shí),服務(wù)器順序讀取IP地址集合中的各個(gè)IP地址。
步驟204,將待壓縮整數(shù)在初始位數(shù)組中對(duì)應(yīng)的數(shù)組位設(shè)置為1,生成目標(biāo)位數(shù)組。
對(duì)于待壓縮整數(shù)集合中的各個(gè)待壓縮整數(shù),服務(wù)器根據(jù)讀取到的待壓縮整數(shù)的數(shù)值,將初始位數(shù)組中對(duì)應(yīng)的數(shù)組位由0設(shè)置為1(該過(guò)程又被稱為在桶內(nèi)對(duì)應(yīng)位置進(jìn)行描點(diǎn))。由于該初始位數(shù)組能夠覆蓋所有n位的整數(shù),因此,待壓縮整數(shù)集合中的各個(gè)待壓縮整數(shù)均能在初始位數(shù)組中找到對(duì)應(yīng)的數(shù)組位。當(dāng)完整遍歷待壓縮整數(shù)集合后,即生成壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組。
通過(guò)上述步驟,根據(jù)目標(biāo)位數(shù)組中取值為1的數(shù)組位的數(shù)量,服務(wù)器可以進(jìn)一步確定待壓縮整數(shù)集合中待壓縮整數(shù)的數(shù)量。
比如,如圖2B所示,當(dāng)讀取到IP地址為0.0.0.0時(shí),服務(wù)器即將初始位數(shù)組中的第1個(gè)數(shù)組位設(shè)置為1;當(dāng)讀取到IP地址為255.255.255.253時(shí),服務(wù)器即將初始位數(shù)組中的倒數(shù)第3個(gè)數(shù)組位設(shè)置為1;當(dāng)讀取到IP地址為255.255.255.255時(shí),服務(wù)器即將初始位數(shù)組中的最后一個(gè)數(shù)組位設(shè)置為1。
步驟205,通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)。
通過(guò)上述步驟201至204,服務(wù)器得到固定大小的中間數(shù)據(jù)(即目標(biāo)位數(shù)組),進(jìn)一步的,服務(wù)器對(duì)該中間數(shù)據(jù)進(jìn)行壓縮,從而得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù),
可選的,通過(guò)分析取值為1的位數(shù)組在目標(biāo)位數(shù)組中的分布情況,服務(wù)器能夠確定IP地址集合中IP地址的分布密度,即各個(gè)網(wǎng)段的密度情況,從而根據(jù)需求對(duì)部分網(wǎng)段的IP地址進(jìn)行過(guò)濾(將數(shù)組位的值置為0),本發(fā)明實(shí)施例并不對(duì)此進(jìn)行限定。
在一種可能的實(shí)施方式中,當(dāng)IP地址集合中包含300萬(wàn)個(gè)IP地址,且服務(wù)器采用區(qū)間編碼算法對(duì)生成的目標(biāo)位數(shù)組進(jìn)行壓縮時(shí),取值為1的數(shù)組位在目標(biāo)位數(shù)組中出現(xiàn)的概率P1=3000000/232=0.000698,取值為0的數(shù)組位在目標(biāo)位數(shù)組中出現(xiàn)的概率P0=1-3000000/232=0.999302,即目標(biāo)位數(shù)組中1的信息量為Ie=-log20.000698,目標(biāo)位數(shù)組中0的信息量為Ie=-log20.999302。進(jìn)一步的,目標(biāo)位數(shù)組中各個(gè)數(shù)據(jù)為的平均信息量為I=-(P1log2P1+P0log2P0)=0.0083,即該目標(biāo)位數(shù)組的理論壓縮值為512MB×0.0083=4.25MB。最終,300萬(wàn)個(gè)IP地址由原先的11.44MB壓縮為4.25MB,壓縮率達(dá)到了4.25÷11.44=37%。
綜上所述,本實(shí)施例提供的整數(shù)壓縮方法中,通過(guò)遍歷待壓縮整數(shù)集合中的各個(gè)待壓縮整數(shù),從而對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,并進(jìn)一步對(duì)生成的目標(biāo)位數(shù)組進(jìn)行壓縮,得到相應(yīng)的壓縮數(shù)據(jù),進(jìn)而實(shí)現(xiàn)對(duì)整數(shù)集合的壓縮;相較于哈夫曼編碼算法重復(fù)遍歷整數(shù)集合影響壓縮速度,本發(fā)明實(shí)施例中,整個(gè)壓縮過(guò)程中只需對(duì)待壓縮整數(shù)集合進(jìn)行一次遍歷,從而提高了整數(shù)集合的壓縮速度。
由上述步驟202可知,服務(wù)器生成的初始位數(shù)組存儲(chǔ)在內(nèi)存中,為了避免因生成的初始位數(shù)組過(guò)大而無(wú)法存儲(chǔ)在內(nèi)存中,導(dǎo)致無(wú)法進(jìn)行后續(xù)的數(shù)據(jù)壓縮,在一種可能的實(shí)施方式中,如圖2C所示,上述步驟202之前還包括如下步驟。
步驟206,獲取內(nèi)存容量。
在一種可能的實(shí)施方式中,服務(wù)器獲取到待壓縮整數(shù)集合后,進(jìn)一步獲取自身的內(nèi)存容量。需要說(shuō)明的是,本步驟與步驟201之間不存在嚴(yán)格的先后關(guān)系,本實(shí)施例僅以步驟201在步驟206之前執(zhí)行為例進(jìn)行說(shuō)明,并不對(duì)兩者的先后順序構(gòu)成限定。
比如,服務(wù)器獲取到自身的內(nèi)存容量為32GB。
步驟207,根據(jù)待壓縮整數(shù)的整數(shù)長(zhǎng)度計(jì)算目標(biāo)位數(shù)組的預(yù)計(jì)內(nèi)存占用量,預(yù)計(jì)內(nèi)存占用量為2nbit,n為整數(shù)長(zhǎng)度。
獲取到待壓縮整數(shù)集合后,服務(wù)器根據(jù)待壓縮整數(shù)集合中待壓縮整數(shù)的整數(shù)長(zhǎng)度計(jì)算生成的初始位數(shù)組(與最終生成的目標(biāo)位數(shù)組的大小相同)的預(yù)計(jì)內(nèi)存占用量,其中,當(dāng)待壓縮整數(shù)的整數(shù)長(zhǎng)度為n時(shí),初始位數(shù)組的預(yù)計(jì)內(nèi)存占用量為2nbit。
比如,當(dāng)待壓縮整數(shù)為IP地址時(shí),服務(wù)器生成的初始位數(shù)組的預(yù)計(jì)內(nèi)存占用量為232bit=512MB。
計(jì)算得到預(yù)計(jì)內(nèi)存占用量后,服務(wù)器檢測(cè)預(yù)計(jì)內(nèi)存占用量是否小于服務(wù)器的內(nèi)存容量,若預(yù)計(jì)內(nèi)存占用量小于服務(wù)器的內(nèi)存容量,服務(wù)器則執(zhí)行下述步驟202;若預(yù)計(jì)內(nèi)存占用量大于服務(wù)器的內(nèi)存容量,服務(wù)器則發(fā)出提示,指示采用其他對(duì)內(nèi)存需求較低的算法(比如哈夫曼編碼算法或數(shù)值編碼算法)進(jìn)行壓縮。
本實(shí)施例中,服務(wù)器獲取到待壓縮整數(shù)集合后,根據(jù)待壓縮整數(shù)集合中待壓縮整數(shù)的整數(shù)長(zhǎng)度計(jì)算生成的位數(shù)組的預(yù)計(jì)內(nèi)存占用量,并根據(jù)該預(yù)計(jì)內(nèi)存占用量確定自身內(nèi)存是否能夠完整存儲(chǔ)該位數(shù)組,避免因無(wú)法完整存儲(chǔ)位數(shù)組而導(dǎo)致壓縮失敗。
采用本發(fā)明實(shí)施例提供的整數(shù)壓縮方法進(jìn)行整數(shù)集合壓縮時(shí),待壓縮整數(shù)集合最終的壓縮率與待壓縮整數(shù)的整數(shù)長(zhǎng)度以及數(shù)量有關(guān)。在整數(shù)長(zhǎng)度相同的情況下,待壓縮整數(shù)的數(shù)量越多,壓縮整數(shù)集合的壓縮率越低(壓縮效果越好),壓縮整數(shù)的數(shù)量越少,壓縮整數(shù)集合的壓縮率高(壓縮效果越差)。因此,當(dāng)待壓縮整數(shù)集合需要滿足預(yù)定壓縮率要求時(shí),服務(wù)器需要預(yù)先計(jì)算待壓縮整數(shù)集合的極限壓縮率,并在該極限壓縮率符合壓縮率要求時(shí)進(jìn)行壓縮。在一種可能的實(shí)施方式中,如圖2D所示,上述步驟205之前,還包括如下步驟。
步驟208,獲取待壓縮集合中待壓縮整數(shù)的數(shù)量以及待壓縮整數(shù)的整數(shù)長(zhǎng)度。
服務(wù)器生成目標(biāo)位數(shù)組后,獲取待壓縮整數(shù)的整數(shù)長(zhǎng)度,并進(jìn)一步根據(jù)目標(biāo)位數(shù)組中取值為1的數(shù)組位的數(shù)量確定待壓縮集合中待壓縮整數(shù)的數(shù)量。
比如,當(dāng)對(duì)IP地址集合進(jìn)行壓縮,且目標(biāo)位數(shù)組中取值為1的數(shù)組位的數(shù)量為300萬(wàn)時(shí),服務(wù)器確定待壓縮集合中待壓縮整數(shù)的數(shù)量為300萬(wàn),且待壓縮整數(shù)的整數(shù)長(zhǎng)度為32。
步驟209,根據(jù)待壓縮整數(shù)的數(shù)量以及整數(shù)長(zhǎng)度計(jì)算待壓縮整數(shù)集合的極限壓縮率。
可選的,服務(wù)器根據(jù)獲取到的待壓縮整數(shù)的數(shù)量以及整數(shù)長(zhǎng)度,通過(guò)預(yù)定計(jì)算公式計(jì)算該待壓縮整數(shù)集合的極限壓縮率。其中,待壓縮整數(shù)集合極限壓縮率=mn÷{-2n×[m/2n×log2(m/2n)+(1-m/2n)×log2(1-m/2n)]},m為待壓縮整數(shù)的數(shù)量,n為整數(shù)長(zhǎng)度。
示意性的,當(dāng)待壓縮整數(shù)為IP地址時(shí)(即m=32)時(shí),待壓縮整數(shù)集合的極限壓縮率與待壓縮整數(shù)數(shù)量的關(guān)系如圖2E所示。其中,X軸為IP地址的數(shù)量,Y軸為極限壓縮率。
進(jìn)一步的,服務(wù)器檢測(cè)計(jì)算得到的極限壓縮率是否小于預(yù)設(shè)壓縮率閾值,若極限壓縮率小于預(yù)設(shè)壓縮率閾值,服務(wù)器則執(zhí)行下述步驟205,若極限壓縮率大于預(yù)設(shè)壓縮率閾值,服務(wù)器則發(fā)出提示,指示采用其他壓縮率更高算法(比如哈夫曼編碼算法或數(shù)值編碼算法)進(jìn)行壓縮。
本實(shí)施例中,當(dāng)待壓縮整數(shù)集合具有壓縮率需求時(shí),服務(wù)器根據(jù)待壓縮整數(shù)的數(shù)量以及整數(shù)長(zhǎng)度計(jì)算待壓縮整數(shù)集合的極限壓縮率,并在極限壓縮率滿足預(yù)設(shè)壓縮率需求時(shí)進(jìn)行壓縮,避免在無(wú)法滿足壓縮率需求時(shí)進(jìn)行壓縮造成的處理資源浪費(fèi)。
請(qǐng)參考圖3,其示出了本發(fā)明一個(gè)實(shí)施例提供的整數(shù)壓縮裝置的結(jié)構(gòu)方框圖。該整數(shù)壓縮裝置可以通過(guò)軟件、硬件或者兩者的結(jié)合實(shí)現(xiàn)成為服務(wù)器的全部或者一部分。該整數(shù)壓縮裝置,包括:
第一獲取模塊310,用于獲取待壓縮整數(shù)集合,待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù)的整數(shù)長(zhǎng)度相同,且各個(gè)待壓縮整數(shù)的數(shù)值互不相同;
生成模塊320,用于對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,目標(biāo)位數(shù)組中的數(shù)組位與壓縮整數(shù)集合中的待壓縮整數(shù)對(duì)應(yīng);
壓縮模塊330,用于通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)。
綜上所述,本實(shí)施例提供的整數(shù)壓縮裝置中,通過(guò)遍歷待壓縮整數(shù)集合中的各個(gè)待壓縮整數(shù),從而對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,并進(jìn)一步對(duì)生成的目標(biāo)位數(shù)組進(jìn)行壓縮,得到相應(yīng)的壓縮數(shù)據(jù),進(jìn)而實(shí)現(xiàn)對(duì)整數(shù)集合的壓縮;相較于哈夫曼編碼算法重復(fù)遍歷整數(shù)集合影響壓縮速度,本發(fā)明實(shí)施例中,整個(gè)壓縮過(guò)程中只需對(duì)待壓縮整數(shù)集合進(jìn)行一次遍歷,從而提高了整數(shù)集合的壓縮速度。
請(qǐng)參考圖4,其示出了本發(fā)明另一個(gè)實(shí)施例提供的整數(shù)壓縮裝置的結(jié)構(gòu)方框圖。該整數(shù)壓縮裝置可以通過(guò)軟件、硬件或者兩者的結(jié)合實(shí)現(xiàn)成為服務(wù)器的全部或者一部分。該整數(shù)壓縮裝置,包括:
第一獲取模塊410,用于獲取待壓縮整數(shù)集合,待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù)的整數(shù)長(zhǎng)度相同,且各個(gè)待壓縮整數(shù)的數(shù)值互不相同;
生成模塊420,用于對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,目標(biāo)位數(shù)組中的數(shù)組位與壓縮整數(shù)集合中的待壓縮整數(shù)對(duì)應(yīng);
壓縮模塊430,用于通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)。
可選的,生成模塊420,包括:
第一生成單元421,用于根據(jù)待壓縮整數(shù)的整數(shù)長(zhǎng)度生成初始位數(shù)組,初始位數(shù)組中包含2n個(gè)數(shù)組位,且各個(gè)數(shù)組位均為0,n為整數(shù)長(zhǎng)度;
讀取單元422,用于讀取待壓縮整數(shù)集合中各個(gè)待壓縮整數(shù);
第二生成單元423,用于將待壓縮整數(shù)在初始位數(shù)組中對(duì)應(yīng)的數(shù)組位設(shè)置為1,生成目標(biāo)位數(shù)組。
可選的,該裝置,包括:
第二獲取模塊440,用于獲取內(nèi)存容量;
第一計(jì)算模塊450,用于根據(jù)待壓縮整數(shù)的整數(shù)長(zhǎng)度計(jì)算目標(biāo)位數(shù)組的預(yù)計(jì)內(nèi)存占用量,預(yù)計(jì)內(nèi)存占用量為2nbit,n為整數(shù)長(zhǎng)度;
生成模塊420,還用于在預(yù)計(jì)內(nèi)存占用量小于內(nèi)容容量時(shí),對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組。
可選的,該裝置,還包括:
第三獲取模塊460,用于獲取待壓縮集合中待壓縮整數(shù)的數(shù)量以及待壓縮整數(shù)的整數(shù)長(zhǎng)度;
第二計(jì)算模塊470,用于根據(jù)待壓縮整數(shù)的數(shù)量以及整數(shù)長(zhǎng)度計(jì)算待壓縮整數(shù)集合的極限壓縮率;
壓縮模塊430,還用于在極限壓縮率小于預(yù)設(shè)壓縮率閾值時(shí),通過(guò)預(yù)定壓縮算法對(duì)目標(biāo)位數(shù)組進(jìn)行壓縮,得到待壓縮整數(shù)集合對(duì)應(yīng)的壓縮數(shù)據(jù)。
可選的,極限壓縮率=mn÷{-2n×[m/2n×log2(m/2n)+(1-m/2n)×log2(1-m/2n)]},
其中,m為待壓縮整數(shù)的數(shù)量,n為整數(shù)長(zhǎng)度。
可選的,預(yù)定壓縮算法為區(qū)間編碼算法或算數(shù)編碼算法。
綜上所述,本實(shí)施例提供的整數(shù)壓縮裝置中,通過(guò)遍歷待壓縮整數(shù)集合中的各個(gè)待壓縮整數(shù),從而對(duì)各個(gè)待壓縮整數(shù)進(jìn)行桶排序,生成待壓縮整數(shù)集合對(duì)應(yīng)的目標(biāo)位數(shù)組,并進(jìn)一步對(duì)生成的目標(biāo)位數(shù)組進(jìn)行壓縮,得到相應(yīng)的壓縮數(shù)據(jù),進(jìn)而實(shí)現(xiàn)對(duì)整數(shù)集合的壓縮;相較于哈夫曼編碼算法重復(fù)遍歷整數(shù)集合影響壓縮速度,本發(fā)明實(shí)施例中,整個(gè)壓縮過(guò)程中只需對(duì)待壓縮整數(shù)集合進(jìn)行一次遍歷,從而提高了整數(shù)集合的壓縮速度。
本實(shí)施例中,服務(wù)器獲取到待壓縮整數(shù)集合后,根據(jù)待壓縮整數(shù)集合中待壓縮整數(shù)的整數(shù)長(zhǎng)度計(jì)算生成的位數(shù)組的預(yù)計(jì)內(nèi)存占用量,并根據(jù)該預(yù)計(jì)內(nèi)存占用量確定自身內(nèi)存是否能夠完整存儲(chǔ)該位數(shù)組,避免因無(wú)法完整存儲(chǔ)位數(shù)組而導(dǎo)致壓縮失敗。
本實(shí)施例中,當(dāng)待壓縮整數(shù)集合具有壓縮率需求時(shí),服務(wù)器根據(jù)待壓縮整數(shù)的數(shù)量以及整數(shù)長(zhǎng)度計(jì)算待壓縮整數(shù)集合的極限壓縮率,并在極限壓縮率滿足預(yù)設(shè)壓縮率需求時(shí)進(jìn)行壓縮,避免在無(wú)法滿足壓縮率需求時(shí)進(jìn)行壓縮造成的處理資源浪費(fèi)。
需要說(shuō)明的是:上述實(shí)施例提供的整數(shù)壓縮裝置在進(jìn)行整數(shù)集合壓縮時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說(shuō)明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將服務(wù)器的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實(shí)施例提供的整數(shù)壓縮裝置與整數(shù)壓縮方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過(guò)程詳見(jiàn)方法實(shí)施例,這里不再贅述。
圖5示出了本發(fā)明一個(gè)實(shí)施例提供的整數(shù)壓縮裝置的框圖。該整數(shù)壓縮裝置500可以是計(jì)算機(jī)或服務(wù)器。具體來(lái)講:
裝置500包括中央處理單元(CPU)501、包括隨機(jī)存取存儲(chǔ)器(RAM)502和只讀存儲(chǔ)器(ROM)503的系統(tǒng)存儲(chǔ)器504,以及連接系統(tǒng)存儲(chǔ)器504和中央處理單元501的系統(tǒng)總線505。裝置500還包括幫助計(jì)算機(jī)內(nèi)的各個(gè)器件之間傳輸信息的基本輸入/輸出系統(tǒng)(I/O系統(tǒng))506,和用于存儲(chǔ)操作系統(tǒng)513、應(yīng)用程序514和其他程序模塊515的大容量存儲(chǔ)設(shè)備507。
基本輸入/輸出系統(tǒng)506包括有用于顯示信息的顯示器508和用于用戶輸入信息的諸如鼠標(biāo)、鍵盤(pán)之類的輸入設(shè)備509。其中顯示器508和輸入設(shè)備509都通過(guò)連接到系統(tǒng)總線505的輸入輸出控制器510連接到中央處理單元501?;据斎?輸出系統(tǒng)506還可以包括輸入輸出控制器510以用于接收和處理來(lái)自鍵盤(pán)、鼠標(biāo)、或電子觸控筆等多個(gè)其他設(shè)備的輸入。類似地,輸入輸出控制器510還提供輸出到顯示屏、打印機(jī)或其他類型的輸出設(shè)備。
大容量存儲(chǔ)設(shè)備507通過(guò)連接到系統(tǒng)總線505的大容量存儲(chǔ)控制器(未示出)連接到中央處理單元501。大容量存儲(chǔ)設(shè)備507及其相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為裝置500提供非易失性存儲(chǔ)。也就是說(shuō),大容量存儲(chǔ)設(shè)備507可以包括諸如硬盤(pán)或者CD-ROM驅(qū)動(dòng)器之類的計(jì)算機(jī)可讀介質(zhì)(未示出)。
不失一般性,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)等信息的任何方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括RAM、ROM、EPROM、EEPROM、閃存或其他固態(tài)存儲(chǔ)其技術(shù),CD-ROM、DVD或其他光學(xué)存儲(chǔ)、磁帶盒、磁帶、磁盤(pán)存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備。當(dāng)然,本領(lǐng)域技術(shù)人員可知計(jì)算機(jī)存儲(chǔ)介質(zhì)不局限于上述幾種。上述的系統(tǒng)存儲(chǔ)器504和大容量存儲(chǔ)設(shè)備507可以統(tǒng)稱為存儲(chǔ)器。
根據(jù)本發(fā)明的各種實(shí)施例,裝置500還可以通過(guò)諸如因特網(wǎng)等網(wǎng)絡(luò)連接到網(wǎng)絡(luò)上的遠(yuǎn)程計(jì)算機(jī)運(yùn)行。也即裝置500可以通過(guò)連接在系統(tǒng)總線505上的網(wǎng)絡(luò)接口單元511連接到網(wǎng)絡(luò)512,或者說(shuō),也可以使用網(wǎng)絡(luò)接口單元511來(lái)連接到其他類型的網(wǎng)絡(luò)或遠(yuǎn)程計(jì)算機(jī)系統(tǒng)(未示出)。
上述存儲(chǔ)器還包括一個(gè)或者一個(gè)以上的程序,一個(gè)或者一個(gè)以上程序存儲(chǔ)于存儲(chǔ)器中,被配置由CPU執(zhí)行。
上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過(guò)硬件來(lái)完成,也可以通過(guò)程序來(lái)指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤(pán)或光盤(pán)等。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。