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
Özünde, çarpışmaları çözmek için bir ilk veri dizisine sahip statik bir HashSet veri yapısı kullanıyorsunuz.
Ama uygulama - sadece gözlerinizi çıkarın ...
100-500 gereksiz parametreye sahip bir işlevi ("FindValueInSortArray") çağırmak yerine, genellikle bu parametrelerin sınıf alanları gibi davrandığı bir sınıf kullanırlar (derleyici örtük satır içi düşünmediyse parametreleri geçerken kazanır).
Aynı boyutta ve aynı kullanım amacına sahip bir çift dizi kullanmak gerekirse ( int p1[]; int p2[];), genellikle bir yapı dizisi kullanılır (erişimde indeksle kazanma, azaltma önbellek kaçırma şansı).
Evet biliyorum. Katılıyorum, kendim kendi uygulamamdan aptalım. Ama benim amacım algoritma, uygulama değil. Dedikleri gibi - algoritmanın doğruluğunu ve hızını kontrol etmek için "dizlerimde toplandı" (yaklaşık bir buçuk saat). Bu konunun (alıntı yapıyorum) "bir dizi gereksiz değeri temizlemenin en hızlı yolu" sorusunu tartıştığını hatırlatmama izin verin.
Kendi algoritmam hakkında çok şikayetim olmasına rağmen, çünkü evrensel olmaktan uzaktır. Algoritmayı iyileştirmenin yollarını görüyorum, ancak kod çok daha karmaşık hale gelecek. Yazık bir zaman.
ZY HashSet Hakkında İlk defa duyuyorum, tk. teoride güçlü değil. Yeni bir şey icat etmediğimi çok iyi anlıyorum, ama her şey benden önce icat edildi. :)) Bu algoritmanın avantajı, kaldırılacak eleman dizisinin düzgün bir dağılımı varsa açıktır. Dağılım, tek tipten çok farklıysa, bu uygulama, bu dalda halihazırda mevcut olan diğerlerine göre hız açısından daha düşük olabilir.
toplam hesaplamayı CRC32 ile değiştirdi)
Teşekkür ederim. Tabii ki böylesi daha iyi.
Ama anladığım kadarıyla CRC32'ye geçiş herhangi bir hata ortaya çıkarmadı. :)
Modern bilgisayarların ve özellikle MQL5'in yeteneklerinden şahsen etkilendiğimi söyleyeceğim.
Gerçekten de, bir milyon öğelik bir dizide yaklaşık bin farklı değeri aramak, bunları silmek (yaklaşık 100.000 hücre) ve temizlenmiş diziyi yeniden paketlemek saniyenin yalnızca 1/40'ı (!!!) sürer.
Ustaca olan her şey basit! :))
Ancak böyle bir algoritmanın kontrolsüz bir şekilde hafızayı tükettiği doğrudur.
Örneğin, değiştirirseniz:
üzerinde
o zaman durum oldukça farklıdır:
Teşekkür ederim. Tabii ki böylesi daha iyi.
Ama anladığım kadarıyla CRC32'ye geçiş herhangi bir hata ortaya çıkarmadı. :)
evet, ama şimdi sadece bir algoritmanın sonucunu kendi gözleriyle görenler, başkalarının da aynı sonucu alacağından emin olabilir)
Fena fikir değil, ancak bir dizi veya vektörde negatif değerler varsa, dizi aralık dışı hatası alırsınız.
ek olarak, filtreleme bayraklı dizinin boyutu 2 147 483 647 boyutuna ulaşabilir ki bu çok fazla
32 BOOL değişkeninin ayarını aşağıdaki gibi bir bit maskesiyle değiştirerek elbette 32 faktörü azaltılabilir:
ama yine de boyut çok büyük kalacak ve hız yaklaşık yarı yarıya düşecek
Ustaca olan her şey basit! :))
Ancak böyle bir algoritmanın kontrolsüz bir şekilde hafızayı tükettiği doğrudur.
Örneğin, değiştirirseniz:
üzerinde
o zaman durum oldukça farklıdır:
Versiyonunuz da iyi ama maalesef sizin de bir zayıf noktanız var. Diyelim ki "ev" koşulları altında, yani ~100 boyutunda küçük diziler ve ~5-10 küçük bir vektör
algoritmanız burada sunulanların hepsinden daha yavaş olacaktır. mikrosaniyelerdeki fark o kadar önemsizdir ki muhtemelen önemli değildir, ancak büyük dizi boyutlarında daha iyidir.
PS, işlevin evrensel olması için, giriş verilerine göre seçilen birkaç farklı algoritmayı birleştirmek gerektiğini düşünüyorum.