Algoritmos, métodos de solução, comparação de seu desempenho - página 17

 

Na tarefa específica: índice => valor
Lista CArrayList mais rápida queCHashMap

A CArrayList ocupa mais de duas vezes menos espaço, também tem menos rearranjos ao adicionar novos elementos(a CArrayList tem fator de crescimento 2, enquanto oCHashMap na implementação atual é cerca de 1,2).
E há menos confusão ao ler o resultado daCArrayList.

 
Sergey Dzyublik:

Nesta tarefa em particular: índice => valor
A CArrayList é mais rápida que oCHashMap

CArrayList ocupa mais de duas vezes menos espaço, também tem menos reconstruções ao adicionar novos elementos(CArrayList tem fator de crescimento 2, enquantoCHashMap na implementação atual é cerca de 1,2).
E há menos confusão ao ler o resultado daCArrayList.

Existe uma propriedade mágica: a capacidade, que por sinal está ausente no CHashMap por alguma razão (que é uma supervisão grosseira dos desenvolvedores). Ao especificá-lo, contornamos o re-particionamento. Você pode especificá-lo nesta tarefa, portanto não vejo nenhum problema.

 
Sergey Dzyublik:

Na tarefa específica: índice => valor
Lista CArrayList mais rápida queCHashMap

A CArrayList ocupa mais de duas vezes menos espaço, também tem menos rearranjos ao adicionar novos elementos(a CArrayList tem fator de crescimento 2, enquanto oCHashMap na implementação atual é cerca de 1,2).
E há menos confusão ao ler o resultado daCArrayList.

Por que os coeficientes de escala são diferentes também é muito estranho. Será mais difícil rearranjar o CHashMap do que a simples CArrayList.

 

Uma versão ainda mais condensada:

//+------------------------------------------------------------------+
//|                                                      Magic 2.mq5 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
int    All_magics[];
int    order_number;
int    Random_orders_of_strategy;
//+------------------------------------------------------------------+
void Trading()
{
 Random_orders_of_strategy = MathRand();
 //----------------------------------------
 //Имитируем открытие неопределенного количества ордеров стратегии.
 //----------------------------------------
 for(int a1 =  0; a1 < Random_orders_of_strategy; a1++)
   {
    int this_magic = MathRand();
    //----------------------------
    order_number++;
    //---------------------------------
    //Меняем размрер массива на каждой итерации.
    //---------------------------------
    ArrayResize(All_magics,order_number);
    All_magics[order_number - 1] = this_magic;
    //---------------------------------
   }
 //----------------------------------------
}
//+------------------------------------------------------------------+
int Get_magic(int deal_number)
{
 return(All_magics[deal_number - 1]);
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Trading();
   //--------------------------
   ulong t1 = GetMicrosecondCount();
   Get_magic(1000);
   ulong t2 = GetMicrosecondCount();
   //--------------------------
   Print("Время исполнения функции Get_magic() при количестве ордеров ",Random_orders_of_strategy," равно ",t2 - t1);
   //--------------------------
   Print("Random_orders_of_strategy  ",Random_orders_of_strategy);
   Print("magic 1:  ",Get_magic(1),"  magic 2: ",Get_magic(2),"  magic 3: ",Get_magic(3));
   
  }
//+------------------------------------------------------------------+
 
Реter Konow:

Uma versão ainda mais condensada:


Agora vamos usar

modelo<nome datilografado T>

 
Alexandr Andreev:

Agora vamos usar

modelo<nome datilografado T>

Por quê?
 
Реter Konow:

Uma versão ainda mais condensada:

O homem continua a zombar...

 
Реter Konow:

Uma versão ainda mais condensada:

Você escreveu algumas besteiras. Essencialmente uma variante de acesso a uma matriz por seu índice. Na realidade, os números das transações são aleatórios, e todo o seu exemplo entrará em colapso quando você precisar resolver um problema real.

 
Реter Konow:
Para quê?

Bem, há funções como reescrever uma matriz, adicionar uma nova linha... No lançamento padrão, eles não são universais, portanto, é preciso reescrevê-los o tempo todo.

Assim, você obtém um modelo de suas próprias pequenas funções - algum tipo de

 
Yury Kulikov:

O homem continua a zombar...

Por que uma solução perfeita para um problema específico é percebido como bullying? Sério, eu não entendo...