Сжатие ДНК с использованием битсета java

Мое задание состоит в том, чтобы сжать последовательность ДНК. Первая кодировка с использованием a = 00 c = 01 g = 10 t = 11. Мне нужно прочитать из файла последовательность и преобразовать ее в мою кодировку. я знаю, что должен использовать класс bitSet в java, но у меня проблемы с реализацией. Как убедиться, что моя кодировка используется и буквы не преобразуются в настоящий двоичный код.

вот подсказка: разработайте экономичный Java-код для двух видов сжатого кодирования этого файла данных. (N следует игнорировать). Преобразование символов нижнего регистра в символы верхнего регистра. Выполните следующие действия и ответьте на вопросы: Кредит будет присужден механизмам, эффективным как по времени, так и по пространству. Если ваш код выполняется слишком долго, вам нужно переосмыслить дизайн.

Кодирование 1. Использование двух битов A:00, C:01, G:10, T:11.

а) Сколько всего битов необходимо для представления последовательности генома? б) сколько битов в закодированной последовательности равны единицам?

я знаю логику, которую я должен использовать, но фактическая реализация класса bitSet и кодировка - это то, где у меня возникают проблемы.


person l.bol    schedule 04.11.2016    source источник
comment
Прежде чем обращаться к нам за помощью, вам придется кое-что попробовать. Класс BitSet задокументирован, поэтому ничего должно мешать вам попробовать что-то новое.   -  person Kayaman    schedule 04.11.2016


Ответы (3)


Добро пожаловать в StackOverflow! Посмотрите на некоторый симулятор Forward Genetic, который разрабатывается на github. Он содержит класс BitSetDNASequence, который может быть полезен для создания вашей битмаски. Конечно, это послужит скорее ориентиром, чем решение вашей проблемы 1: 1, но это определенно может помочь вам ускориться.

person GoMati    schedule 04.11.2016
comment
Спасибо! Я нашел это действительно полезным - person l.bol; 04.11.2016

Ниже я сделал пример того, как вы можете преобразовать букву «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, чтобы выполнить свое задание, — это методы: установить, очистить и получить. Надеюсь, поможет.

person Andrei Statescu    schedule 04.11.2016

Вы можете посмотреть на BinCodec, который обеспечивает процедуры двоичного кодирования/декодирования для преобразования последовательностей ДНК и белков в/из двоичного компактного представления. Он основан на использовании стандартного Java BitSet. Также взгляните на BinCodedTest. который показывает, как использовать эти API.

person Patrick    schedule 12.12.2016