基因資料壓縮演算法 ACTG C

2021-07-05 06:57:10 字數 1826 閱讀 1673

基因資料壓縮演算法是乙個初級的資料壓縮演算法,基因資料如下所示"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 的記憶體。允許在壓縮部分...