![]() |
Gibt es ein Schnelleres verfahren als Min?
Ich hab ein Programm in der so eine Zeile 1000 mal durchlaufen wird, da ich immer nur das Minimum brauche. Gibt es ein Verfahren welches für Variablen schneller ist als dieses?
Delphi-Quellcode:
Counter[145]:= Min(Counter[48],Min(Counter[50],Counter[52]));
edit:Weis jemand wieviel Ms dieser Durchlauf benötigt? |
Re: Gibt es ein Schnelleres verfahren als Min?
was machst du denn genau?
|
Re: Gibt es ein Schnelleres verfahren als Min?
Denk mal genau nach. Was wird min denn machen? Wahrscheinlich vergleicht das die beiden Werte und gibt den kleineren zurück. Wie willst du das noch beschleunigen? Du brauchst eben für n zu vergleichende Werte genau n-1 Vergleiche.
|
Re: Gibt es ein Schnelleres verfahren als Min?
Du scheinst ja mit Arrays zu arbeiten, dann könnte die Funktion MinIntValue() was für dich sein. Die gibt den kleinsten Wert aus einem Array of Integer zurück. Obs schneller ist weiß ich aber nicht.
MfG Pr0g |
Re: Gibt es ein Schnelleres verfahren als Min?
Zitat:
Delphi-Quellcode:
Du könntest es inline schreiben um die Sprünge loszuwerden, sonst sehe ich da nicht viele einfache Möglichkeiten für Optimierungen.
if left < right then
result := left else result := right; Vielleicht ist es möglich dein Programm anders zu strukturieren wodurch so viele Vergleich unnötig werden könnten. Das weißt aber du selbst am besten, schließlich wissen wir nicht wie dein Programm aussieht, noch was es erreichen soll... ;) |
Re: Gibt es ein Schnelleres verfahren als Min?
Zitat:
Zitat:
//Edit: Tags richtig gesetzt :mrgreen: |
Re: Gibt es ein Schnelleres verfahren als Min?
Delphi-Quellcode:
procedure TForm1.AddMyItem(const AItem: String; const AColor: TColor);
var x,y,i : Integer; Counter : array[0..200] of Integer; begin DoubleBuffered := True; Anzeige.Items.InsertObject(0, AItem, Pointer(AColor)); for i := 0 to 200 do for y := 0 to 144 do begin Counter[i] := 0; Feld[i] := 0; end; // Hier beginnen die Berechnungen for x := meineListe.count - 1 downto 0 do for y := 0 to 144 do // Mit jedem SetOfByte vergleichen begin if (StrToInt(meineListe.Strings[x]) in werte[y]) then begin Counter[y] := 0 end else begin Inc(Counter[y]); end; end; ////////Hier beginnt Sortierverfahren begin Counter[145]:= Min(Counter[48],Min(Counter[50],Counter[52])); end;///.... Berechnungen gehen hier Weiter..... |
Re: Gibt es ein Schnelleres verfahren als Min?
Weis jemand wie schnell dieser Befehl ganz oben dauert in Ms?
Mein Hauptproblem liegt darin, dass ich dieses Procedur für Tchart brauche, da sollen dann wür jeden Counter(es kommen einige dazu)dieser Quellcode durchlaufen, und zwar dann pro Item 1 .mal. Er sollte schon mind. im 5.Stelligen bereich arbeiten. |
Re: Gibt es ein Schnelleres verfahren als Min?
Zitat:
|
Re: Gibt es ein Schnelleres verfahren als Min?
Hai "Hallo_Thomas",
unabhängig von deiner Frage:
Delphi-Quellcode:
Du wandelst hier bei für jeden X-Durchlauf 144 mal meineListe.Strings[x] in einen Integer um. Arbeite doch lieber mit einer Hilfsvariablen und mache die Umwandlung nur einmal.... for x := meineListe.count - 1 downto 0 do for y := 0 to 144 do // Mit jedem SetOfByte vergleichen begin if (StrToInt(meineListe.Strings[x]) in werte[y]) then begin ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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