Einzelnen Beitrag anzeigen

Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#16

AW: Boyer-Moore für Unicode

  Alt 14. Jun 2011, 20:54
@Deep-Sea:
Aber ich will mich nicht mit fremden Federn schmücken. Der Teil ist aus den einschlägigen Beispielen für Boyer-Moore entnommen und von mir lediglich an Delphi und die Rückwärtssuche angepaßt worden.
@jbg:
Zitat:
Da ist dein "ein JMP gespart" belanglos, was es ohnehin dank Jump-Optimierung seitens Delphi bereits ist. Delphi erkennt, dass du mit "break" auf ein "goto" springst, und leitet den Sprung direkt weiter ohne den Zwischenstopp. (Einfach mal den Assemblercode im CPU-View anschauen).
Danke, das war mir neu.

@all:
Ich hab mal den "goto-verseuchten" Teil umgeschrieben.

Delphi-Quellcode:
      // Good-Suffix-Table vorwärts
      FGoodTable[0] := 1;
      j := 1;
      i := iPLen - 1;
      k := 0;
      bMatch := False;
      while j < iPLen do
      begin
        while (i > 0) and (k <> j) do
        begin
          while (k < j) and (i - k > 0) and (Pattern[iPLen - k] = Pattern[i - k]) do
          begin
            bMatch := True;
            inc(k);
          end;
          if (k < j) then // kein ganzes Suffix gefunden
          begin
            if i-k <= 0 then
              i := 0 // Maximal-Skip
            else
            begin
              if bMatch then // kein Match mit dieser Länge...weitersuchen
              begin
                k := 0; // wieder von vorn
                bMatch := False;
              end;
              Dec(i);
            end;
          end;
        end;
        FGoodTable[j] := iPLen - i;
        inc(j);
      end;
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat