Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Algorithmus zur Fehlererkennung?
lord.paddington - So 23.10.05 21:25
Titel: Algorithmus zur Fehlererkennung?
kennt jemand einen funktionierenden Algorithmus zur Fehlererkennung?
Wenn Fehler neu, dann setze Zähler auf 1
wenn Fehler alt, dann inc Fehlerzähler für diesen Fehler
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| begin if dummy = fehler[f] then begin inc(fehlerx[f]); end else begin fehler[f]:= dummy; fehlerx[f] := 1; inc(q); exit; end; end; |
Moderiert von
Gausi: Quote- durch Delphi-Tags ersetztModeriert von
Gausi: Topic aus VCL (Visual Component Library) verschoben am So 23.10.2005 um 21:46
Gausi - So 23.10.05 21:50
Was für Fehler willst du denn automatisch erkennen? Was ist denn deiner Meinung nach überhaupt ein "Fehler"?
lord.paddington - So 23.10.05 21:58
ok, ist ein bisschen irritierend...
streiche Fehler, nimm Büchersammlung
Habe eine Büchersammlung bspw. 1000 Bücher.
Nehme mir jetzt Buch für Buch vor und prüfe...
Lese Titel von Buch eins und prüfe, ob ich das Buch schon habe...
wenn ja, dann setze Zähler für diesen Buchtitel auf 2
Lese Titel von Buch 2 und prüfe, ob ich das Buch schon habe...
wenn nein, dann setze Zähler auf 1 und lege Buchtitel an
u.s.w.
alzaimar - So 23.10.05 22:24
Langsam, aber sofort umzusetzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Var BookList : TStringlist;
Begin Booklist := TStringlist.Create; Booklist.Sorted := True; ForEach Book in MyBooks do begin i := Booklist.indexOf (Book.Title); If i=-1 Then Booklist.AddObject (Book.Title, Pointer (1)) else Booklist.Objects[i] := Pointer (Integer (Booklist.Objects[i]) + 1); End; End; |
Ich verwende die Objects-Eigenschaft der TStringList, die eigentlich dazu dient, pro String ein Object mit zu speichern, einfach als Zähler.
Schneller wäre das mit einer entsprechend schnellen Datenstruktur, z.B. meinen String-Hashtabellen (such mal nach TStringDictionary hier, oder in der DP). In IniFiles schlummert eine Klasse, die bis ca. 30.000 Strings auch ganz schön schnell ist, die THashedStringList, damit geht o.g. Code viel schneller. Leider degeneriert die Performance bei sehr vielen Strings und dann ist die THashedStringList langsamer als eine normale TStringList..
GTA-Place - Mo 24.10.05 17:20
Record währe hier eventuell angemessen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TBook = record Name: String; Anzahl: Integer; end;
var Book: Array of TBook; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| var FindBook: Integer; Found: Boolean; begin for ... begin Found := False;
for FindBook := 0 to Length(Book) do if Book[FindBook].Name = 'Herr der Ringe' then begin Found := True; Book[FindBook].Anzahl := Book[FindBook].Anzahl + 1; end;
if not (Found) then begin SetLength(Book, Length(Book) + 1); Book[Length(Book) - 1].Name := 'Herr der Ringe'; Book[Length(Book) - 1].Anzahl := 1; end; end; end; |
(ungetestet)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!