Cancellare un array di elementi definiti - pagina 14

 
Dmitry Fedoseev:

È l'asilo.

Dalla tua parte quindi esattamente. Provate ad elaborare lo stesso codice con parametri doppi (potete normalizzare qualsiasi cosa).

Forse nel processo capirete cosa intendo.

 
Stanislav Dray:

Dalla tua parte quindi esattamente. Provate ad elaborare lo stesso codice con parametri doppi (potete normalizzare qualsiasi cosa).

Forse nel processo capirete di cosa stavo parlando.

No, posso assicurarvi, responsabilmente, che non avete capito qualcosa qui.

 
Dmitry Fedoseev:

No, posso assicurarvi, responsabilmente, che c'è qualcosa che non capite qui.

Bene allora, buona fortuna nella normalizzazione degli array :)

 
Stanislav Dray:

Bene allora, buona fortuna nella normalizzazione degli array :)

Con questo approccio, sei tu che devi sperare nella fortuna.

 

Il costo della filtrazione è c*O (n). Dove c è una qualche costante per le comparse. È miserabile. Poiché non potete migliorare O(n), avete deciso di usare c. Perché? È insignificante. Qualsiasi ottimizzazione che fate migliorerà solo una parte di questa correzione trascurabile.

È meglio controllare se tutti gli algoritmi presentati hanno davvero O(n). Nessuno di loro è stato testato.

 
Vasiliy Sokolov:

È trascurabile. Qualsiasi ottimizzazione che fate migliorerà solo una frazione di questa correzione trascurabile.

Bene hz, Semko ha dimostrato il contrario - ha migliorato l'algoritmo di ricerca standard di più di due(!) volte.

Sorprendentemente, è un buon ramo.

 
TheXpert:

Beh, non lo so, ma Semko ha dimostrato il contrario - ha migliorato l'algoritmo di ricerca standard di più di due(!) volte.

Un ramo sorprendentemente buono si è rivelato

Risulta che la copia in senso orario per una sequenza "grande" è più veloce nonostante tutto l'overhead dell'implementazione interna di ArrayCopy.
Mi chiedo, c'è un modo per usare "l'esecuzione speculativa" per accelerare esplicitamente l'algoritmo, o ha già influenzato completamente il risultato?

 

Sergey Dzyublik , senza offesa, solo per informazione. Ho scaricato il tuo file e mi sono sentito obbligato a vedere la mia funzione. Non hai bisogno di controlli inutili.
Era:

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;
  }

Diventato:

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;
  }
File:
 
Konstantin Nikitin:

Sergey Dzyublik , senza offesa, solo per informazione. Ho scaricato il tuo file e mi sono sentito obbligato a vedere la mia funzione. Non c'è bisogno di controlli inutili.
Ho avuto:

Diventato:

Perché ti sei sistemato e mi hai buttato fuori? Non va bene.

 
Konstantin Nikitin:

Sergey Dzyublik , senza offesa, solo per informazione.
Ho scaricato il tuo file e mi sono sentito obbligato a vedere la mia funzione.

È stato usato l'ultimo file disponibile, non sono state apportate modifiche al codice dai commenti.