
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Sanırım, evet. Ama yine de O(n)'den fazla değil.
Eh, bu bir optimizasyon sorunu değil.
Bir ekstremum bulmak her zaman O(n) düzeyinde bir problemdir, burada n veri sayısıdır. Bu asimptotiklerin nasıl daha kötü hale getirilebileceğini hayal bile edemiyorum.
En basit algoritma ArraySort() sıralamadır, yerleşik oldukça hızlıdır. Ama muhtemelen bu görev için fazladan.
Daha hızlı olacak özyinelemeli bir şey bulabilirsin.
Minimum ve kaç çubuk için ne kadar süreyle arama yapıyorsunuz?
İstatistikleri ilk mesajda verdim. 1.000.000 bar için hesaplama, periyottaki artışla aritmetik olarak büyür. Dolayısıyla, 3. periyot için hesaplama 0.54 saniye, 51. periyot için 0.94 saniye ve 99. periyot için zaten 1.59 saniyedir.
Döngü içinde döngü kullandığı için daha da kötüleşir, bu bir hatadır. Yani 3. periyot için yineleme sayısı 1.000.000 * (3-1/2) = 1.000.000 olacak, ancak 99. periyot için 1.000.000 * (99-1)/2 = 49.000.000 olacak! Bu nedenle algoritma, sabit miktarda veri ile yineleme sayısı periyottaki artışla niteliksel olarak artmayacak şekilde yeniden yazılmalıdır ve bu tamamen bir optimizasyon problemidir. Şimdi yaptığım şey bu. Şimdiye kadar şunu yazdım:
Minimumu aramak için paralel bir iş parçacığında çalışan uygun bir Down() işlevi olacaktır. Her iki işlevin de tamamlanmasından sonra sonuçları genel listeye eklenecektir. Bunun gibi bir şey.
Pekala, karıştırdım. Bu, ritmik bir ilerlemenin toplamı değildir, C-4 . Miktar ikinci dereceden büyüyor.
kesinlikle OCL.
En basit algoritma, oldukça hızlı olan, O(n * ln( n ) ) bölgesinde bir şey olan ArraySort() yerleşik sıralamadır. Ama muhtemelen bu görev için fazladan.
Düşünce. Herhangi bir sıralama, for kullanarak tüm dizi üzerinde yineleme yapmaktan açıkça daha yavaş olacaktır. For bir yineleme verirken, arraysort en iyi ihtimalle her n alt penceresindeki değerleri sıralar, bu da kendi içinde düzinelerce eylem anlamına gelir.
Hayır, sonuçta, burada toplam yineleme sayısının niteliksel olarak çubuk sayısından farklı olmadığından emin olmak için çaba göstermeniz gerekir.
Pekala, karıştırdım. Bu, ritmik bir ilerlemenin toplamı değildir, C-4 . Miktar ikinci dereceden büyüyor.
kesinlikle OCL.
Böyle bir ekstrem aramanın şartı, en hafif tabirle, tuhaftır... Fakat buna rağmen, önden arama yöntemini kullanmak son derece mantıksızdır.
ExtDepth = n ile tek geçişli klasik bir ZigZag, mevcut duruma küçük bir ayarlama ile hemen akla geliyor. OCL burada %100 gereksizdir.
Böyle bir ekstrem aramanın şartı, en hafif tabirle, tuhaftır... Fakat buna rağmen, önden arama yöntemini kullanmak son derece mantıksızdır.
ExtDepth = n ile tek geçişli klasik bir ZigZag, mevcut duruma küçük bir ayarlama ile hemen akla geliyor. OCL burada %100 gereksizdir.
Ve ne? O(n) ne derse desin yine de olacaktır.
Hepsi başarısız olursa, OCL'yi deneyin. Beşte dll tipinin sapmaları olmadan başka bir yol yoktur.