AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Algorithmus

Ein Thema von Curby · begonnen am 23. Okt 2003 · letzter Beitrag vom 25. Okt 2003
 
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
 


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 02:24 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-2025 by Thomas Breitkreuz