Algorithmes, méthodes de résolution, comparaison de leurs performances - page 18

 
Реter Konow:
Pourquoi une solution parfaite à un problème particulier est-elle perçue comme une moquerie ? Sérieusement, je ne comprends pas...

Quelle était votre tâche ? Rappelez-le vous ici publiquement s'il vous plaît.

 
Vasiliy Sokolov:

Vous avez écrit des bêtises. Essentiellement une variante de l'accès à un tableau par son index. En réalité, les numéros de transaction sont aléatoires, et tout votre exemple s'effondrera lorsque vous devrez résoudre le vrai problème.


Attends d'y arriver, je suis sûr que ce sera demain.

 
Реter Konow:

***

Si je devais m'assurer que les données ne disparaissent pas d'un tableau lorsque sa taille est modifiée, ***

Voici une vérification pour les tableaux dynamiques :arr_dynamique unidimensionnel etarr_dynamique_multi bidimensionnel.

//+------------------------------------------------------------------+
//|                                                  ArrayResize.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.001"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- объявим динамические массивы
   double arr_dynamic[];
   double arr_dynamic_multi[][2];
//--- новый размер в первом измерении массива
   if(ArrayResize(arr_dynamic,5)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic\"");
      return;
     }
   if(ArrayResize(arr_dynamic_multi,5)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic_multi\"");
      return;
     }

   for(int i=0;i<ArraySize(arr_dynamic);i++)
      arr_dynamic[i]=i;
   for(int i=0;i<ArrayRange(arr_dynamic_multi,0);i++)
     {
      arr_dynamic_multi[i][0]=i;
      arr_dynamic_multi[i][1]=i*10;
     }

//--- распечатка значений до увеличения размера
   Print("Перед ArrayResize массив \"arr_dynamic\" имеет такие элементы:");
   ArrayPrint(arr_dynamic);
   Print("Перед ArrayResize массив \"arr_dynamic_multi\" имеет такие элементы:");
   ArrayPrint(arr_dynamic_multi);

//--- увеличим размер на два элемента
   if(ArrayResize(arr_dynamic,ArraySize(arr_dynamic)+2)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic\"");
      return;
     }
   if(ArrayResize(arr_dynamic_multi,ArrayRange(arr_dynamic_multi,0)+2)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic_multi\"");
      return;
     }
//--- распечатка значений после увеличения размера
   Print("После ArrayResize (увеличения размера) массив \"arr_dynamic\" имеет такие элементы:");
   ArrayPrint(arr_dynamic);
   Print("После ArrayResize (увеличения размера) массив \"arr_dynamic_multi\" имеет такие элементы:");
   ArrayPrint(arr_dynamic_multi);

//--- новый размер в первом измерении массива установим равным 3 (то есть уменьшим размер массива)
   if(ArrayResize(arr_dynamic,3)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic\"");
      return;
     }
   if(ArrayResize(arr_dynamic_multi,3)==-1)
     {
      Print("Ошибка ArrayResize for \"arr_dynamic_multi\"");
      return;
     }
//--- распечатка значений после уменьшение размера
   Print("После ArrayResize (уменьшение размера) массив \"arr_dynamic\" имеет такие элементы:");
   ArrayPrint(arr_dynamic);
   Print("После ArrayResize (уменьшение размера) массив \"arr_dynamic_multi\" имеет такие элементы:");
   ArrayPrint(arr_dynamic_multi);
  }
//+------------------------------------------------------------------+


Comme vous pouvez le constater, lorsque la taille du tableau augmente, les valeurs précédentes sont conservées:

Перед ArrayResize массив "arr_dynamic" имеет такие элементы:
0.00000 1.00000 2.00000 3.00000 4.00000
Перед ArrayResize массив "arr_dynamic_multi" имеет такие элементы:
         [,0]     [,1]
[0,]  0.00000  0.00000
[1,]  1.00000 10.00000
[2,]  2.00000 20.00000
[3,]  3.00000 30.00000
[4,]  4.00000 40.00000
После ArrayResize (увеличения размера) массив "arr_dynamic" имеет такие элементы:
  0.00000   1.00000   2.00000   3.00000   4.00000  -0.00000  +0.00000
После ArrayResize (увеличения размера) массив "arr_dynamic_multi" имеет такие элементы:
         [,0]     [,1]
[0,]  0.00000  0.00000
[1,]  1.00000 10.00000
[2,]  2.00000 20.00000
[3,]  3.00000 30.00000
[4,]  4.00000 40.00000
[5,] +0.00000 +0.00000
[6,] +0.00000 +0.00000
После ArrayResize (уменьшение размера) массив "arr_dynamic" имеет такие элементы:
0.00000 1.00000 2.00000
После ArrayResize (уменьшение размера) массив "arr_dynamic_multi" имеет такие элементы:
         [,0]     [,1]
[0,]  0.00000  0.00000
[1,]  1.00000 10.00000
[2,]  2.00000 20.00000
Dossiers :
 
Vasiliy Sokolov:

Vous avez écrit des bêtises. Essentiellement une variante de l'accès à un tableau par son index. En réalité, les nombres de transactions sont aléatoires, et tout votre exemple s'effondrera lorsque vous devrez résoudre un problème réel.

Vous faites référence aux billets, je suppose. Je veux dire des numéros de transaction séquentiels.

Vous pouvez faire un tableau parallèle les uns à côté des autres pour enregistrer les billets.

Ou plusieurs tableaux parallèles pour enregistrer le reste des données de chaque commande.

 
Vladimir Karputov:

Voici une vérification pour les tableaux dynamiques :arr_dynamique unidimensionnel etarr_dynamique_multi bidimensionnel.


Comme vous pouvez le constater , lorsque la taille du tableau est augmentée, les valeurs précédentes sont conservées:


le cacher ici purement OOP et tout ce qui est utile

 
Vladimir Karputov:

Voici une vérification pour les tableaux dynamiques :arr_dynamique unidimensionnel etarr_dynamique_multi bidimensionnel.


Comme vous pouvez le voir , si vous augmentez la taille du tableau, les valeurs précédentes restent:

Merci. Ces informations sont très précieuses.
 

Je voudrais discuter de l'impression et du commentaire - pourquoi personne n'y prête attention.

 
Vasiliy Sokolov:

Il existe une propriété magique : la capacité, qui est d'ailleurs absente de CHashMap pour une raison quelconque (ce qui est un oubli flagrant des développeurs). En le spécifiant, nous contournons le re-partitionnement. Vous pouvez le spécifier dans cette tâche, donc je ne vois pas de problème.

Vous pouvez spécifier lacapacité dans CHashMap via le constructeur.

Vasiliy Sokolov:

D'ailleurs, la raison pour laquelle ils ont des facteurs d'échelle différents est également très étrange. Il est plus difficile de réorganiser CHashMap que CArrayList, plus simple.

Pour CHashMap la taille du dictionnaire doit être un nombre simple pour garder l'uniformité des hashs dans le dictionnaire.
CHashMap utilise CPrimeGenerator pour choisir les nombres premiers.
Mais malheureusement, l'implémentation de CPrimeGenerator ne répond pas aux attentes et ne contient que les valeurs ci-dessous :

const static int  CPrimeGenerator::s_primes[]=
  {
   3,7,11,17,23,29,37,47,59,71,89,107,131,163,197,239,293,353,431,521,631,761,919,
   1103,1327,1597,1931,2333,2801,3371,4049,4861,5839,7013,8419,10103,12143,14591,
   17519,21023,25229,30293,36353,43627,52361,62851,75431,90523,108631,130363,156437,
   187751,225307,270371,324449,389357,467237,560689,672827,807403,968897,1162687,1395263,
   1674319,2009191,2411033,2893249,3471899,4166287,4999559,5999471,7199369
  };
Le facteur de croissance moyen est de l'ordre de 1,2 %.
 
Vasiliy Sokolov:

Quelle était votre tâche ? Rappelez-le pour vous-même ici publiquement s'il vous plaît.

Trouver la solution la plus rapide et la plus efficace pour ajouter des mégas à un tableau (liste, dictionnaire...), et récupérer des mégas d'un tableau par numéro d'ordre de transaction, lorsque le nombre de transactions futures est inconnu.

 
Реter Konow:

Trouvez la solution la plus rapide et la plus efficace pour ajouter des mégas à un tableau (liste, dictionnaire...), et récupérer des mégas du tableau, avec un nombre inconnu de transactions futures.


Il n'était donc pas question d'un billet.

Cependant, je vous conseille de commencer à compliquer votre code avec toutes sortes de choses comme des fonctions passe-partout.