주어진 요소의 배열 지우기 - 페이지 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); 
}


 나는 러시아어를 할 수 없으며 구글 번역기를 사용합니다.
 
jdjahfkahjf :

그는 러시아인이 아니라 이해하기 어렵습니다. 엘 하블라 에스파뇰

그 곳을 지나며 스페인어를 배우고 싶었지만 어쩐지 포기했다.. 허사
 
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 :

당신이 필요로 하고 당신은 결국 부를 수 있습니다.

함수를 입력할 때 정렬할 값[]의 복사본 및

바이너리 검색을 사용하면 모든 것이 더 빨라집니다. 여기 스페인 사람 말이 맞습니다.

 
Maxim Kuznetsov :

함수를 입력할 때 정렬할 값[]의 복사본 및

바이너리 검색을 사용하면 모든 것이 더 빨라집니다. 여기 스페인 사람 말이 맞습니다.

예, 머리에 신경을 쓰지 않았습니다. 빨리 움직였다. 예, string형 배열이 있을 수 있습니다.

PS 이 오락에 지쳤습니다. 바쁠 시간
 
Maxim Kuznetsov :

함수를 입력할 때 정렬할 값[]의 복사본 및

바이너리 검색을 사용하면 모든 것이 더 빨라집니다. 여기 스페인 사람 말이 맞습니다.

값 값에 대해 HashSet 데이터 구조 를 사용합니다.
복잡성: O(n) + O(m)

제안된 이진 검색의 경우 복잡성은 다음과 같습니다. O(n log(m))

 

24쪽 - 기질이 어디에서 왔는지, 얼마나 원시적인 작업을 할 수 있는지 명확하지 않습니다. 세 번째 페이지에서 대본을 가져왔기 때문에 더 읽을 힘이 없어 인라인 기능 없이 세 줄을 추가했습니다.

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쪽 - 기질이 어디에서 왔는지, 얼마나 원시적인 작업을 할 수 있는지 명확하지 않습니다. 세 번째 페이지에서 대본을 가져왔기 때문에 더 읽을 힘이 없어 인라인 기능 없이 세 줄을 추가했습니다.

이상하지만 캠페인이 모든 사람을 물리 쳤습니다 - "5 분 안에 어떤 트릭도없이"(c) 잠자리에 들었습니다 ...)))

1. 얼마나 오래된 것인지 명확하지 않은 코드를 가져갔고 이는 커뮤니티에 대한 직접적인 무례입니다.
2. 별도의 함수로 옮기지 않고 내부 어딘가에 있는 nagamnokodiv 코드를 변경했습니다.
3. 그런 다음 실행 속도 와 결과가 모두 RELEASE 버전과 일치하지 않기 때문에 DEBUG 컴파일에서 성능 테스트를 위한 코드를 시작한 것 같습니다.
4. 동시에 코드에 오류가 포함되어 있으며 문제를 전혀 해결하지 못합니다. ( arr[N--] 에는 필터링되거나 제거되지 않은 이 포함될 수 있기 때문입니다.)

그러나 그러한 "승자"의 파토스 ...

 

확인. 일이 없는 동안 미친 테스트는 계속된다. 새로운 벡터 테스트가 추가되었고 동시에 @Ivan Negreshniy 옵션이 포함되었습니다. 보고, 실수를 분석하면 알고리즘이 작동하지 않습니다.

이렇게 생겼습니다

하나

파일:
 

작은 최적화

PS는 오류를 수정하고 파일을 교체했습니다

파일: