Очистка массива от заданного (ых) элементов - страница 14

 
Dmitry Fedoseev:

Это детский сад.

С вашей стороны так точно. Попробуйте обработать тот же код с double параметрами(можете нормализовать что угодно).

Возможно в процесе вы поймёте о чём я говорил. 

 
Stanislav Dray:

С вашей стороны так точно. Попробуйте обработать тот же код с double параметрами(можете нормализовать что угодно).

Возможно в процесе вы поймёте о чём я говорил. 

Нет, смею вас заверить, со всей ответственностью, что здесь чего-то не понимаете вы.

 
Dmitry Fedoseev:

Нет, смею вас заверить, со всей ответственностью, что здесь чего-то не понимаете вы.

ну тогда удачи вам в нормализации массивов :)

 
Stanislav Dray:

ну тогда удачи вам в нормализации массивов :)

При таком подходе, это вам надо надеяться на удачу.

 

Вы реально какой-то фигней занимаетесь.  Стоимость фильтрации c*O(n).  Где c некая константа на доп. расходы. Она мизерна. Раз O(n) уже нельзя улучшить принялись за c. Зачем? Она ничтожна. Ваша любая оптимизация будет улучать лишь часть этой ничтожной поправки. 

Луче бы подумали над тем, действительно ли все представленные алгоритмы имеют O(n). Ничего такого протестировано не было. 

 
Vasiliy Sokolov:

Она ничтожна. Ваша любая оптимизация будет улучать лишь часть этой ничтожной поправки.

ну хз, вот Семко доказал обратное - взял улучшил стандартный алгоритм перебора более чем в два(!) раза.

на удивление хорошая ветка получилась

 
TheXpert:

ну хз, вот Семко доказал обратное - взял улучшил стандартный алгоритм перебора более чем в два(!) раза.

на удивление хорошая ветка получилась

Оказалось, что поблочное копирование для "большой" последовательности работает быстрее не смотря на весь оверхед внутренней реализации ArrayCopy.
Интересно, как-то можно использовать "спекулятивное выполнение" для явного ускорения работы алгоритма, или оно уже в полной мере повлияло на результат?

 

Sergey Dzyublik не в обиду, так для информации. Скачал ваш файл и дернуло посмотреть свою функцию. Лишние проверки ни к чему не нужны.
Был:

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

Стал:

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;
  }
Файлы:
 
Konstantin Nikitin:

Sergey Dzyublik не в обиду, так для информации. Скачал ваш файл и дернуло посмотреть свою функцию. Лишние проверки ни к чему не нужны.
Был:

Стал:

Чтож вы себя исправили а меня выкинули ? нехорошо

 
Konstantin Nikitin:

Sergey Dzyublik не в обиду, так для информации.
Скачал ваш файл и дернуло посмотреть свою функцию. 

Использовался последний доступный файл, правки кода из комментариев не были внесены.