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

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

당신의 임무는 무엇이었습니까? 공개적으로 여기에서 그녀를 자신에게 상기시켜 주십시오.

 
Vasiliy Sokolov :

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


예, 잠깐, 그는 모든 것을 올바르게 쓸 것입니다. 내일은

 
Реter Konow :

***

크기를 조정할 때 배열에서 데이터가 사라지지 않는 것이 확실했다면 ***

다음은 동적 배열에 대한 검사입니다: 1차원 arr_dynamic 및 2차원 arr_dynamic_multi.

 //+------------------------------------------------------------------+
//|                                                  ArrayResize.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link        "http://wmua.ru/slesar/"
#property version    "1.001"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//--- объявим динамические массивы
   double arr_dynamic[];
   double arr_dynamic_multi[][ 2 ];
//--- новый размер в первом измерении массива
   if ( ArrayResize (arr_dynamic, 5 )==- 1 )
     {
       Print ( "Ошибка ArrayResize for \"arr_dynamic\"" );
       return ;
     }
   if ( ArrayResize (arr_dynamic_multi, 5 )==- 1 )
     {
       Print ( "Ошибка ArrayResize for \"arr_dynamic_multi\"" );
       return ;
     }

   for ( int i= 0 ;i< ArraySize (arr_dynamic);i++)
      arr_dynamic[i]=i;
   for ( int i= 0 ;i< ArrayRange (arr_dynamic_multi, 0 );i++)
     {
      arr_dynamic_multi[i][ 0 ]=i;
      arr_dynamic_multi[i][ 1 ]=i* 10 ;
     }

//--- распечатка значений до увеличения размера
   Print ( "Перед ArrayResize массив \"arr_dynamic\" имеет такие элементы:" );
   ArrayPrint (arr_dynamic);
   Print ( "Перед ArrayResize массив \"arr_dynamic_multi\" имеет такие элементы:" );
   ArrayPrint (arr_dynamic_multi);

//--- увеличим размер на два элемента
   if ( ArrayResize (arr_dynamic, ArraySize (arr_dynamic)+ 2 )==- 1 )
     {
       Print ( "Ошибка ArrayResize for \"arr_dynamic\"" );
       return ;
     }
   if ( ArrayResize (arr_dynamic_multi, ArrayRange (arr_dynamic_multi, 0 )+ 2 )==- 1 )
     {
       Print ( "Ошибка ArrayResize for \"arr_dynamic_multi\"" );
       return ;
     }
//--- распечатка значений после увеличения размера
   Print ( "После ArrayResize (увеличения размера) массив \"arr_dynamic\" имеет такие элементы:" );
   ArrayPrint (arr_dynamic);
   Print ( "После ArrayResize (увеличения размера) массив \"arr_dynamic_multi\" имеет такие элементы:" );
   ArrayPrint (arr_dynamic_multi);

//--- новый размер в первом измерении массива установим равным 3 (то есть уменьшим размер массива)
   if ( ArrayResize (arr_dynamic, 3 )==- 1 )
     {
       Print ( "Ошибка ArrayResize for \"arr_dynamic\"" );
       return ;
     }
   if ( ArrayResize (arr_dynamic_multi, 3 )==- 1 )
     {
       Print ( "Ошибка ArrayResize for \"arr_dynamic_multi\"" );
       return ;
     }
//--- распечатка значений после уменьшение размера
   Print ( "После ArrayResize (уменьшение размера) массив \"arr_dynamic\" имеет такие элементы:" );
   ArrayPrint (arr_dynamic);
   Print ( "После ArrayResize (уменьшение размера) массив \"arr_dynamic_multi\" имеет такие элементы:" );
   ArrayPrint (arr_dynamic_multi);
  }
//+------------------------------------------------------------------+


보시다시피 배열 의 크기를 늘릴 때 이전 값 은 그대로 유지 됩니다.

Перед ArrayResize массив "arr_dynamic" имеет такие элементы:
0.00000 1.00000 2.00000 3.00000 4.00000
Перед ArrayResize массив "arr_dynamic_multi" имеет такие элементы:
         [, 0 ]     [, 1 ]
[ 0 ,]   0.00000    0.00000
[ 1 ,]   1.00000 10.00000
[ 2 ,]   2.00000 20.00000
[ 3 ,]   3.00000 30.00000
[ 4 ,]   4.00000 40.00000
После ArrayResize (увеличения размера) массив "arr_dynamic" имеет такие элементы:
   0.00000    1.00000    2.00000    3.00000    4.00000   - 0.00000   + 0.00000
После ArrayResize (увеличения размера) массив "arr_dynamic_multi" имеет такие элементы:
         [, 0 ]     [, 1 ]
[ 0 ,]   0.00000    0.00000
[ 1 ,]   1.00000 10.00000
[ 2 ,]   2.00000 20.00000
[ 3 ,]   3.00000 30.00000
[ 4 ,]   4.00000 40.00000
[ 5 ,] + 0.00000 + 0.00000
[ 6 ,] + 0.00000 + 0.00000
После ArrayResize (уменьшение размера) массив "arr_dynamic" имеет такие элементы:
0.00000 1.00000 2.00000
После ArrayResize (уменьшение размера) массив "arr_dynamic_multi" имеет такие элементы:
         [, 0 ]     [, 1 ]
[ 0 ,]   0.00000    0.00000
[ 1 ,]   1.00000 10.00000
[ 2 ,]   2.00000 20.00000
파일:
 
Vasiliy Sokolov :

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

티켓을 말씀하시는 것 같은데요. 거래의 일련 번호를 의미합니다.

티켓을 기록하기 위해 병렬 배열을 나란히 만들 수 있습니다.

또는 각 주문의 나머지 데이터를 기록하기 위한 여러 병렬 어레이.

 
Vladimir Karputov :

다음은 동적 배열에 대한 검사입니다: 1차원 arr_dynamic 및 2차원 arr_dynamic_multi.


보시다시피 배열 의 크기를 늘릴 때 이전 값 은 그대로 유지 됩니다.


여기에 순전히 OOP와 유용한 모든 것을 숨기십시오.

 
Vladimir Karputov :

다음은 동적 배열에 대한 검사입니다: 1차원 arr_dynamic 및 2차원 arr_dynamic_multi.


보시다시피 배열 의 크기를 늘릴 때 이전 값 은 그대로 유지 됩니다.

고맙습니다. 이것은 매우 귀중한 정보입니다.
 

인쇄 및 댓글 주제에 대해 논의하고 싶습니다 - 왜 아무도 관심을 기울이지 않는지

 
Vasiliy Sokolov :

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

CHashMap은 생성자를 통해 Capacity 로 설정할 수 있습니다.

바실리 소콜로프 :

그런데 스케일 계수가 다른 이유도 매우 이상합니다. CHashMap을 다시 매핑하는 것은 단순한 CArrayList보다 더 어려울 것입니다.

CHashMap 의 경우 사전 크기는 사전 전체에 균일하게 분산된 해시를 유지하기 위해 소수여야 합니다.
CHashMap은 CPrimeGenerator를 사용하여 소수를 선택합니다.
그러나 불행히도 CPrimeGenerator의 구현은 기대에 미치지 못하고 다음 값만 포함합니다.

 const static int   CPrimeGenerator::s_primes[]=
  {
   3 , 7 , 11 , 17 , 23 , 29 , 37 , 47 , 59 , 71 , 89 , 107 , 131 , 163 , 197 , 239 , 293 , 353 , 431 , 521 , 631 , 761 , 919 ,
   1103 , 1327 , 1597 , 1931 , 2333 , 2801 , 3371 , 4049 , 4861 , 5839 , 7013 , 8419 , 10103 , 12143 , 14591 ,
   17519 , 21023 , 25229 , 30293 , 36353 , 43627 , 52361 , 62851 , 75431 , 90523 , 108631 , 130363 , 156437 ,
   187751 , 225307 , 270371 , 324449 , 389357 , 467237 , 560689 , 672827 , 807403 , 968897 , 1162687 , 1395263 ,
   1674319 , 2009191 , 2411033 , 2893249 , 3471899 , 4166287 , 4999559 , 5999471 , 7199369
  };
약 1.2의 평균 성장 인자
 
Vasiliy Sokolov :

당신의 임무는 무엇이었습니까? 공개적으로 여기에서 그녀를 자신에게 상기시켜 주십시오.

배열(목록, 사전...)에 메가를 추가하고 향후 거래의 수를 알 수 없는 거래의 주문 번호로 배열에서 메가를 가져오는 가장 빠르고 효율적인 솔루션을 찾으십시오 .

 
Реter Konow :

미래의 트랜잭션 수를 알 수 없는 배열(목록, 사전...)에 메가를 추가하고 배열에서 메가를 가져오는 가장 빠르고 효율적인 솔루션을 찾으십시오 .


티켓에 대한 이야기가 없다는 것이 분명했습니다.

그럼에도 불구하고 템플릿 기능과 같은 모든 종류의 가젯으로 코드를 복잡하게 만들기 시작하는 것이 좋습니다.