清除一个定义元素的数组 - 页 21 1...141516171819202122232425262728...30 新评论 Konstantin Nikitin 2018.11.16 14:19 #201 不知道它的表现如何? ArraySetAsSeries(array,true); 在最后一个变体中,我也为它做了一个检查。谁需要它,谁就可以使用它。 附加的文件: ArrayDeleteValue.mq5 25 kb Konstantin Nikitin 2018.11.16 14:42 #202 Реter Konow:对。但我们怎么知道所提供的算法没有留下任何空白?校验和并不能证明这一点。元素的数量也是如此。毕竟,这个函数计算的是在数组被调整大小之前的元素。在几乎所有的情况下,通过发送一个带有NULL的查询,可以顺利实现。标签科诺。对该算法还有一个要求--在去除不必要的项目后,在数组内正确放置项目。必须先进行这项检查。然后是对速度的检查。代码中解释了哪些返回什么。有洗牌的数组。有在另一个阵列中。 P.S. 而且只是为了记录。我的函数有一些检查,但没有使用。但它已经拥有这一切,甚至更多。 Реter Konow 2018.11.16 14:56 #203 我不是在质疑参与者的专业性和他们的位置。我只是指出了校验和检查中的一个缺陷,还有,需要对新数组中元素排列的正确性进行额外的验证。 如果这些都是正确的,我当之无愧地得到了倒数第二名。在我的实践中,我很少考虑具体操作的速度问题。我更关心的是解决方案的简洁性和清晰度。让我感到惊讶的是,这个条目 if(Arr[q]==val){deleted++; q--;} 可能会很慢。 但如果你再加上一个算法评估的标准--解决方案的紧凑性--我可能就会排在第一位了。 如果你把两个标准--速度和压缩结合起来,并计算平均算法得分,那么我在表中占据了更高的位置。 不过,费多谢耶夫的版本比我的更加凝练。 Nikolai Semko 2018.11.16 15:14 #204 Реter Konow:然而,如果你加上另一个评估算法的标准,即解决方案压缩,我可能会排在第一位。你的主循环的版本。 for(int a1=0; a1<ArraySize(Arr); a1++) { if(deleted)Arr[q]=Arr[q+deleted]; if(Arr[q]==val) { deleted++; q--; } q++; }而这是费多谢耶夫的。 for(;i<sz;i++) { if(a[i]!=v) { a[j]=a[i]; j++; } }两种变体都做同样的事情。谁最简明扼要? Реter Konow 2018.11.16 15:20 #205 Nikolai Semko:你的主循环的版本。 而这是费多谢耶夫的。 两者都做同样的事情。谁最简明?他。他得到了它,而不是... for(int a1=0; a1<ArraySize(Arr); a1++) for(;i<sz;i++)它更简洁)。 Nikolai Semko 2018.11.16 15:27 #206 Реter Konow:他有。他得到了它,而不是... 这样更简洁。))这对编译器来说也是一样的。 你只是有很多不必要的东西,所以它的工作速度比其他人慢(我甚至没有考虑题目中的第一个选项)。 Fedoseyev的代码在一个循环通道中有一个 检查、一个 赋值和一个 增量(我没有计算循环组织的检查和增量)。 相比之下,你有两个 检查,一个两个变量之和,三个 增量和一个 赋值。 Aleksey Lebedev 2018.11.16 16:07 #207 for(int a1=0; a1<ArraySize(Arr); a1++) 所有的希望都寄托在编译器的优化上,否则ArraySize 会在每次迭代中被执行。 Nikolai Semko 2018.11.16 16:13 #208 Aleksey Lebedev: 所有的希望都寄托在编译器的优化上,否则ArraySize会在每次迭代时被执行。是的,编译器似乎在检查,如果数组的大小 在循环中没有变化,它就会独立地用一个值替换这个函数,并且只计算这个函数一次。 无论如何,如果你这样做。 const int size=ArraySize(Arr); for(int a1=0; a1<size; a1++) 函数的执行时间将不会改变。 因此,为了更加紧凑,完全按照彼得的方式来写是有意义的 :) 但我同意,就我个人而言,它也刺痛了我的眼睛。感觉每次都会调用这个函数。 Aleksey Lebedev 2018.11.16 16:57 #209 Nikolai Semko:但我同意,就我个人而言,它也切断了我。感觉每次都会调用这个函数。我认为最好不要让编译器做出选择)让我问你一个问题。如果(count>6) {ArrayCopy Nikolai Semko 2018.11.16 16:59 #210 Aleksey Lebedev:我认为最好不要让编译器有选择权)让我问你一个问题。如果(count>6) { ArrayCopy 超过6个--这个数值是通过科学的直觉获得的,或者说背后的理由是什么?)是的,这正是它。科学直觉的方法。根据我的观察,实际上是从5到8。你可以通过每次自动调整这个数字来实现这个过程的自动化。毕竟,这个数字对于不同的处理器和系统可能是不同的。 例如,如果你按照这个原则改变CCanvas类中 的所有ArrayCopy和ArrayFill,你可以在canvas的速度上得到很好的提升。 1...141516171819202122232425262728...30 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在最后一个变体中,我也为它做了一个检查。谁需要它,谁就可以使用它。
对。但我们怎么知道所提供的算法没有留下任何空白?校验和并不能证明这一点。元素的数量也是如此。毕竟,这个函数计算的是在数组被调整大小之前的元素。
在几乎所有的情况下,通过发送一个带有NULL的查询,可以顺利实现。
对该算法还有一个要求--在去除不必要的项目后,在数组内正确放置项目。必须先进行这项检查。然后是对速度的检查。
代码中解释了哪些返回什么。有洗牌的数组。有在另一个阵列中。
P.S. 而且只是为了记录。我的函数有一些检查,但没有使用。但它已经拥有这一切,甚至更多。
我不是在质疑参与者的专业性和他们的位置。我只是指出了校验和检查中的一个缺陷,还有,需要对新数组中元素排列的正确性进行额外的验证。
如果这些都是正确的,我当之无愧地得到了倒数第二名。
在我的实践中,我很少考虑具体操作的速度问题。我更关心的是解决方案的简洁性和清晰度。让我感到惊讶的是,这个条目
if(Arr[q]==val){deleted++; q--;}
可能会很慢。
但如果你再加上一个算法评估的标准--解决方案的紧凑性--我可能就会排在第一位了。
如果你把两个标准--速度和压缩结合起来,并计算平均算法得分,那么我在表中占据了更高的位置。
不过,费多谢耶夫的版本比我的更加凝练。然而,如果你加上另一个评估算法的标准,即解决方案压缩,我可能会排在第一位。
你的主循环的版本。
而这是费多谢耶夫的。
两种变体都做同样的事情。谁最简明扼要?
你的主循环的版本。
而这是费多谢耶夫的。
两者都做同样的事情。谁最简明?
他。他得到了它,而不是...
for(;i<sz;i++)
它更简洁)。
他有。他得到了它,而不是...
这样更简洁。))
这对编译器来说也是一样的。
你只是有很多不必要的东西,所以它的工作速度比其他人慢(我甚至没有考虑题目中的第一个选项)。
Fedoseyev的代码在一个循环通道中有一个 检查、一个 赋值和一个 增量(我没有计算循环组织的检查和增量)。
相比之下,你有两个 检查,一个两个变量之和,三个 增量和一个 赋值。
所有的希望都寄托在编译器的优化上,否则ArraySize 会在每次迭代中被执行。
所有的希望都寄托在编译器的优化上,否则ArraySize会在每次迭代时被执行。
是的,编译器似乎在检查,如果数组的大小 在循环中没有变化,它就会独立地用一个值替换这个函数,并且只计算这个函数一次。
无论如何,如果你这样做。
函数的执行时间将不会改变。
因此,为了更加紧凑,完全按照彼得的方式来写是有意义的 :)
但我同意,就我个人而言,它也刺痛了我的眼睛。感觉每次都会调用这个函数。
但我同意,就我个人而言,它也切断了我。感觉每次都会调用这个函数。
我认为最好不要让编译器做出选择)
让我问你一个问题。
如果(count>6) {ArrayCopy
我认为最好不要让编译器有选择权)
让我问你一个问题。
如果(count>6) { ArrayCopy
超过6个--这个数值是通过科学的直觉获得的,或者说背后的理由是什么?)是的,这正是它。科学直觉的方法。根据我的观察,实际上是从5到8。你可以通过每次自动调整这个数字来实现这个过程的自动化。毕竟,这个数字对于不同的处理器和系统可能是不同的。
例如,如果你按照这个原则改变CCanvas类中 的所有ArrayCopy和ArrayFill,你可以在canvas的速度上得到很好的提升。