定義された要素の配列をクリアする。 - ページ 24

 

ここでは、バイナリサーチを使ったベスト版を紹介します。

#include <Arrays\ArrayInt.mqh>
int array_filter(int &arr[], const int &filters[])
{
   int size_arr = ArraySize(arr);
   CArrayInt filterz;
   filterz.AssignArray(filters);
   filterz.Sort();
   int i=0, k=0;
   for(i=0; i<size_arr; i++)
      if(filterz.Search(arr[i]) < 0)
         arr[k++] = arr[i]; 
   return ArrayResize(arr, k); 
}


ロシア語は話せないので、google翻訳を使用しています。
 
jdjahfkahjf:

ロシア人じゃないから、わかりにくい。El habla espanol.

スペインを通過する際に、スペイン語を学びたい衝動に駆られましたが、なぜか断念...むなしく
 
template<typename T>
int arrayFilter(T &data[], const T value)
{
     bool ser = ArrayGetAsSeries( data ) ? ArraySetAsSeries(data, false) : false;
   
     int s, _s = s = ArraySize(data);
     bool result = false;
     
     for(int i=0, j=0; i<_s && !IsStopped(); i++)
     {
          if( data[i] == value || data[i] == NULL )
          {
               result = true;
               s--;
               continue;
          }
          
          if( result )
               data[j] = data[i];
          j++;
     }
     
     if(s < _s)
          if( ArrayResize(data, s) )
               if(ArraySize(data) == _s)
                    ArrayFill(data, s, _s-s, NULL);
     
     if( ser )
          ArraySetAsSeries(data, true);
     
     return s;
}

template<typename T>
int arrayFilter(T &data[], const T &value[])
{
     bool ser = ArrayGetAsSeries( data ) ? ArraySetAsSeries(data, false) : false;
   
     int s, _s = s = ArraySize(data);
     bool result = false;
     
     for(int i=0, j=0; i<_s && !IsStopped(); i++)
     {
          bool p = false;
          for(int y=0; y<ArraySize(value); y++)
               if( data[i] == value[y] )
               {
                    result = true;
                    s--;
                    p = true;
                    break;
               }
          if( p )
               continue;
          
          if( result )
               data[j] = data[i];
          j++;
     }
     
     if(s < _s)
          if( ArrayResize(data, s) )
               if(ArraySize(data) == _s)
                    ArrayFill(data, s, _s-s, NULL);
     
     if( ser )
          ArraySetAsSeries(data, true);
     
     return s;
}

どのように必要なのかが、結局は召喚の仕方なのです。

 
Konstantin Nikitin:

どのように必要なのかが、結局は召喚の仕方なのです。

関数に入るときにソートされるvalue[]のコピーと

バイナリサーチの方が早いよ、スペイン人は。

 
Maxim Kuznetsov:

関数に入るときにソートされるvalue[]のコピーと

バイナリサーチの方が速いというのは、スペイン人の言うとおりです。

自分で悩むことはなかった。早速、転送してみました。はい、そして文字列配列もあるかもしれません。

P.S. このエンターテイメントにはうんざりしています。そろそろ本題に入りましょう。
 
Maxim Kuznetsov:

関数に入るときにソートされるvalue[]のコピーと

バイナリサーチの方が速いというのは、スペイン人の言うとおりです。

値にはHashSetデータ 構造を使用します。
複雑さはO(n)+O(m)となる。

提案するバイナリサーチの場合、計算量はO(n log(m))となります。

 

24ページ - 私は気質がどこから来るのか、あなたが原始的なタスクを通過することができますどのくらい理解していない、さらに読むための強さがないので、3ページ目からスクリプトを取り、3行を追加し、関数なしでインライン化した。

N=ArraySize(arr)-1;
for(int i=N;i>=0;i--) if(arr[i]==Value) arr[i]=arr[N--]; N++;
ArrayResize(arr,N);
2018.11.17 01:44:40.077 ArrayDeleteValue (EURUSD,H1)    вариант Pastushak: Контрольная сумма = 496597320; элементов - 999020; время выполнения = 308973 микросекунд
2018.11.17 01:44:40.092 ArrayDeleteValue (EURUSD,H1)    вариант Korotky: Контрольная сумма = 496597320; элементов - 999020; время выполнения = 11531 микросекунд
2018.11.17 01:44:40.107 ArrayDeleteValue (EURUSD,H1)    вариант Fedoseev: Контрольная сумма = 496597320; элементов - 999020; время выполнения = 11325 микросекунд
2018.11.17 01:44:40.114 ArrayDeleteValue (EURUSD,H1)    вариант Semko: Контрольная сумма = 496597320; элементов - 999020; время выполнения = 2819 микросекунд
2018.11.17 01:44:40.117 ArrayDeleteValue (EURUSD,H1)    вариант Inline: Контрольная сумма = 496597320; элементов - 999020; время выполнения = 2600 микросекунд

変な話ですが、「5分で小細工なしで」(c)みんなを倒して寝たみたいです(笑)))

ファイル:
 
Ivan Negreshniy:

24ページ - 私は気質がどこから来るのか、あなたが原始的なタスクを通過することができますどのくらい理解していない、さらに読むための強さがないので、3ページ目からスクリプトを取り、3行を追加し、関数なしでインライン化した。

変な話ですが、「5分でコツコツ」(C)でみんなに勝って寝たみたいです(^^)))

1.

2.コードを変更し、別の関数に入れることもなく、内部のどこかにnagamno-codingした。
3.それから、明らかに、実行速度と 結果の両方がRELEASEバージョンと一致しないので、DEBUGコンパイルでパフォーマンステスト用にコードを起動した。(arr[N--] にはフィルタリングも削除もされなかったValueが 含まれている可能性があるため)。

しかし、そんな「勝ち組」からのパトスで...。

 

OKです。仕事がない限り、クレイジーテストは続く。私は新しいベクトルテストを追加し、同時に@Ivan Negreshniyの オプションを含め、見て、あなたの間違いを整理し、あなたのアルゴリズムが動作していません。

私たちはこれを

1

ファイル:
 

マイナーな最適化

追伸:誤りを訂正し、ファイルを差し替えました。

ファイル:
理由: