AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi entwickeltes boyer-moore program läuft nich
Thema durchsuchen
Ansicht
Themen-Optionen

entwickeltes boyer-moore program läuft nich

Ein Thema von Görly · begonnen am 7. Apr 2008 · letzter Beitrag vom 9. Apr 2008
Antwort Antwort
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
900 Beiträge
 
Delphi 11 Alexandria
 
#1

Re: entwickeltes boyer-moore program läuft nich

  Alt 7. Apr 2008, 20:45
Woher hast du denn diese Methode? Abgesehen davon, dass da diverse Variablen nicht initialisiert wurden und die Einrückung komplett chaotisch ist, fehlen da mindestens ein paar begins und ends. Die Schleifen und If-Konstrukte laufen irgendwie ins Leere.

Und das wichtigste: Das ist nicht Boyer-Moore, allenfalls eine Variante von Boyer-Moore-Horspool. Da fehlt nämlich die Good-Suffix-Strategie

Hier mal eine Implementierung von mir - die Good-Suffix-Regel ist auskommentiert.
Delphi-Quellcode:
function Search_BM(t,p: String): Integer;
var BC: Array[Char] of Integer;
    j, k, m, n: Integer;
    c: Char;
// j: Durchlaufvariable für das Muster
// k: Durchlaufvariable für den Text
// m: Musterlänge
// n: Textlänge
begin
  m := Length(p);
  n := Length(t);
  
  // Vorbereitung
  for c := low(char) to High(Char) do BC[c] := m;
  for j := 1 to m do BC[p[j]] := m-j;
  (* GS := PreProcess_BM_GoodSuffix(p); *)

  // Suche
  k := m;
  result := 0;

  while k <= n do
  begin
    j := 0;
    while (j < m) and (p[m-j] = t[k-j]) do
      inc(j);
    if (j = m) then
    begin
      result := k-j + 1;
      break;
      // Falls weitere Vorkommen gesucht werden sollen:
      // statt break:
      // Vorkommen "irgendwie ausgeben" und
      // k := k + m; //alle nicht überlappenden Vorkommen finden
      // k := k + 1; //alle Vorkommen finden
    end else
      k := k + (*max( GS[m-j],*) max(1, BC[t[k-j]] - j) (*)*);
  end;
Noch ein Edit: Tu dir selbst einen Gefallen, und lies nicht den deutschen Wikipedia-Artikel zu diesem Algorithmus. Die Good-Suffix-Regel ist dort unvollständig, und bei dieser Beschreibung des Algos ist die Laufzeit von O(n) im Worst-Case falsch (die ist dann nämlich O(nm)). Diesen Wiki-Artikel kann man komplett in die Tonne kloppen. Der englische ist schon besser - und da steht ne Qualitätswarnung bei.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz