c++ - 我们如何有效地压缩 DNA 串

标签 c++ algorithm compression dna-sequence lossless-compression

DNA 字符串可以是任意长度,包含 5 个字母(A、T、G、C、N)的任意组合。
压缩包含 5 个字母(A、T、G、C、N)的 DNA 字母串的有效方法是什么?不是考虑每个字母表 3 位,我们可以使用更少的位数有效地压缩和检索吗?任何人都可以建议一个有效压缩和检索的伪代码吗?

最佳答案

如果您愿意 (a) 为每个字符设置不同的位大小,并且 (b) 您总是从头开始阅读,而不是从中间开始阅读,则可以。然后,你可以有这样的代码:

  • A - 00
  • T - 01
  • G - 10
  • C - 110
  • N - 111

从左到右阅读,您只能以一种方式将比特流拆分为字符。您一次读取 2 位,如果它们是“11”,您需要再读取一位才能知道它是什么字符。

This is based on Huffman Coding Algorithm

注意:
我对 DNA 了解不多,但如果字符的概率不相等(即每个 20%)。您应该将最短的代码分配给概率较高的代码。

关于c++ - 我们如何有效地压缩 DNA 串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51859259/

相关文章:

java - Java 中的高斯消元法

node.js - http响应的Gzip解压

perl - 我应该如何使用 Perl 存储和压缩 Moose 对象?

c++ - 如何在 C++ 中使用数学

ruby - 如何降低这个函数的复杂度?

c++ - 错误 : invalid conversion from ‘int’ to ‘const char*’

algorithm - 对双值列表进行排序

java - 如何在 Hadoop 中使用 CompressionCodec

c++ - 如果将这个函数放在通用库中会导致什么错误?

c++ - 使用fprintf来存储流