簡體   English   中英

表示無限長度數的最佳方法?

[英]Best way to represent numbers of unbounded length?

表示無界長度整數的最優(空間效率)方法是什么?

(數字范圍從零到正無窮大

這里可以找到一些樣品編號輸入(每個數字都顯示在它自己的行上)。

是否有專門壓縮數字的壓縮算法

你基本上有兩種可變長度整數的替代方案:

  1. 使用每個k 1位作為結束終止符。 例如,谷歌protobuf就是這樣做的(在他們的例子中,每個字節有一位,所以每個字節有7個有用位)。

  2. 首先輸出位長,然后輸出位。 這就是ASN.1的工作原理,除了表單1中表示的OID。

如果數字可能非常大,則選項2更好,雖然它更復雜並且您必須遞歸地應用它,因為您可能必須輸出長度的長度,然后輸出長度,然后輸出數字。 常見的技術是對長度字段使用選項1(位標記)。

對於較小的數字,選項1更好。 考慮大多數數字適合64位的情況。 每字節存儲7位的開銷是1/7; 有八個字節,你代表56位。 使用甚至長度的7/8表示也將表示八個字節中的56位:一個長度字節和七個數據字節。 任何短於48位的數字都將受益於自終止代碼。

無限長度的“真正隨機數”平均來說是無限長的,所以這可能不是你所擁有的。 更可能的是,您對數字大小的概率分布有所了解,並且可以在上述選項之間進行選擇。

請注意,這些“壓縮”都沒有(除了相對於膨脹的ascii-decimal格式)。 log n/n的漸近線為0,因此數字越大,數字大小的大小往往不占用(相對)空間。 但它仍然需要以某種方式表示,因此總表示將總是比數字的log 2大一點。

你不能壓縮本身,但你可以編碼,這可能是你正在尋找的。 您有由換行符分隔的ASCII十進制數字序列的文件。 你應該只是霍夫曼編碼字符。 你不會比每個字符大約3.5位好多少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM