2016-11-04 9 views
0

私の割り当てはDNA配列を圧縮することです。 a = 00 c = 01 g = 10 t = 11を使用した最初のエンコンディング。ファイルからシーケンスを読み込み、エンコーディングに変換する必要があります。私は、JavaでbitSetクラスを使用する必要があることを知っているが、私は実装する方法に問題があります。エンコーディングが確実に使用され、文字は実際のバイナリに変換されません。ビットセットを使用したDNA圧縮java

これはプロンプトです。このデータファイルの2種類の圧縮されたエンコードのための空間効率のよいJavaコードを作成します。 (Nは無視される)。小文字を大文字に変換します。以下のことを行い、質問に答えてください。時間と空間の両方の効率的な仕組みにクレジットが与えられます。コードの実行に時間がかかりすぎる場合は、デザインを再考する必要があります。

符号化1. 2ビットA:00、C:01、G:10、T:11を使用する。

(a)ゲノム配列を表現するのに必要な総ビット数はいくつですか? (b)総ビット数のうち、符号化されたシーケンス内のビット数はどれくらいですか?

私はロジックを知っていますが、bitSetクラスとエンコーディングの実際の実装はどこに問題があるのですか。

+1

私たちの助けを求める前に何か試してみる必要があります。 [BitSet](https://docs.oracle.com/javase/8/docs/api/java/util/BitSet.html)クラスは文書化されているので、何かを試してみることを止めるべきではありません。 – Kayaman

答えて

0

ようこそStackOverflow! githubで開発中の特定のForward Genetic simulatorを見てください。これには、BitMaskの作成に役立つBitSetDNASequenceクラスが含まれています。もちろん、それはあなたの問題に対する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から理解する必要があると信じています:set、clear、get。それが役に立てば幸い。

0

BinCodecでは、バイナリのコンパクト表現との間で前後のDNAおよびタンパク質配列を変換するためのバイナリエンコード/デコード手順を提供しています。これは、標準のJava BitSetの使用に依存しています。これらのAPIの使用方法を示すBinCodedTestもご覧ください。

関連する問題