清除一个定义元素的数组 - 页 14

 
Dmitry Fedoseev:

这是幼儿园。

从你的角度来看是这样的。试着用双倍的参数来处理同样的代码(你可以将任何东西规范化)。

也许在这个过程中你会明白我的意思。

 
Stanislav Dray:

从你的角度来看是这样的。试着用双倍的参数来处理同样的代码(你可以将任何东西规范化)。

也许在这个过程中你会明白我在说什么。

不,我可以负责任地向你保证,你在这里没有理解一些东西。

 
Dmitry Fedoseev:

不,我可以负责任地向你保证,这里有你不了解的东西。

那么,祝你在规范化数组方面好运 :)

 
Stanislav Dray:

那么,祝你在规范化数组方面好运 :)

采用这种方法,应该是你希望得到运气。

 

你实际上在做一些废话。 过滤的成本是c*O(n)。 其中c 是一些额外的常数。它是悲惨的。由于你不能提高O(n),你决定使用c。为什么?它是微不足道的。你所做的任何优化都只能改善这个可以忽略不计的修正的一部分。

你最好检查一下所有提交的算法是否真的有O(n)。它们都没有经过测试。

 
Vasiliy Sokolov:

这一点可以忽略不计。你所做的任何优化都只能改善这个可以忽略不计的修正的一小部分。

好吧hz,Semko证明了相反的情况--他将标准搜索算法改进了2倍多(!)。

令人惊讶的是,这是一个好的分支。

 
TheXpert:

嗯,我不知道,但Semko证明了相反的情况--他将标准搜索算法改进了2倍多(!)。

出乎意料的好的分支变成了

事实证明,尽管有内部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 ,无意冒犯,只是供参考。
我下载了你的文件,觉得必须要看看我的功能。

使用了最后的可用文件,没有从注释中对代码进行编辑。