Limpar um conjunto de elementos definidos - página 14

 
Dmitry Fedoseev:

É um jardim de infância.

De seu lado, tão exatamente. Tente processar o mesmo código com parâmetros duplos (você pode normalizar qualquer coisa).

Talvez no processo você entenda o que quero dizer.

 
Stanislav Dray:

De seu lado, tão exatamente. Tente processar o mesmo código com parâmetros duplos (você pode normalizar qualquer coisa).

Talvez no processo você entenda do que eu estava falando.

Não, posso assegurar-lhe, responsavelmente, que você não entende algo aqui.

 
Dmitry Fedoseev:

Não, posso assegurar-lhe, responsavelmente, que há algo que você não entende aqui.

Bem, então, boa sorte na normalização das matrizes :)

 
Stanislav Dray:

Bem, então, boa sorte na normalização das matrizes :)

Com esta abordagem, é você quem deve esperar por sorte.

 

O custo da filtragem é c*O (n). Onde c é alguma constante para extras. É miserável. Como você não pode melhorar o O(n), você decidiu usar o c. Por quê? É insignificante. Qualquer otimização que você fizer só irá melhorar uma parte desta correção insignificante.

É melhor verificar se todos os algoritmos apresentados têm realmente O(n). Nenhum deles foi testado.

 
Vasiliy Sokolov:

É insignificante. Qualquer otimização que você fizer melhorará apenas uma fração desta correção insignificante.

Bem hz, Semko provou o oposto - ele melhorou o algoritmo de busca padrão por mais de duas(!) vezes.

Surpreendentemente, é um bom ramo.

 
TheXpert:

Bem, eu não sei, mas Semko provou o contrário - ele melhorou o algoritmo de busca padrão por mais de duas(!) vezes.

Um ramo surpreendentemente bom acabou se revelando

Acontece que a cópia em bloco para a seqüência "grande" é mais rápida apesar de todas as despesas gerais de implementação interna do ArrayCopy.
Será que existe alguma maneira de usar a "execução especulativa" para acelerar explicitamente o algoritmo, ou ele já afetou totalmente o resultado?

 

Sergey Dzyublik , sem ofensa, apenas a título de informação. Fiz o download de seu arquivo e me senti compelido a ver minha função. Você não precisa de verificações desnecessárias.
Foi:

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

Tornou-se:

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

Sergey Dzyublik , sem ofensa, apenas a título de informação. Eu baixei seu arquivo e me senti obrigado a ver minha função. Não há necessidade de verificações desnecessárias.
Eu tinha:

Tornou-se:

Por que você se consertou e me expulsou? Não adianta.

 
Konstantin Nikitin:

Sergey Dzyublik , sem ofensa, apenas a título de informação.
Fiz o download de seu arquivo e me senti compelido a ver minha função.

O último arquivo disponível foi utilizado, nenhuma edição de código foi feita a partir dos comentários.