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

 

특정 작업에서: 인덱스 => 값
CHashMap 보다 빠른 CArrayList

CArrayList 는 공간의 절반 이상을 차지하며 새 요소가 추가될 때 재작성 횟수도 적습니다( CArrayList 의 성장 계수는 2이고 CHashMap 의 성장 계수는 현재 구현에서 1.2임).
그리고 CArrayList의 결과를 읽을 때 제스처가 적습니다.

 
Sergey Dzyublik :

특정 작업에서: 인덱스 => 값
CHashMap 보다 빠른 CArrayList

CArrayList 는 공간의 절반 이상을 차지하며 새 요소가 추가될 때 재작성 횟수도 적습니다( CArrayList 의 성장 계수는 2이고 CHashMap 의 성장 계수는 현재 구현에서 1.2임).
그리고 CArrayList의 결과를 읽을 때 제스처가 적습니다.

그런 마법 같은 속성이 있습니다. 그런데 어떤 이유로 CHashMap에 없는 Capacity 입니다(개발자의 큰 실수입니다). 그것을 지정함으로써 우리는 재매핑을 우회합니다. 이 작업에서 지정할 수 있으므로 문제가 없습니다.

 
Sergey Dzyublik :

특정 작업에서: 인덱스 => 값
CHashMap 보다 CArrayList 가 빠릅니다.

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 :

더 간결한 버전:


이제 사용해보자

템플릿 < typename T>

 
Alexandr Andreev :

이제 사용해보자

템플릿 < typename T>

무엇 때문에?
 
Реter Konow :

더 간결한 버전:

계속 괴롭히는 남자...

 
Реter Konow :

더 간결한 버전:

헛소리를 쓰셨네요. 본질적으로 인덱스 로 배열에 액세스하는 변형입니다 . 실제로 거래 번호는 무작위이며 실제 문제를 해결해야 할 때 전체 예제가 무너집니다.

 
Реter Konow :
무엇 때문에?

글쎄요, 말하자면 배열을 다시 작성 하고 새 줄을 추가하는 것과 같은 기능이 있습니다 ... 표준 릴리스에서는 말 그대로 보편적이지 않으므로 지속적으로 다시 작성해야합니다

우리는 우리의 작은 기능의 템플릿을 얻습니다 - 특정 공통

 
Yury Kulikov :

계속 괴롭히는 남자...

특정 문제에 대한 이상적인 솔루션이 조롱으로 인식되는 이유는 무엇입니까? 진심 이해불가...