Algoritmi, metodi di soluzione, confronto delle loro prestazioni - pagina 17

 

Nel compito specifico: indice => valore
CArrayList più veloce diCHashMap

CArrayList prende più del doppio dello spazio in meno, inoltre ha meno riordinamenti quando si aggiungono nuovi elementi(CArrayList ha un fattore di crescita 2, mentreCHashMap nell'implementazione attuale è circa 1,2).
E c'è meno confusione quando si legge il risultato diCArrayList.

 
Sergey Dzyublik:

In questo particolare compito: indice => valore
CArrayList è più veloce diCHashMap

CArrayList prende più del doppio dello spazio in meno, inoltre ha meno ricostruzioni quando si aggiungono nuovi elementi(CArrayList ha un fattore di crescita 2, mentreCHashMap nell'implementazione attuale è circa 1,2).
E c'è meno confusione quando si legge il risultato diCArrayList.

C'è una proprietà magica: Capacity, che tra l'altro è assente in CHashMap per qualche motivo (che è una grossolana svista degli sviluppatori). Specificandolo, bypassiamo il re-partitioning. Potete specificarlo in questo compito, quindi non vedo il problema.

 
Sergey Dzyublik:

Nel compito specifico: indice => valore
CArrayList più veloce diCHashMap

CArrayList prende più del doppio dello spazio in meno, inoltre ha meno riordinamenti quando si aggiungono nuovi elementi(CArrayList ha un fattore di crescita 2, mentreCHashMap nell'implementazione attuale è circa 1,2).
E c'è meno confusione durante la lettura del risultato diCArrayList.

Perché i coefficienti di scala sono diversi in loro è anche molto strano. Sarà più difficile riorganizzare CHashMap che una più semplice CArrayList.

 

Una versione ancora più condensata:

//+------------------------------------------------------------------+
//|                                                      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:

Una versione ancora più condensata:


Ora usiamo

template<typename T>

 
Alexandr Andreev:

Ora usiamo

template<typename T>

Perché?
 
Реter Konow:

Una versione ancora più condensata:

L'uomo continua a deridere...

 
Реter Konow:

Una versione ancora più condensata:

Hai scritto delle stronzate. Essenzialmente una variante dell'accesso a un array per il suo indice. In realtà i numeri delle transazioni sono casuali, e tutto il tuo esempio crollerà quando dovrai risolvere un problema reale.

 
Реter Konow:
Per quale motivo?

Beh, ci sono funzioni come riscrivere un array, aggiungere una nuova riga... Nella versione standard non sono universali, quindi bisogna riscriverli di continuo.

Così si ottiene un modello delle proprie piccole funzioni - una specie di comune

 
Yury Kulikov:

L'uomo continua a deridere...

Perché una soluzione perfetta a un particolare problema è percepita come un bullismo? Seriamente, non capisco...