Effacement d'un tableau d'élément(s) défini(s) - page 24

 

Voici la meilleure version, utilisant la recherche binaire.

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


Je ne parle pas russe, j'utilise google translate.
 
jdjahfkahjf:

Il n'est pas russe, c'est difficile à comprendre. El habla espanol.

J'ai été tenté d'apprendre l'espagnol quand j'étais de passage là-bas, mais j'ai laissé tomber... pour rien.
 
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;
}

La façon dont vous en avez besoin est la façon dont vous pouvez l'invoquer à la fin.

 
Konstantin Nikitin:

La façon dont vous en avez besoin est la façon dont vous pouvez l'invoquer à la fin.

une copie de value[] à trier lors de l'entrée dans la fonction et

la recherche binaire sera plus rapide, l'Espagnol est juste ici.

 
Maxim Kuznetsov:

une copie de valeur[] à trier lors de l'entrée dans la fonction et

la recherche binaire sera plus rapide, l'Espagnol a raison sur ce point.

Je ne m'en suis pas préoccupé. Je viens de faire un transfert rapide. Oui, et il peut y avoir des tableaux de chaînes de caractères.

P.S. J'en ai assez de ce divertissement. Il est temps de passer aux choses sérieuses.
 
Maxim Kuznetsov:

une copie de valeur[] à trier lors de l'entrée dans la fonction et

la recherche binaire sera plus rapide, l'Espagnol a raison sur ce point.

J'utiliserais la structure de données HashSet pour la valeur.
La complexité serait de O(n) + O(m).

Pour la recherche binaire proposée, la complexité serait : O(n log(m))

 

24 pages - Je ne comprends pas d'où vient le tempérament et jusqu'où on peut aller dans une tâche primitive, j'ai pris le script de la troisième page, car il n'y a pas de force pour lire plus loin, j'ai ajouté trois lignes, inline sans fonctions.

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 микросекунд

c'est étrange, mais on dirait qu'il a battu tout le monde - "en cinq minutes et sans aucun artifice" (c) et est allé se coucher...))

Dossiers :
 
Ivan Negreshniy:

24 pages - Je ne comprends pas d'où vient le tempérament et jusqu'où on peut aller dans une tâche primitive, j'ai pris le script de la troisième page, car il n'y a pas de force pour lire plus loin, j'ai ajouté trois lignes, inline sans fonctions.

c'est étrange, mais il semble que j'ai battu tout le monde - "en cinq minutes et sans artifices" (c) et je suis allé me coucher...)))

1. Vous avez pris du code d'âge inconnu, et c'est un manque de respect direct envers la communauté ;
2. Vous avez fait des changements dans le code, en faisant du nagamno-codage quelque part à l'intérieur, sans même les mettre dans une fonction séparée ;
3. Ensuite, apparemment, vous avez lancé le code pour des tests de performance en compilation DEBUG, car la vitesse d'exécution et les résultats ne correspondent pas à la version RELEASE.
4. Votre code contient des erreurs et ne résout pas du tout le problème. (Puisquearr[N--] peut contenir unevaleur qui n'a été ni filtrée ni supprimée).

Mais avec le pathos d'un tel "gagnant"...

 

OK. Tant qu'il n'y a pas de travail, le test de la folie continue. J'ai ajouté un nouveau test vectoriel et inclus l'option@Ivan Negreshniy en même temps, écoutez, corrigez vos erreurs, votre algorithme ne fonctionne pas.

Nous avons obtenu ceci

1

Dossiers :
 

Optimisation mineure

P.S. a corrigé les erreurs et remplacé le fichier

Dossiers :
Raison: