Datenstrukturen und Algorithmen

Welche Aussage beschreibt ein Merkmal des Boyer-Moore-Algorithmus zum Suchen eines Musters in einer Zeichenkette richtig?

  1. AEr vergleicht das Muster beginnend mit seinem letzten Zeichen und nutzt Informationen wie die, dass das nicht passende Textzeichen im Muster nicht vorkommt, um das Muster auf einmal weit zu verschieben
  2. BEr verschiebt das Muster vom Anfang des Textes jeweils um ein Zeichen und vergleicht jedes Mal alle Zeichen des Musters vom ersten bis zum letzten
  3. CEr sortiert Text und Muster und findet das Muster dann durch binäre Suche
Antwort und Erläuterung anzeigen

Antwort: A. Er vergleicht das Muster beginnend mit seinem letzten Zeichen und nutzt Informationen wie die, dass das nicht passende Textzeichen im Muster nicht vorkommt, um das Muster auf einmal weit zu verschieben

Der Boyer-Moore-Algorithmus vergleicht das Muster von seinem letzten Zeichen her und berechnet vorab Tabellen, sodass zum Beispiel das gesamte Muster über ein nicht passendes Textzeichen hinweggeschoben werden kann, wenn dieses im Muster gar nicht vorkommt. Bei natürlichsprachlichem Text kann er dadurch viele Zeichen überspringen, ohne sie zu vergleichen. Bei einem Text der Länge n und einem Muster der Länge m braucht das naive Verfahren, das jeweils um ein Zeichen verschiebt und alles vergleicht, im schlechtesten Fall O(nm). Auch der KMP-Algorithmus nutzt Informationen über Fehlvergleiche zum Verschieben, vergleicht aber vom Anfang des Musters her und garantiert selbst im schlechtesten Fall O(n + m).

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Datenstrukturen und Algorithmen

  1. Ein dynamisches Array legt, wenn ein Element hinzugefügt wird, während es voll ist, einen neuen Bereich mit doppelter Kapazität an und kopiert alle Elemente dorthin. Wie viele Elementkopien entstehen insgesamt, wenn einem leeren Array mit der Kapazität 1 nacheinander 1000 Elemente hinzugefügt werden?
  2. Warum ist bei einer Hashtabelle mit vielen Elementen und einem Belegungsfaktor von etwa 0,5 die offene Adressierung mit linearem Sondieren am ehesten schneller als die Verkettung (Verbinden der Elemente durch verkettete Listen)?
  3. Für das Sortieren auf paralleler Hardware wie GPUs werden manchmal Sortierverfahren mit einer festen Folge von Vergleichs- und Tauschschritten (Sortiernetzwerke) wie Bitonic Sort verwendet. Warum?
  4. Welche Zeitkomplexität hat bei einem Array mit n Elementen ein Verfahren, das jedes Paar zweier verschiedener Elemente genau einmal vergleicht (eine doppelte Schleife, die das i-te Element mit allen dahinterliegenden Elementen vergleicht und i schrittweise erhöht)?
  5. Ein Programm mit der Zeitkomplexität O(n²) benötigt für 1000 Datenelemente 0,5 Sekunden. Wie lange benötigt es etwa für 4000 Datenelemente?