Einzelnen Beitrag anzeigen

a.def
(Gast)

n/a Beiträge
 
#1

Burrows-Wheeler-Transformation nach Wikipedia

  Alt 18. Dez 2016, 00:35
Ich stecke gerade fest und finde einfach nicht heraus wo das Problem ist.
Ich möchte gerne in Delphi die Burrows-Wheeler-Transformation nachschreiben. Dazu habe ich mir das Wikipedia-Beispiel angesehen (LUA) und nach Delphi umgeschrieben.

Wikipedia: https://de.wikipedia.org/wiki/Burrow...ielcode_in_Lua

Delphi
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
 i, iTmp, j, len, index: Integer;
 sText, codiert: string;
 matrix: array of string;
begin
 Memo1.Lines.Clear;
 sText := Edit2.Text;
 len := Length(sText) + 1;
 SetLength(matrix, len);

 // Start : .ANANAS.
 // Wanted result: ANANAS..

 // Tabelle mit allen Rotationen des Textes erzeugen
 for i := 1 to len - 1 do
  begin
   matrix[i] := Copy(sText, i, Length(sText)) + Copy(sText, 1, i - 1);
   // matrix[i] = string.sub(text, i) .. string.sub(text, 1, i - 1)
   Memo1.Lines.Add(matrix[i]);
  end;

 // Tabelle sortieren
 for i := 1 to len - 1 do
  begin
   for j := i + 1 to len - 1 do
    begin
     if Length(matrix[i]) > Length(matrix[j]) then
      begin
       matrix[i] := matrix[j];
       matrix[j] := matrix[i];
      end;
    end;
  end;;

 // Aus jeder Zeile das letzte Zeichen nehmen
 codiert := '';
 index := -1;
 for i := 1 to len - 1 do
  begin
   codiert := codiert + Copy(matrix[i], Length(matrix[i]), 1);

   if matrix[i] = sText then
    index := i;
  end;

 ShowMessage(codiert);
end;
Das gewünschte Ergebnis der ersten Transformation (Rotation) ist
1: .ANANAS.
2: ..ANANAS
3: S..ANANA
4: AS..ANAN
5: NAS..ANA
6: ANAS..AN
7: NANAS..A
8: ANANAS..

Mein Ergebnbis ist aber
1: .ANANAS.
2: ANANAS..
3: NANAS..A
4: ANAS..AN
5: NAS..ANA
6: AS..ANAN
7: S..ANANA
8: ..ANANAS

Blickt hier jemand eher durch als ich
  Mit Zitat antworten Zitat