알고리즘, 결정 방법, 성능 비교 - 페이지 16

 
Реter Konow :

흥미롭고 합리적인 제안입니다. 병렬 기록을 유지합니다. 다른 솔루션에서 이 작업을 수행했습니다.

유일한 것은 처음에는 고문이 주문할 주문 수를 알지 못한다는 것입니다. int 배열의 크기는 얼마입니까?

그래서 라인을 잡기로 했습니다.


100개 요소의 여백을 넣고 각각 100개를 추가합니다. 행에는 동일한 구현이 있습니다.

 
Alexandr Andreev :

Generic 파일을 찾지 못했는데도 예전 빌드 때문인 것 같습니다. 글쎄, 오리,하지만 탐색 원리는 어떻게 제공됩니까? 소스 코드는 무엇입니까?

https://www.mql5.com/ru/forum/221917

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2017.12.07
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 
Vasiliy Sokolov :

Peter, ArrayResize()라는 훌륭한 함수가 있습니다. 프로그램 실행 시 배열의 크기를 늘릴 수 있습니다.

또는 그것에 대해 생각했습니다.

1. 속도의 관점에서 - 의심스럽다.

2. 코드의 관점에서 - 더 많은 라인과 더 혼란스러운 것으로 판명되었습니다.

배열의 크기가 조정 되면 배열에서 데이터가 사라집니다(내가 실수하지 않은 경우).

이것은 그것들이 다른 어레이에 저장되어야 하고 또한 증가되어야 함을 의미합니다.

그것은 내가 앞에서 이야기한 앞뒤로 다시 쓰는 것으로 밝혀졌습니다.

 
Реter Konow :

또는 그것에 대해 생각했습니다.

1. 속도의 관점에서 - 의심스럽다.

2. 코드의 관점에서 - 더 많은 라인과 더 혼란스러운 것으로 판명되었습니다.

배열의 크기를 변경하면 배열의 데이터가 사라집니다(내가 실수하지 않은 경우).

이것은 그것들이 다른 어레이에 예약되어야 하고 또한 증가되어야 함을 의미합니다.

그것은 내가 앞에서 이야기한 앞뒤로 다시 쓰는 것으로 밝혀졌습니다.


아니 그들은 사라지지 않는다

 
Alexandr Andreev :

아니 그들은 사라지지 않는다

확실합니까?
 
Реter Konow :
확실합니까?

네. 데이터는 사라지지 않습니다.

 
Реter Konow :
확실합니까?


 template < typename T> 
   void ArrayAdd(T &m[], T& a)    {m[ ArrayResize (m, ArraySize (m)+ 1 , 100 )- 1 )]=a;}

사실, 모든 치즈는 이 라인 때문입니다 .... 배열의 끝에 요소를 추가합니다. 다른 모든 것은 덤이다

시트에서 추가의 원리는 클래스에 포장된 것과 동일합니다.
 
Реter Konow :

2. 코드의 관점에서 - 더 많은 라인과 더 혼란스러운 것으로 판명되었습니다.

   #include <Generic\ArrayList.mqh>

   CArrayList< int > collection;
   
   int value_set = 1 ;
   collection.Add(value_set);
 
   int index = 0 ;
   int value_get = - 1 ; 
   collection.TryGetValue(index,value_get); 


얼마나 혼란스럽고 읽기 위해 얼마나 많은 힘을 죽여야하는지 ......
귀하의 솔루션은 100% 더 아름답고 우아하며 빠릅니다.

 

CHashMap의 샘플 솔루션:

 //+------------------------------------------------------------------+
//|                                                RandomTickets.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
#include <Generic\HashMap.mqh>
input int RandomDeals = 24000 ;
CHashMap< int , int > MagicsByDeals;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   for ( int i = 0 ; i < RandomDeals; i++)
      MagicsByDeals.Add( MathRand (), MathRand ());
   MagicsByDeals.Add( 1337 , MathRand ());
   ulong msec = GetMicrosecondCount ();
   bool res = MagicsByDeals.ContainsKey( 1337 );
   string t = ( string )( GetMicrosecondCount ()-msec);
   printf ( "Время выполнения запроса: " + t + " микросекунд" );
   if (res)
       printf ( "Сдлека с номером 1337 была удачно найдена" );
   else
       printf ( "Сдлека с номером 1337 не найдено" );
}
//+------------------------------------------------------------------+
 
Alexandr Andreev :

사실, 모든 치즈는 이 라인 때문입니다 .... 배열의 끝에 요소를 추가합니다. 다른 모든 것은 덤이다

시트에서 추가의 원리는 클래스에 포장된 것과 동일합니다.


완벽한 핏인 것 같습니다. 모두 확인해주세요.

크기를 조정할 때 데이터가 배열에서 사라지지 않는다고 확신하는 경우 솔루션은 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                                      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 Save_magic( int magic)
{
 order_number++;
 //---------------------------------
 //Записываем каждый магик вместе с порядковым номером ордера.
 //---------------------------------
 ArrayResize (All_magics,order_number);
 All_magics[order_number - 1 ] = magic;
 //---------------------------------
}
//+------------------------------------------------------------------+
void Trading()
{
 Random_orders_of_strategy = MathRand ();
 //----------------------------------------
 //Имитируем открытие неопределенного количества ордеров стратегии.
 //----------------------------------------
 for ( int a1 =   0 ; a1 < Random_orders_of_strategy; a1++)
   {
     int this_magic = MathRand ();
     //----------------------------
    Save_magic(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 ));
   
  }
//+------------------------------------------------------------------+