AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Gibt es ein Schnelleres verfahren als Min?
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es ein Schnelleres verfahren als Min?

Ein Thema von Hallo_Thomas · begonnen am 17. Jun 2005 · letzter Beitrag vom 18. Jun 2005
Antwort Antwort
Seite 1 von 3  1 23      
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#1

Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 19:33
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?



Counter[145]:= Min(Counter[48],Min(Counter[50],Counter[52]));
edit:Weis jemand wieviel Ms dieser Durchlauf benötigt?
  Mit Zitat antworten Zitat
simonko

Registriert seit: 2. Jun 2005
125 Beiträge
 
#2

Re: Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 19:39
was machst du denn genau?
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 19:47
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.
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#4

Re: Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 19:49
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
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 19:54
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...
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 20:02
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 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
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#7

Re: Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 20:07
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.....
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#8

Re: Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 20:13
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.
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 20:18
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?
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Gibt es ein Schnelleres verfahren als Min?

  Alt 17. Jun 2005, 20:29
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 05:53 Uhr.
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