Алгоритмы, методы решений, сравнение их производительности - страница 17

 

В конкретной задаче: index => value
Быстрее будет CArrayList чем CHashMap

CArrayList занимает более чем в два раза меньше места, также у него меньше перестроений при добавлении новых элементов (у CArrayList коэффициент роста 2, а у CHashMap при текущей реализации порядка 1.2).
И меньше телодвижений при чтении результата у CArrayList.

 
Sergey Dzyublik:

В конкретной задаче: index => value
Быстрее будет CArrayList чем CHashMap

CArrayList занимает более чем в два раза меньше места, также у него меньше перестроений при добавлении новых элементов (у CArrayList коэффициент роста 2, а у CHashMap при текущей реализации порядка 1.2).
И меньше телодвижений при чтении результата у CArrayList.

Есть такое волшебное свойство: Capacity, которое кстати почему-то отсутствует у CHashMap (что является грубейши промахом разработчиков). Указав его, мы обходим перераземетку. В данной задаче его указать можно, поэтому не вижу проблем.

 
Sergey Dzyublik:

В конкретной задаче: index => value
Быстрее будет CArrayList чем CHashMap

CArrayList занимает более чем в два раза меньше места, также у него меньше перестроений при добавлении новых элементов (у CArrayList коэффициент роста 2, а у CHashMap при текущей реализации порядка 1.2).
И меньше телодвижений при чтении результата у CArrayList.

Почему кстати коэффициенты мастштаба у них разные - тоже очень странно. Переразмечать CHashMap посложней будет, чем более простой CArrayList.

 

Еще более сжатый вариант:

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

Еще более сжатый вариант:


Теперь давайте с использованием 

template<typename T>

 
Alexandr Andreev:

Теперь давайте с использованием 

template<typename T>

А зачем?
 
Реter Konow:

Еще более сжатый вариант:

Человек продолжает издеваться...

 
Реter Konow:

Еще более сжатый вариант:

Вы фигню какую-то написали. По сути вариант доступа к массиву по его индексу. В реальности номера сделок случайны, и весь Ваш пример обрушиться, когда потребуется решить реальную задачу.

 
Реter Konow:
А зачем?

ну как бы есть такие функции как переписать массив, добавить новую строку... В стандартном релизе они как бы сказать не универсальные и поэтому их приходиться переписывать постоянно

Получаем наберется шаблон своих мелких функций - некий common

 
Yury Kulikov:

Человек продолжает издеваться...

Почему идеальное решение конкретной задачи воспринимается как издевательство? Серьезно, не понимаю...