N Time
300:00:00.5460312400:00:00.4720270500:00:00.4820276600:00:00.4250243700:00:00.4410252800:00:00.4350249900:00:00.43002461000:00:00.43802511100:00:00.45202581200:00:00.44202531300:00:00.45002571400:00:00.46402661500:00:00.51002911600:00:00.49502841700:00:00.52002971800:00:00.51102921900:00:00.50902912000:00:00.56903262100:00:00.53203042200:00:00.55603182300:00:00.57503292400:00:00.58503352500:00:00.61403512600:00:00.61203502700:00:00.61603522800:00:00.65103732900:00:00.65103723000:00:00.67703873100:00:00.69003953200:00:00.70404033300:00:00.70004003400:00:00.71904113500:00:00.73204193600:00:00.75104303700:00:00.75104293800:00:00.82904743900:00:00.77604444000:00:00.80804634100:00:00.79904574200:00:00.82404714300:00:00.84604844400:00:00.86904974500:00:00.86804964600:00:00.91205224700:00:00.88705074800:00:00.95205454900:00:00.92305285000:00:00.94305395100:00:00.94605415200:00:00.95905495300:00:00.97505585400:00:00.99205675500:00:01.00105735600:00:01.04405975700:00:01.04005955800:00:01.06106075900:00:01.06106066000:00:01.08606226100:00:01.07306136200:00:01.11706396300:00:01.14006526400:00:01.13706516500:00:01.11906406600:00:01.19606846700:00:01.17406716800:00:01.21106936900:00:01.24907157000:00:01.30107447100:00:01.27507307200:00:01.30907487300:00:01.30007447400:00:01.30607477500:00:01.36107797600:00:01.37407857700:00:01.41908127800:00:01.35007727900:00:01.33507648000:00:01.35307748100:00:01.46908408200:00:01.42708168300:00:01.38707948400:00:01.42508158500:00:01.42508158600:00:01.45008298700:00:01.46008358800:00:01.46308378900:00:01.45008309000:00:01.50608619100:00:01.49308549200:00:01.53408789300:00:01.56208939400:00:01.54708859500:00:01.54508849600:00:01.57308999700:00:01.56408959800:00:01.58409069900:00:01.5970914
现在我有一个问题。 我需要对元素复制 "成本 "很大的数组进行有效的排序(即其中的元素是大型的,"重 "的结构,类对象,长字符串等)。 常识表明,我们应该让他们留在原地,但排序而不是一种指针 - 他们的原始位置的单元格的索引。 下面是引用https://www.mql5.com/ru/forum/6476#comment_178318Оставим,到目前为止,他们的许多当前任务,并实现它在mql5。
一切都已经在我们面前被偷走了 :)
MQL5中的电子表格
输入应该是要排序的数组的副本,注释应该是注释,不必要的应该被注释掉
一切都已经在我们面前被偷走了 :)
MQL5中的电子表格
输入应该是要排序的数组的副本,注释应该是注释,不必要的注释应该是注释。
你真卑鄙,你毁了这首歌...或者说--试图这样做。:)
// 很明显,有很好的近似值。我还不如从标准库中提取一个样本。:)
是有规律可循的。也有一些优秀的作品。但仍然如此。在这里,重要的是编码和调试一切,以达到一个独立可用的产品的工作状态。此外(我为什么在这里发送)--尽可能快。也就是说,我建议将所有可能的性能压缩到百分之一(包括百分之一)。:)
这是第一次。第二,对于对象,我们需要的索引数组的数量等于排序标准的数量,在一般情况下可以是几个,+(最好是)根据几个标准的索引数组插入的功能。
你真卑鄙,你毁了这首歌...或者说,你试过了。:)
// 很明显,有很好的近似值。我还不如从标准库中提取一个样本。:)
有样品。甚至还有一些伟大的。但仍然如此。重要的是要检查和调试一切,使其达到独立可用产品的工作状态。还有(我为什么要把它发到这里)--最快的一个。也就是说,我建议将所有可能的性能压缩到百分之一(包括百分之一)。:)
这是第一件事。第二,对于对象,我们需要的索引数组的数量等于排序标准的数量,一般来说可能是几个,+(最好是)插入按几个标准排序的索引数组中的功能。
同样的答案MQL5中的电子表格。
这一切都在那里。在一个具体的问题下,有可能在操纵下重新制作的不是列而是行,有列做的是有可能将它们声明为不同的类型。如果表格类型相同,一切都可以重放。
制作了一个带有基本类型的排序索引的输入器。
默认的排序是 "降序",要以升序排序,请将排序方向标志设为false。
测试结果://索引数组 double[], int[], string[]; 顺序:原始数组,降序数组,升序数组
图书馆和拖车上的测试。
把索引器放在 "MQL5\Include\Indexes\"文件夹中。
这里有一个使用OCL的示例类。当然,有些东西是不完整和尴尬的,但也许有人会发现它是有用的。
我对初始化做了一些修改,现在你可以运行多维计算了。
很好的主题!
刚才我面临一个优化问题,有一个寻找价格极值(最小值)的算法。条件如下:有一个柱子,其左边和右边的n个柱子都低于(高于)其最大值。
n 是一个自由的任意选择的值。周期n总是奇数,因为右边和左边的两根柱子的总和将总是一个偶数,价格极值本身的中心柱子被加到这个偶数上。
我对第一版的算法没有多想,写了最明显的代码。现在我使用WealthLab平台用C#编写,但我认为你可以很容易地理解有问题的算法的本质,这里是最有问题的部分。
整个问题是在第二个循环中。它同时处理一个潜在极值的左右分支,因此只经过(N-1)/2条,但这是不够的。测量表明,识别 算术级数中的极值 所花费的时间取决于周期N,这非常非常糟糕。
试着通过期数将花费时间来总结算术级数,而这是一个非常大的数值。
一个可能的解决方案是引入一个额外的变量。毕竟,如果确定了一个极值,就可以保证在其右边的(N - 1)/2内没有酒吧,所以可以从酒吧开始确定一个新的极值:current_bar + (N - 1)/2。然而,极值需要和最小值一起被识别,在current_bar + (N - 1)/2之前可以找到一个新的最小值。因此,有必要将极值和最小值的搜索分成两遍,这将否定任何性能的提高。我们可以在C#中很容易地将两个通道分成两个线程同时在两个核心上处理,但我想首先找到最佳算法并对其进行优化。我在等待专家的帮助。
嗯,这不是一个优化问题。
试着通过期数会取算术级数的总和,而这是一个非常大的数值。
寻找极值似乎是一个O(n)级的问题,其中n是数据的数量。你怎么能让这个渐进式更糟糕,即O(n^2) - 我甚至无法想象。或者你混淆了这些术语。
最简单的算法是ArraySort(),内置足够快,大约是O(n * ln( n ))。 但对于这个问题,它可能是多余的。
你可以想出一些递归的方法,这样会更快。
找到最小值需要多长时间,有多少条?好吧,我不相信你在寻找100条的最多一秒半的时间。
最简单的算法是ArraySort(),内置的排序足够快。 但对于这个任务来说,它可能是多余的。
最好的排序是O(n*log(n))。完全是多余的。
我们可以想出一些递归的方法,这样会更快。
较慢。递归是最常见的邪恶。递归?这可能是一个无论你怎么做,速度都差不多的案例。
通过代码。
最小和最大的循环必须明确分开。并在失败时立即退出循环。
原则上,是的。但仍不超过O(n)。
OCL在这里会有帮助。当然,渐进法将保持不变。但速度完全可以提高一百倍。