Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Gibt es ein Schnelleres verfahren als Min? (https://www.delphipraxis.net/47910-gibt-es-ein-schnelleres-verfahren-als-min.html)

Hallo_Thomas 17. Jun 2005 18:33


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?

simonko 17. Jun 2005 18:39

Re: Gibt es ein Schnelleres verfahren als Min?
 
was machst du denn genau?

leddl 17. Jun 2005 18:47

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.

Pr0g 17. Jun 2005 18:49

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

Robert_G 17. Jun 2005 18:54

Re: Gibt es ein Schnelleres verfahren als Min?
 
Zitat:

Zitat von leddl
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?

es macht nix weiter als:
Delphi-Quellcode:
if left < right then
  result := left
else
  result := right;
Du könntest es inline schreiben um die Sprünge loszuwerden, sonst sehe ich da nicht viele einfache Möglichkeiten für Optimierungen.
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... ;)

leddl 17. Jun 2005 19:02

Re: Gibt es ein Schnelleres verfahren als Min?
 
Zitat:

Zitat von Robert_G
es macht nix weiter als:
Delphi-Quellcode:
if left < right then
  result := left
else
  result := right;

Na ich bin doch mal davon ausgegangen, daß er sich das denken kann. ;)
Zitat:

Zitat von Robert_G
Das weißt aber du selbst am besten, schließlich wissen wir nicht wie dein Programm aussieht, noch was es erreichen soll... ;)

Doch, er hat den betreffenden Quellcode in nem anderen Thread bereits gepostet. ;)

//Edit: Tags richtig gesetzt :mrgreen:

Hallo_Thomas 17. Jun 2005 19:07

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.....

Hallo_Thomas 17. Jun 2005 19:13

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.

leddl 17. Jun 2005 19:18

Re: Gibt es ein Schnelleres verfahren als Min?
 
Zitat:

Zitat von Hallo_Thomas
Weis jemand wie schnell dieser Befehl ganz oben dauert in Ms?

Das hängt vom PC ab (wobei bei dem bißchen eigentlich keine großen Unterschiede rauskommen sollten). Aber was hindert dich daran, es selbst auszuprobieren? :gruebel:

Sharky 17. Jun 2005 19:29

Re: Gibt es ein Schnelleres verfahren als Min?
 
Hai "Hallo_Thomas",

unabhängig von deiner Frage:

Delphi-Quellcode:
 
...
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
...
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz