Einzelnen Beitrag anzeigen

Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: Zeitkritische Array-Prüfung

  Alt 21. Dez 2014, 11:24
Ich glaube, er meint 'schneller' und nicht 'schöner'.

Schneller geht es, wenn Du die 3D-Arrays als 1D-Array ansiehst, dann entfallen die Index-Berechnungen.
Falls 'Characteristics' (bzw. einer der beiden Arrays) nicht oder nur selten verändert wird, kannst Du die Werte in eine Dictionary oder ein Sortieres Array packen und dann wesentlich schneller suchen.

Aber ehrlich gesagt verstehe ich die Schleife nicht. Du suchst also nach dem ersten Treffer (Match). Wenn du ihn gefunden hast, suchst Du nochmal (Goto). Wenn Du dann wieder einen Treffer gefunden hast, springst Du raus mit 'true'... Himm ist 'ThrottleLoop' eine Funktion, die die Arrays verändert?

Gut, egal. Das Goto würden wir hier übrigens auch sehr elegant wegbekommen. Die paar nanosekunden die das dann länger braucht, sind angesichsts der eh sehr unperformanten Umsetzen imho zu vernachlässigen. Hier würde ich eher sauber arbeiten (inline lokale Prozedur mit 'exit' statt 'Goto') aber Du siehst das ja eh anders.

Also:
Delphi-Quellcode:
// Statt
for i:=0 to x do
  for j:=0 to y do
    for j:=0 to z do
      if a[i][j][k]...

// eher
const
  totalElements
Var
  Flattened : Array [0..totalElements-1] of integer absolute a;

...
  for i:=0 to totalElements do
    if Flattened[i]....
Falls sich 'Characteristics' sehr selten ändert, sortierst Du das (entrollte) Array und suchst dann jedes Element aus 'Map' per Binary Search.

Falls die Arrays sehr groß sind, ist eine Dictionary besser geeignet. Das müsste man ausprobieren.

Geändert von Dejan Vu (21. Dez 2014 um 11:31 Uhr)
  Mit Zitat antworten Zitat