Und wenn man die Fallunterscheidung (im Idealfall ja ein switch, welches von javac als tableswitch fuer Binaersuche uebersetzt wird) noch durch eine kleine char[] lookup table ersetzt, welche bis 'T' geht und als Eintraege fuer die vier Buchstaben das jeweilige Ersetzungszeichen hat, ist es auch noch recht flott.
EDIT: Das hat jetzt zwar überhaupt nichts mehr mit der eigentlichen Aufgabenstellung zu tun, aber das Problem ist ein guter Kandidat für "Bit-level Parallelisierung":
Wenn man wirklich performant sein möchte, dann wählt man für die Repräsentation der vier Basen auch keine Zeichen in einer Zeichenkette/String, sondern Bitmuster, wie etwa:
A = 00
T = 01
G = 10
C = 11
Die Kette ATGC wäre dann also das Byte 00011011.
Die Berechnung des Watson-Crick-Komplements kann dann mittels Bit-level Parallelisierung innerhalb eines Clock-Cycles für 4 Zeichen gleichzeitig ausgeführt werden per XOR mit dem Muster 01010101.
Und, wenn long verwendet wird (also quasi beliebig lange "Strings" als long[] Array repräsentiert werden), kann man mit nur einem einzigen Clock-Cycle sogar 32 Zeichen gleichzeitig ersetzen (Lesen und Schreiben des longs von/zum Array nicht mitgerechnet).
EDIT: Das hat jetzt zwar überhaupt nichts mehr mit der eigentlichen Aufgabenstellung zu tun, aber das Problem ist ein guter Kandidat für "Bit-level Parallelisierung":
Wenn man wirklich performant sein möchte, dann wählt man für die Repräsentation der vier Basen auch keine Zeichen in einer Zeichenkette/String, sondern Bitmuster, wie etwa:
A = 00
T = 01
G = 10
C = 11
Die Kette ATGC wäre dann also das Byte 00011011.
Die Berechnung des Watson-Crick-Komplements kann dann mittels Bit-level Parallelisierung innerhalb eines Clock-Cycles für 4 Zeichen gleichzeitig ausgeführt werden per XOR mit dem Muster 01010101.
Und, wenn long verwendet wird (also quasi beliebig lange "Strings" als long[] Array repräsentiert werden), kann man mit nur einem einzigen Clock-Cycle sogar 32 Zeichen gleichzeitig ersetzen (Lesen und Schreiben des longs von/zum Array nicht mitgerechnet).
Zuletzt bearbeitet: