算法、解决方法、其性能的比较 - 页 15

 
fxsaber:

有一个明显的反复不尊重社区的模式和一个明显的挑衅模式。

不读它(一个人在各种建设性主题中的帖子)并不总是可能的,之后要发展和忘记它--更不可能。

曳步舞和吐痰在帮助的手中,其数量大大区别于这种资源的正面。


可能是错的。

请控制你的情绪。如果你不接受别人的观点,你可以选择不参与讨论。没有人强迫你这样做。

 
Vladimir Karputov:

纠正我,但字符串的长度 不是有限的吗?

https://msdn.microsoft.com/ru-ru/library/sx08afx2.aspx

我找不到MQL5的这种限制...

字符串基本上是一个Uchar数组,它有自己的特殊功能,如自动重新分区。这就是为什么字符串的长度至少没有明确的限制,数组的大小也是如此。但是非常长的字符串有可能会耗尽内存,具体的错误代码如ERR_STRING_RESIZE_ERROR(没有足够的内存来重新分配字符串)就是证明。


 
Vasiliy Sokolov:

字符串本质上是一个Uchar数组,有它自己的好处,比如自动重新分区。因此字符串的长度至少没有明确的限制,数组的大小也没有限制。但是非常长的字符串有可能会耗尽内存,具体的错误代码如ERR_STRING_RESIZE_ERROR(没有足够的内存来重新分配字符串)就是证明。


对我来说也是很有价值的信息。谢谢你。
 
fxsaber:

仅限内存限制

显然是一个长度类型的限制,即在INT_MAX 旁边。
 
Реter Konow:

1.也就是说,算法的速度并不重要。该解决方案是 "概念上的强大",这就足够了。好的。

2.那么,你只是通过插件插入,就可以了?好的。

//--------------------------------------------------------------------

如果评价算法的主要标准是"概念上的强大",那么我就输了。

如果判断算法的主要标准--简单、快速和方便--我赢了。

在这一点上,我们可以结束这个话题。


你仍然可以加快和简化 "你的算法"(你不断地被告知),如果你用两个相同大小的int[]代替字符串,并在一个中存储交易数量,在另一个中存储魔术师,在交易数组的相应搜索中寻找需要的魔术师索引。它将会更快。当然,这是从你的例子中得出的一个特殊情况。

彼得学习了数组,了解到它们是通用的强大工具,然后他开始学习字符串......你能想象当他学习结构时会发生什么吗?)

Piotr在他的例子中替代了这些功能。

struct SDealMagic {int deal,magic;} array[];
//
void Trading()
{
   Random_orders_of_strategy=MathRand();
   ArrayResize(array,Random_orders_of_strategy);
   for(int i=0; i<Random_orders_of_strategy; i++)
   {
      array[i].deal=i;
      array[i].magic=MathRand()
   }
}
//
int Get_magic(int deal_number)
{
   for(int i=0; i<Random_orders_of_strategy; i++)
      if(array[i].deal==deal_number) return(array[i].magic);
   return(-1);
}

和速度将采取的模式:)

 
Реter Konow:

1.也就是说,算法的速度并不重要。该解决方案是 "概念上的强大",这就足够了。好的。

2.那么,你只是通过插件插入,就可以了?好的。

//--------------------------------------------------------------------

如果评价算法的主要标准是"概念上的强大",那么我就输了。

如果评价算法的主要标准是--"简单、快速和方便",那么我就赢了。

在这一点上,我们可以结束这个话题。


只是一个例子显示了最常见的--那就是很多额外的信息,至少调试程序和定义上的打印是没有的--否则就会再增加300行。

至少整个代码是完全....

你需要通过库添加和调用的那部分代码将更方便,更少的代码和更多的可读性。

 
Alexandr Andreev:

有马吉克的滴答 - 它应该被保存,然后它可以在一个方便的形式发送到滴答或马吉克。

事实上,最快的解决方案是将所有信息存储在结构中。但访问将通过有序的参考索引Sammiva 进行。

这是一个正面的解决方案,因此不是最快的。最好是通过HashMap来实现。然而,在目前的实现中,我们不会需要一个结构,而是需要一个继承自某个接口的类来描述其订单的字段。

 
Yury Kulikov:

你可以加快和简化 "你的算法"(他们一直在告诉你),如果你用两个相同大小的int[]代替字符串,并在一个中存储交易号,在另一个中存储魔术师,通过交易数组的相应枚举来搜索魔术师的必要索引。它将会更快。当然,这是从你的例子中得出的一个特殊情况。


这是一个有趣和有用的建议。保持平行记录。我在我的其他解决方案中做到了这一点。

唯一的问题是我们不知道EA最初会下多少订单。我们应该为int数组设置什么大小?

这就是为什么我决定使用一个字符串。

 
fxsaber:

这是一个正面的解决方案,因此不是最快的。最好是通过HashMap来实现。但目前的实现不需要一个结构,而是需要一个继承自某个接口的类来描述其订单的字段。


我没有找到通用 文件,看来这是个旧版本那么,将如何提供导航原则 - 源代码是什么?

 
Реter Konow:

这是一个有趣而聪明的建议。保持平行记录。我已经在我的其他解决方案中做到了。

我们唯一不知道的是专家顾问将下的订单数量。我们应该为int数组设置什么大小?

所以我决定拿一根绳子。

彼得,有一个很好的函数叫ArrayResize()。它允许你在程序执行的时候增加一个数组的大小。