倒排表的壓縮演算法:for、rbm
詞項索引的檢索原理:fst
如上圖,假設倒排表中最理想的一行id為1,2,3......100 w個連續數字
圖ⅰ:若沒有使用for壓縮演算法,則有100w個int型別的數字,1數字=4位元組,則有400w位元組,約佔4m儲存空間。1位元組=8bit,則1int需要32bit,即3200wbit
若使用了for壓縮演算法,1-100w個連續數字,前後兩個數字取差值,得到最終結果1,1,1.....1。100w個1,每個1需要2的0次方=1bit儲存即可。最終結果為100wbit,空間節省32倍
圖ⅱ:倒排表中id幾乎不可能為連續數字,以73,300,302,332,343,372為例。6個int型別數字,不使用for壓縮演算法需要24byte
若使用for壓縮演算法,先取差值得到73,227,2,30,11,29。這時得出最大差值為227,227在2的8次方範圍內,這樣就只需要每個分配2的8次方的空間
在上面的基礎上,我們發現有乙個差值是2,這時for演算法會根據一定原則自動分組,從而再次降低需要分配的儲存空間
整數壓縮演算法
1 0 255的整數可以只用乙個位元組表示,256 65535的資料只需2個位元組,65536 16777215需要3個位元組,16777216以上4個位元組 int uncompressed byte compressed encode integers int outpos 0,previous...
zigzag壓縮演算法
前文 base 128 varints 編碼 壓縮演算法 介紹了base 128 varints這種對數字傳輸的編碼,了解到了這種編碼方式是為了最大程度壓縮數字的。但是,在前文裡,我們只談論到了正數的情況,那如果出現了負數,該怎麼辦?zigzag壓縮演算法解決的就是這個問題。在聊這個演算法之前,我們...
Quicklz壓縮演算法
以前對壓縮演算法一無所知,只是知道哈弗曼編碼能做這種事情,但是感覺這樣的方法奇慢無比。昨天下午看了下號稱世界上最快的壓縮演算法quicklz,對壓縮的基本思路有了一定的了解。一般的壓縮程式的要求讀入檔案之後以便壓縮一邊輸出,而不是去先分析整個檔案中的情況之後才做決定採取哪種演算法。quicklz也不...