int SokolovDelRetry(int &array[], constint val)
{
int total = ArraySize(array);
intin = -1, count = 0, diff = 0;
for(int i = 0; i < total; i++)
{
diff++;
if(array[i] == val)
{
diff--;
if(in != -1)
{
if(diff>0)
{
ArrayCopy(array, array, in, i-diff, diff);
in = in + diff;
diff = 0;
}
count++;
}
else
{
in = i;
diff = 0;
count++;
}
}
}
if(diff > 0)
ArrayCopy(array, array, in, total - diff, diff);
ArrayResize(array, total - count);
return total - count;
}
结果。
2018.11.1416:20:15.293 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Pastushak: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 89383 микросекунд
2018.11.1416:20:15.313 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Korotky: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 18148 микросекунд
2018.11.1416:20:15.337 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Fedoseev: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 15637 микросекунд
2018.11.1416:20:15.347 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Semko: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 4626 микросекунд
2018.11.1416:20:15.367 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Pavlov: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 16976 микросекунд
2018.11.1416:20:15.407 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Nikitin: Контрольная сумма = 495345526; элементов - 997945; время выполнения = 27381 микросекунд
2018.11.1416:20:15.427 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Vladimir: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 16178 микросекунд
2018.11.1416:20:15.457 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Peter: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 19618 микросекунд
2018.11.1416:20:15.477 ArrayDeleteValue__6 (FORTS-USDRUB,H1) вариант Sokolov: Контрольная сумма = 495345526; элементов - 998956; время выполнения = 11058 микросекунд
好样的!在纠正了几个错误后,即使不使用ArrayCopy,你也把我打下了神坛。将军。:))
for(;;)
至
仍然通过休息时间 退出
P.S. 只是为了好玩,在整个阵列中进行了直接复制。这可能值得改变
至
仍然通过休息时间 退出
运行速度慢于。
如果你在没有任何规则的情况下参加这个比赛,你应该复制 "领导者"(目前是库兹涅佐夫)的代码,并按照上述的系统行为进行修改。
这导致了从最初的740毫秒的运行时间中获得了约20毫秒的稳定增益。
顺便说一下,我很好奇如果原始数组是一个系列,结果会有什么变化。ArraySetAsSeries(arr,true)。
如果我们把这个比赛当作没有规则的比赛,我们复制 "领导者"(目前是库兹涅佐夫)的代码并根据系统的上述行为进行修改。
我们从原来的740毫秒执行时间中获得了约20毫秒的稳定增益。
这是值得补充的。如果你不关心数组元素的 顺序。那么是的,这是一个优秀的变体。如果保持一致性很重要,那么就需要其他东西。
既然如此,这里是我的版本。
结果。
S.S. 原则上,已经达到了速度限制。下一步只是微优化和摆弄for循环。
我认为尼古拉的结果是对这种微观优化的巧妙运用。
有一个数组包含一组1,2,3,6,9,5,6,3,25,6,8,7,4类型的数据,你需要删除例如数值3,得到相同的数组,在输出中没有3和空位...
我正在寻找清除数组中不必要的值的最快方法...
我想到了以下的例子
也许有一种更便宜、更快捷的方法?
弗拉基米尔,这有什么必要?
按照我的理解,必须用指标缓冲 器来完成。但是,用前一个值或例如极端值的算术平均值来替换空值和/或 "不必要的 "值不是更符合逻辑吗?那么它将会快得多,而且数组的尺寸将保持不变。
弗拉基米尔,这有什么必要?
按照我的理解,必须用指标缓冲 器来完成。但是,用前一个值或例如极端值的算术平均值来替换空值和/或 "不必要的 "值不是更符合逻辑吗?那么它将会快得多,而且数组的尺寸将保持不变。
弗拉基米尔,这有什么必要?
根据我的理解,你必须用指标缓冲 器来做。但是,用前一个值或极端值的算术平均值替换空的和/或 "不必要的 "值,不是更符合逻辑吗?那么它将会快得多,而且数组的尺寸将保持不变。
当mql4中存在大量未结头寸/订单的多个EA时,在我看来,保留带有票据的数组,并通过数组检查订单是否被关闭,而不是通过检查符号和魔术师来尝试所有未结头寸。因此,如果订单被关闭,它应该被从数组中 "划掉"。在这种情况下,我习惯于将数组 "复制到自身",并将数组大小减少一个。这是瓦西里-索科洛夫 的建议,非常感谢,我将知道这不是最难的选择,因为我从未想过速度问题。为什么任务是去除几个相等的元素是另一个问题...
ps 当我在写这篇文章的时候,答案已经在那里了。所以这个问题也已经错了......))))))当mql4中存在大量未结头寸/订单的多个EA时,在我看来,保留带有票据的数组并通过数组检查订单是否被关闭,而不是通过检查符号和魔术师来尝试所有未结头寸。因此,如果订单被关闭,它应该被从数组中 "划掉"。在这种情况下,我习惯于将数组 "复制到自身",并将数组大小减少一个。这是瓦西里-索科洛夫 的建议,非常感谢,我将知道这不是最难的选择,因为我从未想过速度问题。为什么任务是去除几个相等的元素是另一个问题...
ps 我在写的时候,答案已经有了。事实证明,这个问题也已经错了... ))))))我当时大致想明白了。
如果我们有一个数组,顺序并不重要,所以使用库兹涅佐夫的变体更合理,用数组上部的值填充 "洞",这样就不会移动数组 的其他元素。这当然会更快。