日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用数学运算实现数据无损压缩的算法

發布時間:2023/12/19 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用数学运算实现数据无损压缩的算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用數學運算實現數據無損壓縮的算法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

(An arithmetic On Lossless Data-Compress By Mathematical Operation)

王春海1 魏玉冬2

[1]河北經貿大學信息技術學院 2河北經貿大學數統學院) 摘 要通常的無損壓縮算法,大多最多只能達到30%左右的壓縮率。本文提出的壓縮算法思想,可以使數據的無損壓縮率達到千萬分之幾,甚至更高。

關鍵詞:數學運算 數據壓縮 無損壓縮 海量數據 壓縮率 數學函數 數學表達式 1 數據的保存對數據壓縮有迫切的需求

現在社會是信息社會,各類信息充斥于生活工作的各個方面,人們離不開信息的搜集、處理、保存與交流。歷史遺留下來的信息數據,現時的信息數據,將來的信息數據,其數量之龐大令人難以想象。這些海量的數據,沒有任何一個單位或一個實體可以全部保留,只能是保存相應方面的部分數據,在需要時通過網絡進行查找和傳輸,以期達到數據的的共享與使用。但隨著數據量的日益累積,網絡訪問量的激增,將會占用很多時間和網絡帶寬。為增加網絡傳輸速度,減少訪問時間,最直接的方法是增加網絡帶寬(從最早使用的撥號到DDN專線,帶寬已達十兆、百兆、千兆…)。但是,網絡帶寬終有極限,數據也越積越多,如此下去終有一天,眾多的數據將無法保存。怎么解決這一問題呢?采用高效的數據壓縮是一種較好的選擇。 2 現有的壓縮算法效率低下

目前,數據壓縮主要分為兩種,一種是有損壓縮,主要用于音頻、視頻、圖形、圖像的壓縮,其主要特征是,數據經壓縮后,人們可以接受;另一種是無損壓縮,適用于文本文件、數據庫、程序等數據的壓縮,其特點是,數據經壓縮→解壓縮后,可以完全與壓縮前的數據一樣。一般情況下,采用無損壓縮,最大的壓縮率只能達到70%左右(即壓縮后的文件是原文件的30%)。通常情況下50%-60(即壓縮后的文件是原文件的4050%。壓縮率如此低的原因主要在于,目前的無損壓縮算法,都是基于在文件中找相同的、重復的序列進行壓縮。即使對文本文件、數據庫文件等重復性比較高的數據進行壓縮,其壓縮率最大也只有70%;而如果對可執行程序(比如EXE文件、COM文件等),其壓縮率只能達到百分之幾。因此,尋找更好更有效的辦法提高數據的壓縮率,具有重大的現實意義。

3 用數學運算實現數據壓縮算法

在此,本人提出一種新型的壓縮算法,即利用數學運算實現數據的高壓縮率。

計算機內的所有數據無論是文本文件、圖形文件,還是可執行文件,都可編輯為16進制數據文件。下面就是一個文件的部分16進制數據: D5 E2 CA C7 D2 BB B8 F6 CA DD EA 7F 92 23 11 23 42 7F DE 9D C7 98 72 1D A2 6F 7F 8F <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

對于這種數據文件,基于簡單的數學知識,我們有以下事實:

組成這些文件的數據均可視為一個有限位的整數序列,這是顯然的,因為任意一個文件無論多長,總是有限的,于是其對應的數據文件也是有限的;

每個整數序列均可視為某個無理序列的一個片斷,這也是顯然的,做如此分析,意義主要在于隨后的數據處理更易于實現;

每個無理序列均可由某個函數在某點的函數值取得,這在理論上是行的通的,如10進位制數據141421356…可認為是由無理數?=1.41421356…的若干位片段獲得。

由此提出數學運算壓縮算法的具體思想:

構造具備理想長度的無理數片段數據庫,被壓縮文件與之對應,;

構造函數庫,這個數據庫由足夠簡單的、易于實現高精度數值計算的函數構成,并使無理數片段數據庫中的每一數據均可由函數庫中的某一函數的某一相對簡單的數值的函數值取得,或若干函數值的代數和;

任何一個文件在計算機上記錄為一個數字序列,例如,一張刻滿的CDDVD光盤,如果將其做成一個光盤映射文件,這個文件用數字的方式保存在計算機的硬盤上,將會是一個數字的序列(因為計算機中最終保存的都是16進制數據)。如果這個文件的數據文件排序與無理數片段數據庫中某個無理數片段的排序相同,則這個文件可由函數庫中的某個函數的某一函數值計算獲得。

對任何一個文件,找出與之對應的無理數片段,并隨之得到產生此值的函數f (x)于是文件將以函數形式f (x),參數1,參數,也即文件被壓縮為簡單的函數形式f (x),參數1,參數2。打開壓縮文件時,只需簡單運算即可得到原文件的數據文件。

此設想的現實意義:面對浩如瀚海的數據,只需要極小的存儲就可以代表。在網絡上需要下載東西時,也無需下載實際的數據,只要下載與其對應的數學表達式,當真正需要時,在本地運算就可以了。這樣,占用網絡帶寬將極低,甚至不用下載。例如:一個幾百兆或幾千兆的鏡像文件,如果用一個簡單的數學表達式來代表,我們完全可以直接把這個數學表達式抄下來即可。

4 數學運算數據壓縮法需考慮的問題

數學運算數據壓縮法也有相當大的局限性和不足:

①現有的數據都是采用數字方法進行保存,數字方法有其優點,但也有其嚴重的缺點。用數學方法實現數據的無損壓縮,是用“模擬”的方法來保存“數字”,數字數據永遠只能、最大近似的“模擬”模擬數據,卻不能完全真實的再現模擬數據。舉例來說:e1,這可以看做一個模擬數據,e1的結果是一個數字信號。e1的結果永遠是模擬e1,卻不能代替e1這個數據。

②數學運算數據壓縮法的數據庫巨大且生成的代價較大。以長度為百位無理數片段為基本單元的數據庫為例,即使按十進制算,數據庫中也將有10100數據及相應的生成函數,這是一個天文數字。但這是值得的,因為這畢竟得到了百分之九十幾的壓縮率,而對解壓無過高要求,只需通過簡單運算即可。如果建立的數據庫足夠大,將可以達到千萬分甚至更大的壓縮率。另外,我們可以通過一些方法,使數據庫中的函數盡可能的少。這一方面可以參看下面第5部分的內容。

③雖然對任意的數據,我們都可以用一個相對簡單的數學表達式來代替,但代價比較巨大,且不易實現。我們可以采用“分段”的方法實現,就是對于任意長度為p1的數字序列,按照p2的長度進行分段,p2序列的數據對應的簡單的數學表達式已經事先存放在一個數據庫中,如果p2序列的壓縮率足夠,整個數據就可以達到p2的壓縮率。具體實現思路請見下文。

5 數學運算數據壓縮算法的實現步驟

假設我們想達到千分之幾的無損壓縮率(壓縮后的文件是原來的千分之幾),那我們需要創建一個包括一個如下格式的數據庫:

1:數據庫與數學代表式對應表

數學表達式

數字序列

f(x1)

0000……(9910)……0000

f(x2)

0000……(9910)……0001

……

……

f(xn)

ffff……(991f)……ffff

其中f(xn)是一個有限位的數學表達式,如e3、、1og3等。在生成數據庫時,采用某個數學表達式,取其運算結果到1000位,并且此結果序列與上表中的數字序列進行查找,與某一行相對應,就用此數學表達式代替這一行。

這樣,一個任意長度的數據序列,將按照每1000位進行分段,并查找上表1,每1000位用一個數學表達式相對應。在分段后,如果最后一個分段不足1000位,記下此段的長度,然后不足部分補0,然后再查找表1。此時形成的壓縮文件內容如下:

文件長度,壓縮率,數學表達式1,數學表達式2,……,數學表達式n1,最后一個數學表達式n

n???????? 文件長度:壓縮前文件的總長度

n???????? 壓縮率:分段方法,如按照1000位進行分段

n???????? 數學表達式1:第11000位序列對應的數學表達式

n???????? 數學表達式n:第n1000位序列對應的數學表達式

在解壓縮時,每一個數學表達式運算到“壓縮率”對應的位數。

為了減少數據庫中函數的數量,我們可以采用如下的方法來解決:

假設函數f(x1)的運算結果,前100位與某一個序列相對應,如果把f(x1)運算到101位,將運算結果的第1位去掉,剩下的100位也將與這個數據庫中的某一個序列相對應。如果把f(x1)運算到100n位,將運算結果的前n位去掉,也將與數據庫中的某一個序列相對應。采用此種方法,將會把數據庫中函數的類型與數量降到最低。

對此,我們提出數學運行法的壓縮算法:

任意的、足夠多的數據,將其保存為一個足夠大的、單一的數據文件,這將是一個有理數的序列。對于這個序列,我們按照表1中的“壓縮率”進行分段,每一段由其相對應的數學表達式來表示。

壓縮后,將是一個如下的序列:

f(x1,y1,z1),n11,n12,n13f(x2,y2,z2),n21,n22,n23,……,f(xm,ym,zm),nm1,nm2,nm3

意義如下:

f(x,y,z)代表一個數學表達式f()可以是一個數學公式、數學函數或一個簡單的算術表達式,x、y、z代表數學表達式的參數,n1,表示這個數學表達式運算結果的第某一位,n2指從n1位開始后的長度,代表數據的大小。如果n2過于大,n2也可以用一個數學表達式代替,此時數學表達式變為:

f(x,y,z),n1,(f2(x,y,z)),n3

在解壓縮時,可以用多線程的方法,同時運行許多數學表達式,然后運算到指定位數進行“組合”。在運算到最后一個數學表達式時,運行到“文件長度”與“壓縮率”的余數即可。



[1] ?作者簡介:王春海1,男,漢,河北河間。河北經貿大學信息技術學院實驗中心,助理工程師。 魏玉冬2,男,漢,河北新樂。河北經貿大學數統學院,高級講師。 注:本文的整體思想、數學運算壓縮算法思想由王春海提出,本文的數學表達實現由王春海和魏玉冬提出。本文最早在2004年發表于于河北經貿大學學報上

總結

以上是生活随笔為你收集整理的用数学运算实现数据无损压缩的算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。