2016-11-04 7 views
0

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

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

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

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

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

+1

Вам нужно попробовать что-то, прежде чем просить о нашей помощи. Класс [BitSet] (https://docs.oracle.com/javase/8/docs/api/java/util/BitSet.html) задокументирован, поэтому ничто не должно мешать вам попробовать. – Kayaman

ответ

0

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

+0

Спасибо! Я нашел это очень полезным –

0

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

0

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