Löschen eines Arrays mit definierten Element(en) - Seite 14

 
Dmitry Fedoseev:

Das ist der Kindergarten.

Von Ihrer Seite so genau. Versuchen Sie, denselben Code mit doppelten Parametern zu verarbeiten (Sie können alles normalisieren).

Vielleicht werden Sie dabei verstehen, was ich meine.

 
Stanislav Dray:

Von Ihrer Seite so genau. Versuchen Sie, denselben Code mit doppelten Parametern zu verarbeiten (Sie können alles normalisieren).

Vielleicht werden Sie dabei verstehen, wovon ich gesprochen habe.

Nein, ich kann Ihnen verantwortungsvoll versichern, dass Sie hier etwas nicht verstehen.

 
Dmitry Fedoseev:

Nein, ich kann Ihnen verantwortungsvoll versichern, dass Sie hier etwas nicht verstehen.

Na dann, viel Glück bei der Normalisierung der Arrays :)

 
Stanislav Dray:

Na dann, viel Glück bei der Normalisierung der Arrays :)

Bei diesem Ansatz sind Sie es, der auf Glück hoffen muss.

 

Die Kosten der Filterung sind c*O (n), wobei c eine Konstante für Extras ist. Es ist erbärmlich. Da Sie O(n) nicht verbessern können, haben Sie beschlossen, c zu verwenden. Und warum? Sie ist unbedeutend. Jede Optimierung, die Sie vornehmen, wird nur einen Teil dieser vernachlässigbaren Korrektur verbessern.

Sie sollten besser überprüfen, ob alle eingereichten Algorithmen wirklich O(n) haben. Keiner von ihnen ist getestet worden.

 
Vasiliy Sokolov:

Sie ist vernachlässigbar. Jede Optimierung, die Sie vornehmen, wird nur einen Bruchteil dieser vernachlässigbaren Korrektur verbessern.

Nun, Semko hat das Gegenteil bewiesen - er hat den Standard-Suchalgorithmus um mehr als das Zweifache(!) verbessert.

Überraschenderweise ist es ein guter Zweig.

 
TheXpert:

Nun, ich weiß es nicht, aber Semko hat das Gegenteil bewiesen - er hat den Standardsuchalgorithmus um mehr als das Zweifache(!) verbessert.

Der Zweig ist überraschend gut ausgefallen

Es stellt sich heraus, dass das blockweise Kopieren für "große" Sequenzen schneller ist, trotz des Overheads der internen ArrayCopy Implementierung.
Ich frage mich, ob es eine Möglichkeit gibt, die "spekulative Ausführung" zu nutzen, um den Algorithmus explizit zu beschleunigen, oder ob sie sich bereits vollständig auf das Ergebnis ausgewirkt hat?

 

Sergey Dzyublik , nichts für ungut, nur zur Information. Ich habe Ihre Datei heruntergeladen und fühlte mich gezwungen, meine Funktion zu sehen. Sie brauchen keine unnötigen Kontrollen.
War:

template<typename T>
int arrayFilter2(T &data[],const T value) // вариан Nikitin
  {
   int d=ArraySize(data),j=0,y=0;

   for(int i=0; i<d; i++,y++)
     {
      bool res=false;
      if(data[i]==value)// || data[i]==NULL)
        {
         res=true;
         j++;
        }

      if(j>0)
        {
         if(d==y+j)
            break;
         data[y]=data[y+j];
        }
      if(res)
         y--;
     }

   if(d>y)
      ArrayResize(data,y);

   return y;
  }

Wurde:

template<typename T>
int arrayFilter2(T &data[],const T value=NULL)
  {
     int s, _s = s = ArraySize(data);
     bool res = false;
     
     for(int i=0, j=0; i<_s; i++,j++)
     {
          if( data[i] == value)// || data[i]==NULL)
          {
               res = true;
               s--;
               j--;
               continue;
          }
          if( res )
               data[j] = data[i];
     }
     
     if(s < _s)
          ArrayResize(data, s);
     
     return s;
  }
Dateien:
 
Konstantin Nikitin:

Sergey Dzyublik , nichts für ungut, nur zur Information. Ich habe Ihre Datei heruntergeladen und fühlte mich gezwungen, meine Funktion zu sehen. Unnötige Kontrollen entfallen.
Ich hatte:

Wurde:

Warum hast du dich selbst repariert und mich rausgeworfen? Das ist nicht gut.

 
Konstantin Nikitin:

Sergey Dzyublik , nichts für ungut, nur zur Information.
Ich habe Ihre Datei heruntergeladen und fühlte mich gezwungen, meine Funktion zu sehen.

Es wurde die letzte verfügbare Datei verwendet, es wurden keine Änderungen am Code anhand der Kommentare vorgenommen.