基因資料壓縮演算法是乙個初級的資料壓縮演算法,基因資料如下所示"atagatgcat",如果使用標準的ascii編碼(每個字元1個位元組),這個基因字串的流長度是10*8=80位。
這些字元是由4種不同的字元組成,所有我們可以使用雙位編碼壓縮,比如a:00,c:01,t:10,g11,壓縮之後我們就可以在乙個位元組存放4個基因字元了,當資料比較大時,壓縮效率為25%。
完整**
#include #include using namespace std;
void printbits(const char *pstr, int width = 1);
// actg a:00, c:01, t:10, g11
class dna
dna(const char *str);
void addcompress(const char c)
void addcompress(const char *pstr);
string expand();
int size() const
string data() const
string compress() const
void printcompressdata()
void printcompressdata(int width)
private:
int sizes; // 存放資料數
string data; // 存放原始資料
string compressdata; // 存放壓縮後的二進位制資料
void compress(const char c);
unsigned char index(char c);
char table(int index) const;
void printbits(const char c);
void printbits(const char *pstr, int width = 1);
};int main(void)
dna::dna(const char *str) : sizes(0) }}
void dna::addcompress(const char *pstr)
}// class dna private scope
// 壓縮字元c,並新增到compressdata中
void dna::compress(const char c)
// 解壓縮,並以string返回
string dna::expand()
return s;
}// 根據char值返回對應的索引,比如'a'為0時返回0
unsigned char dna::index(char c)
// 根據index值返回對應的字元,比如index為0時返回'a'
char dna::table(int index) const
; return table[index % 4];
}void dna::printbits(const char c)
}void dna::printbits(const char *pstr, int width)
cout << endl;
}
輸出結果為:
《演算法》 第四版 5.5 資料壓縮
資料壓縮演算法
之前在聽到資料壓縮的時候,想著肯定是某些高深莫測的演算法,能夠完成資料的壓縮這種事情,最近看了看,嗯,至少咱還是能看懂的.眾所周知,不管你是exe,word,txt,dmg等等,在儲存上都是以二進位制進行儲存的,所以,在討論壓縮時,忽略檔案格式即可,只要將其看做一串數字即可.開始了,上數字串 111...
LZW資料壓縮演算法
表4 15 詞典 碼字 code word 字首 prefix 1 193 a194b 255 1305 abcdefxyf01234 lzw編碼器 軟體編碼器或硬體編碼器 就是通過管理這個詞典完成輸入與輸出之間的轉換。lzw編碼器的輸入是字元流 charstream 字元流可以是用8位ascii字...
資料壓縮演算法LZO C
lzo 是致力於解壓速度的一種資料壓縮演算法,lzo 是 lempel ziv oberhumer 的縮寫。這個演算法是無損演算法,參考實現程式是執行緒安全的。lzo 庫實現了許多有下述特點的演算法 解壓簡單,速度非常快。解壓不需要記憶體。壓縮相當地快。壓縮需要 64 kb 的記憶體。允許在壓縮部分...