Thema: Delphi Algorithmus

Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Algorithmus

  Alt 24. Okt 2003, 08:14
Hallo,
ich habe hier noch einen Vorschlag
Delphi-Quellcode:
TSignArray = Array [0..255] of Double; // Entspricht dem Ordinalwert der ASCII-Zeichen

procedure TForm1.DoIt(aText: TStrings; var aArray: TSignArray);
var
  iCnt : Integer;
begin
  // Array löschen
  For iCnt:=Low(aArray) to High(aArray) do
    aArray[iCnt]:=0.0;
  // Berechne über den Ordinalwert des ASCII-Zeichens den Index im Array
  // und erhöhe den Wert an dieser Stelle um 1
  For iCnt:=1 to Length(aText.Text) do
    aArray[Ord(aText.Text[iCnt])]:=aArray[Ord(aText.Text[iCnt])]+1.0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MyArray : TSignArray;
  iCnt : Integer;
  Gesamt : Double;
begin
  DoIt(Memo1.Lines,MyArray);
  Gesamt:=0.0;
  // Berechne die Anzahl der Zeichen im Text
  Gesamt:=Length(Memo1.Lines.Text);
  // Die Anzahl eines einzelnen Zeichen geteilt durch die Gesamtanzahl
  // ergibt die Häufigkeit
  For iCnt:=Low(MyArray) to High(MyArray) do
    MyArray[iCnt]:=MyArray[iCnt]/Gesamt;
  // TChart befüllen
  Series1.Clear;
  For iCnt:=Low(MyArray) to High(MyArray) do
    Series1.Add(MyArray[iCnt],IntToStr(iCnt),clRed);

  Gesamt:=0.0;
  // Test, ob die Summe der Häufigkeiten 1 ergibt
  For iCnt:=Low(MyArray) to High(MyArray) do
    Gesamt:=Gesamt+MyArray[iCnt];
  ShowMessage(FloatToStr(Gesamt));

  // Rechne die Häufigkeiten in Prozent um
  For iCnt:=Low(MyArray) to High(MyArray) do
    MyArray[iCnt]:=MyArray[iCnt]*100;
  Gesamt:=0.0;
  // Test, ob die Summe der Häufigkeiten 100% ergibt
  For iCnt:=Low(MyArray) to High(MyArray) do
    Gesamt:=Gesamt+MyArray[iCnt];
  ShowMessage(FloatToStr(Gesamt));
end;
Der Algorithmus verwendet ein Array um die Anzahl der einzelnen zu ermitteln.
Dabei entspricht der Index im Array dem Ordinalwert des ASCII-Zeichens.
Jetzt kann für jedes Zeichen im Text der Ordinalwert berechnet werden. Dieser Ordinalwert wird als
Index für das Array verwendet, um den Wert an der Position um 1 zu erhöhen. Anschließend wird jedes Element im Array durch die Gesamtanzahl der Zeichen geteilt. Damit steht im Array die Häufigkeit des jeweiligen Zeichens. Über MyArray[Ord('a')] erhält man dann die Häufigkeit des Zeichens a.
Wüsste evt. jemand wie es noch schneller gehen könnte alle Häufigkeiten in einem Text zu berechnen?
Angehängte Dateien
Dateityp: zip abc.zip (274,5 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat