DNA压缩使用bitset java



我的任务是压缩DNA序列。首先用a = 00 c = 01 g = 10 t = 11进行编码。我必须从文件中读取序列并转换为我的编码。我知道我必须在java中使用bitSet类,但我有如何实现的问题。我如何确保我的编码被使用,并且字母不被转换为实际的二进制。

这是提示符:为该数据文件的两种压缩编码开发节省空间的Java代码。(N可以忽略)。将小写字符转换为大写字符。完成并回答以下问题:时间和空间效率机制将获得积分。如果你的代码运行时间太长,你需要重新考虑设计。

编码1。使用两位比特A:00, C:01, G:10, T:11。

(a)总共需要多少位来表示基因组序列?(b)编码序列中有多少位是1 ?

我知道我必须使用的逻辑,但实际实现的bitSet类和编码是我有问题的地方。

欢迎来到StackOverflow!请查看正在github上开发的某些正向遗传模拟器。它包含BitSetDNASequence类,可能有助于创建BitMask。当然,它将提供更多的指导,而不是1:1解决你的问题,但它肯定会让你加快速度。

我在下面做了一个如何将'C'字母转换为位的例子。所以对于"CCCC"字符串,它应该打印"01010101"。

import java.util.BitSet;
public class Test {
    public static void main(String[] args){
        String originalString = "CCCC";
        int bitSetSize = 2 * originalString.length();
        BitSet bitSet = new BitSet(bitSetSize); 
        for (int i = 0; i < originalString.length(); i++) {
            if (originalString.charAt(i) == 'C') {
                // put 01 in the bitset
                bitSet.clear(i * 2);
                bitSet.set(i * 2 + 1);
            }
        }
        // print all the bits in the bitset
        for (int i = 0; i < bitSetSize; i++) {
            if (bitSet.get(i))
                System.out.print("1");
            else
                System.out.print("0");
        }
    }
}

我相信所有你需要从BitSet中理解的,为了完成你的赋值,是方法:set, clear和get。

你可以看一下BinCodec,它提供二进制编码/解码过程来来回转换DNA和蛋白质序列到二进制紧凑表示。它依赖于标准Java BitSet的使用。还可以看一下BinCodedTest,它展示了如何使用这些api。

最新更新