アルゴリズム、解法、性能比較 - ページ 17

 

In specific task: index => value
CHashMapよりCArrayListの 方が速い。

CArrayListは 2倍以上の容量を必要とし、新しい要素を追加する際の再配置も少なくなります(CArrayListは 成長係数2、現在の実装ではCHashMapは 約1.2)。
また,CArrayListの 結果を読み込む際の手間が省けます。

 
Sergey Dzyublik:

このタスクの場合:インデックス => 値
CArrayListCHashMap よりも高速です。

CArrayListは 2倍以上の容量を必要とし、新しい要素を追加する際の再構築も少なくなります(CArrayListは 成長係数2、現在の実装ではCHashMapは 約1.2)。
また,CArrayListの 結果を読み込む際の手間が省けます。

ところで、CHashMapにはなぜかCapacityという 魔法のプロパティがありません(これは開発者の重大な過失です)。それを指定することで、再パーティションを回避している。このタスクで指定できるので、問題ないでしょう。

 
Sergey Dzyublik:

In specific task: index => value
CHashMapよりCArrayListの 方が速い。

CArrayListは 2倍以上の容量を必要とし、新しい要素を追加する際の再配置も少なくなります(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:
何のために?

まあ、配列を書き換えたり、改行 したりといった機能はありますが...。標準リリースでは、それらは普遍的なものではないので、常に書き直さなければなりません。

つまり、自分自身の小さな機能のテンプレート、つまりある種の共通の

 
Yury Kulikov:

男は嘲笑を続ける...。

特定の問題に対する完璧な解決策が、なぜいじめと受け取られるのか?マジで理解できない...。