Borrar una matriz de elementos definidos - página 14

 
Dmitry Fedoseev:

Es un jardín de infancia.

De tu parte tan exactamente. Intenta procesar el mismo código con parámetros dobles (puedes normalizar cualquier cosa).

Quizás en el proceso entiendas lo que quiero decir.

 
Stanislav Dray:

De tu parte tan exactamente. Intenta procesar el mismo código con parámetros dobles (puedes normalizar cualquier cosa).

Quizás en el proceso entiendas de qué estaba hablando.

No, puedo asegurarle, responsablemente, que usted no entiende algo aquí.

 
Dmitry Fedoseev:

No, puedo asegurarte, responsablemente, que hay algo que no entiendes aquí.

Entonces, buena suerte en la normalización de las matrices :)

 
Stanislav Dray:

Entonces, buena suerte en la normalización de las matrices :)

Con este enfoque, eres tú quien debe esperar que haya suerte.

 

El coste de la filtración es c*O (n). Donde c es alguna constante para los extras. Es miserable. Como no puede mejorar O(n), ha decidido utilizar c. ¿Por qué? Es insignificante. Cualquier optimización que se haga sólo mejorará una parte de esta insignificante corrección.

Será mejor que compruebes si todos los algoritmos presentados tienen realmente O(n). Ninguno de ellos ha sido probado.

 
Vasiliy Sokolov:

Es insignificante. Cualquier optimización que se haga sólo mejorará una fracción de esta insignificante corrección.

Pues bien, Semko demostró lo contrario: mejoró el algoritmo de búsqueda estándar en más de dos (!) veces.

Sorprendentemente, es una buena rama.

 
TheXpert:

Bueno, no lo sé, pero Semko demostró lo contrario: mejoró el algoritmo de búsqueda estándar en más de dos (!) veces.

La rama sorprendentemente buena resultó

Resulta que la copia en sentido de las agujas del reloj para una secuencia "grande" es más rápida a pesar de toda la sobrecarga de la implementación interna de ArrayCopy.
Me pregunto si hay alguna forma de utilizar la "ejecución especulativa" para acelerar explícitamente el algoritmo, o si ya ha afectado totalmente al resultado.

 

Sergey Dzyublik , sin ánimo de ofender, sólo a título informativo. He descargado su archivo y me he sentido obligado a ver mi función. No necesitas controles innecesarios.
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;
  }

Se convirtió:

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

Sergey Dzyublik , sin ánimo de ofender, sólo a título informativo. He descargado su archivo y me he sentido obligado a ver mi función. No hay necesidad de controles innecesarios.
Yo tenía:

Se convirtió:

¿Por qué te arreglaste y me echaste? No es bueno.

 
Konstantin Nikitin:

Sergey Dzyublik , sin ánimo de ofender, sólo a título informativo.
He descargado su archivo y me he sentido obligado a ver mi función.

Se utilizó el último archivo disponible, no se editó el código a partir de los comentarios.