Hilfe-brauche eine Idee!

valentina2013

Bekanntes Mitglied
Hey ihr lieben und netten,

ich brauche wieder ein Mal eure Hilfe, folgende Aufgabe: vier Nukleotide mit jeweils zwei Bits in einem Byte kodieren. Die Nukleotide sind so codiert- A=0,T=1,C=2,G=3 und in Bytearray Hinterlegt.Angenommen ich habe folgende Sequenz: ACGT entsprechende Bytearray dna [] mit der Länge 4 und entsprechenden Einträgen wäre {0,2,3,1}. Jetzt MUSS ich diese Array wieder in einem Bytearray umschreiben aber mit dna.length/4 Länge. Kodiert wird so:bytearray=Summe dna [4*i+k]*4ĸ-128 (also 4 hoch k). Dies hier ist kein Problem . Das Programm funktioniert. Ich muss jetzt aber die Umkehrtransformation schreiben , die aus diesen Summenwert eine bytte Array umschreibt mit einträgen:0,2,3,1 wie in dem Beispiel angegeben. Meine idee ist der gesamten Summe die einzelne Werte abziehen und daraus resultieren welche Nukleotide es waren.Aber wie bekomme ich die Reihenfolge hin? Schließlich ist es doch entscheidend die richtige Reihenfolge von der Sequenz zu kennen.

ich hoffe ich habe es verständlich formuliert.

Danke 🙂🙂🙂🙂
 
Valentina, poste am Besten mal die Fragestellung, die Dinge (Code), die schon klappen und sag uns dann ganz genau, woran es hakt. 😉
 
Danke, ich versuche es 🙂hier die aufgabe im anhang

Hier ist meine funktion, der wird eine byte [] übergeben mit folgenden einträgen A=0;T=1;G=2;C=3; und umschreibt sie in einer anderen byte array, mit folgenden formel.
Java:
public static byte[] dna2bytearray(byte dna[]) {
		
		byte bytearray[] = new byte[dna.length/4];
		
      	
		for(int k=0;k<=3; k++){
    			for(int i=0;i<dna.length/4; i++){
					bytearray[i]+=(int)(dna[4*i+k]*Math.pow(4, i)-128);
				}
		}
        
		return bytearray;
       
	}
wie soll die Umkehrtransformation aussehen?
 

Anhänge

  • Aufgabe.png
    Aufgabe.png
    47,9 KB · Aufrufe: 31
Ich denke mal nur so vor mich hin😀

Woher kommt die Annahme A=0;T=1;G=2;C=3 ?

Im zitierten Text steht etwas von bitweiser Kodierung. Und wenn ich jetzt an einzelne Bits denke, würde ich schreiben
  • A=0001 (dezimal 1)
  • T=0010 (dezimal 2)
  • G=0100 (dezimal 4)
  • C=1000 (dezimal 8)

Diese Zahlen zweimal hintereinander (8 bits=1 Byte) kodieren also 4 Nukleotide.

Dies kann durch einfache Bit-Operationen gelöst werden. Zum Beispiel feststellen, ob ein Bit gesetzt ist mit einer AND-Operation. Setzen eines Bits über eine OR-Operation

Java:
public boolean isNukleotidA(int nukleotid) {
		if ((this.dna & nukleotid) == A)
			return true;
		return false;
	}
 
Zuletzt bearbeitet:
hi danke für deine antwort,im anhand habe ich den ersten teil der aufgabe wo es vorausgesetzt wird mit der annahme da a=0 usw... und diese byte [] dna wir der o.g. funktion übergeben
 

Anhänge

  • aufgabe1.png
    aufgabe1.png
    66,1 KB · Aufrufe: 27
Zuletzt bearbeitet:

Zurück
Oben