• Keine Ergebnisse gefunden

Algorithmen auf Sequenzen Eine Rank-Datenstruktur f¨ur Bitsequenzen

N/A
N/A
Protected

Academic year: 2022

Aktie "Algorithmen auf Sequenzen Eine Rank-Datenstruktur f¨ur Bitsequenzen"

Copied!
13
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen auf Sequenzen

Eine Rank-Datenstruktur f¨ur Bitsequenzen

Sven Rahmann

Genominformatik Universit¨atsklinikum Essen Universit¨at Duisburg-Essen Universit¨atsallianz Ruhr

(2)

Rank-Anfragen

Sei s eine Bitsequenz.

Die Anzahl der Eins-Bits in s[:i] wirdranks(i) genannt.

(Varianten: Bit i wird mitgez¨ahlt oder nicht) Ziel:Effiziente Berechnung von ranks(i) f¨ur alle i

Anwendung: Abbilden von großen d¨unnbesiedelten Arrays auf kleine komplett bef¨ullte Arrays, wichtige Beispiele sp¨ater

(3)

Einfache Rank-Algorithmen

ranks(i): Anzahl der Einsen ins[:i]

Langsam, aber leichtgewichtig: Schleife O(n) Zeit, O(1) zus¨atzlicher Speicher Etwas schneller: Schleife mit popcount O(n/W) Zeit, O(1) zus¨atzlicher Speicher Schnell, aber schwergewichtig: Tabelle O(1) Zeit, aberO(nlogn) Bits zus¨atzlich

Gut w¨areO(1) Zeit,o(n) Bits zus¨atzlich, d.h.

ist x(n) der zus¨atzliche Platzbedarf neben n Bits f¨ur s selbst, dann soll x(n)/n →0 f¨ur n→ ∞ gelten.

(4)

Einfache Rank-Algorithmen

ranks(i): Anzahl der Einsen ins[:i]

Langsam, aber leichtgewichtig: Schleife O(n) Zeit, O(1) zus¨atzlicher Speicher Etwas schneller: Schleife mit popcount O(n/W) Zeit, O(1) zus¨atzlicher Speicher Schnell, aber schwergewichtig: Tabelle O(1) Zeit, aberO(nlogn) Bits zus¨atzlich Gut w¨areO(1) Zeit,o(n) Bits zus¨atzlich, d.h.

ist x(n) der zus¨atzliche Platzbedarf neben n Bits f¨ur s selbst, dann soll x(n)/n →0 f¨ur n→ ∞ gelten.

(5)

Eine effiziente Rank-Datenstruktur

Grundidee: Rank-Tabelle f¨ur jedenS-ten Eintrag;

jeS Bits bilden einen “Superblock”:

O(logn·n/S) Bits f¨ur Suberblock-Tabelle

W¨ahleS = Θ((logn)2);

somit O(n/logn) =o(n) Bits f¨ur Superblock-Tabelle Verbleibendes Problem:

Rank auf “Superbl¨ocken” der Gr¨oße S z¨ahlen Damit: Laufzeit O(log2n), Speicher o(n)

(6)

Eine effiziente Rank-Datenstruktur

Grundidee: Rank-Tabelle f¨ur jedenS-ten Eintrag;

jeS Bits bilden einen “Superblock”:

O(logn·n/S) Bits f¨ur Suberblock-Tabelle W¨ahleS = Θ((logn)2);

somit O(n/logn) =o(n) Bits f¨ur Superblock-Tabelle Verbleibendes Problem:

Rank auf “Superbl¨ocken” der Gr¨oße S z¨ahlen

Damit: Laufzeit O(log2n), Speicher o(n)

(7)

Eine effiziente Rank-Datenstruktur

Grundidee: Rank-Tabelle f¨ur jedenS-ten Eintrag;

jeS Bits bilden einen “Superblock”:

O(logn·n/S) Bits f¨ur Suberblock-Tabelle W¨ahleS = Θ((logn)2);

somit O(n/logn) =o(n) Bits f¨ur Superblock-Tabelle Verbleibendes Problem:

Rank auf “Superbl¨ocken” der Gr¨oße S z¨ahlen Damit: Laufzeit O(log2n), Speicher o(n)

(8)

Eine effiziente Rank-Datenstruktur

Verfeinerung: Jeder Superblock wird in Θ(logn) Bl¨ocke der Gr¨oße Θ(logn) unterteilt.

Jeder Superblock hat Tabelle mit Ranks f¨ur jeden Block-Beginn:

Werte bis Θ(log2n) ben¨otigen O(log logn) Bits.

Es gibt Θ(logn·n/S) = Θ(n/logn) viele Bl¨ocke.

Insgesamt also O(nlog logn/logn) =o(n) Bits.

popcount innerhalb eines Blocks mit Θ(logn) Bits kann in konstanter Zeit berechnet werden (RAM-Modell)

Berechnung ben¨otigt konstante Zeit:

Superblock-Rank + Block-Rank + Block-popcount

(9)

Eine effiziente Rank-Datenstruktur

Verfeinerung: Jeder Superblock wird in Θ(logn) Bl¨ocke der Gr¨oße Θ(logn) unterteilt.

Jeder Superblock hat Tabelle mit Ranks f¨ur jeden Block-Beginn:

Werte bis Θ(log2n) ben¨otigen O(log logn) Bits.

Es gibt Θ(logn·n/S) = Θ(n/logn) viele Bl¨ocke.

Insgesamt also O(nlog logn/logn) =o(n) Bits.

popcount innerhalb eines Blocks mit Θ(logn) Bits kann in konstanter Zeit berechnet werden (RAM-Modell)

Berechnung ben¨otigt konstante Zeit:

Superblock-Rank + Block-Rank + Block-popcount

(10)

Eine effiziente Rank-Datenstruktur

Verfeinerung: Jeder Superblock wird in Θ(logn) Bl¨ocke der Gr¨oße Θ(logn) unterteilt.

Jeder Superblock hat Tabelle mit Ranks f¨ur jeden Block-Beginn:

Werte bis Θ(log2n) ben¨otigen O(log logn) Bits.

Es gibt Θ(logn·n/S) = Θ(n/logn) viele Bl¨ocke.

Insgesamt also O(nlog logn/logn) =o(n) Bits.

popcount innerhalb eines Blocks mit Θ(logn) Bits kann in konstanter Zeit berechnet werden (RAM-Modell)

Berechnung ben¨otigt konstante Zeit:

Superblock-Rank + Block-Rank + Block-popcount

(11)

Praxis

RAM-Modell: popcount vonO(logn) Bits in konstanter Zeit Praxis: popcount von 64 Bits in konstanter Zeit,n ≤264 W¨ahleS := 16·(64)2 = 65536 = 216

64-bit-ints f¨ur Superblock-Ranks, 16-bit-ints f¨ur Block-Ranks

n/216 Superbl¨ocke mit 64-Bit-Werten

Jeder Superblock hat 1024 Bl¨ocke mit 16-Bit-Werten Insgesamt: n/65536·(64 + 1024·16)≈0.25·n Bits f¨ur verschiedene Werte vonn optimierbar

(12)

Praxis

RAM-Modell: popcount vonO(logn) Bits in konstanter Zeit Praxis: popcount von 64 Bits in konstanter Zeit,n ≤264 W¨ahleS := 16·(64)2 = 65536 = 216

64-bit-ints f¨ur Superblock-Ranks, 16-bit-ints f¨ur Block-Ranks n/216 Superbl¨ocke mit 64-Bit-Werten

Jeder Superblock hat 1024 Bl¨ocke mit 16-Bit-Werten Insgesamt: n/65536·(64 + 1024·16)≈0.25·n Bits

f¨ur verschiedene Werte vonn optimierbar

(13)

Praxis

RAM-Modell: popcount vonO(logn) Bits in konstanter Zeit Praxis: popcount von 64 Bits in konstanter Zeit,n ≤264 W¨ahleS := 16·(64)2 = 65536 = 216

64-bit-ints f¨ur Superblock-Ranks, 16-bit-ints f¨ur Block-Ranks n/216 Superbl¨ocke mit 64-Bit-Werten

Jeder Superblock hat 1024 Bl¨ocke mit 16-Bit-Werten Insgesamt: n/65536·(64 + 1024·16)≈0.25·n Bits f¨ur verschiedene Werte vonn optimierbar

Referenzen

ÄHNLICHE DOKUMENTE

[r]

a[ 3] = 0;), würde sich diese Änderung auch auf das Array im Rufer auswirken... Beispiel:

Teil 1: Schreiben Sie ein Programm, das das innere Produkt zweier Vektoren berechnet, wobei die Berechnung innerhalb einer Schleife erfolgen soll. Der korrekte Programmlauf muss

Die Teilnehmer sind in der Lage, Problemstellungen auf (biologischen) Sequenzen f¨ur einen algorithmischen Zugang zu modellieren, die algorithmische Komplexit¨at des

Wie kann in O(|t|) Zeit festgestellt werden, wie viele verschiedene Teilstrings der L¨ange k in t enthalten sind. Gib hierzu einen Algorithmus in

Beweise mit vollst¨andiger Induktion, dass jeder gewurzelte Baum, der keinen Knoten mit genau einem Kind besitzt, weniger Kanten als Knoten besitzt. Aufgabe

Gib weiter f¨ur jeden Knoten die ausgef¨uhrten Tests (basierend auf den DFS-Intervallen) und deren Ergebnis an

a) Entwirf einen effizienten Algorithmus zum Auffinden aller minimal rechts-eindeutigen Teilw¨orter der L¨ange mindestens ℓ, beweise seine Korrektheit und analysiere seine Laufzeit..