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