Ciddi değil. Bu küçük sorunu çözmek için filleri cezbedeceksem, o zaman STL::remove(dizi, değer)'den bahsederim.
Bu sadece çok ciddi ve temel. MQL sadece ayrıntılıdır. Dehşete.
Filtre (ve TS'de vardır, filtreleme), harita (görüntüleme), katlama (konvolüsyon, toplam) gibi temel operatörler derhal ve sorgusuz sualsiz uygulanmalıdır. Ve optimize olun.
Bu sadece çok ciddi ve temel. MQL sadece ayrıntılıdır. Dehşete.
Filtre (ve TS'de vardır, filtreleme), harita (görüntüleme), katlama (konvolüsyon, toplam) gibi temel operatörler derhal ve sorgusuz sualsiz uygulanmalıdır. Ve optimize olun.
Mesele şu ki, küçük bir görev için böylesine büyük bir ("temel") bağımlılığı çekmek saçmalıktır. Her şeyi akıllıca yazarsanız ve tüm projeyi yeniden düzenlerseniz - o zaman elbette, ancak asıl sorunun özü bu değildir.
1. Double ile == türündeki değişkenleri karşılaştırmak, en hafif tabirle, comme il faut değil; 2. Kodun karmaşıklığı O(n^2) iken, sıralanmamış bir girdi dizisiyle verilen bir problem için en kötü karmaşıklık O(n); 3. Kod çalışmıyor, çünkü işlevin gerçek kullanımında döndürülen dizinin kaç gerçek değer içerdiğini belirlemek mümkün değildir:
1. Double ile == türündeki değişkenleri karşılaştırmak, en hafif tabirle, comme il faut değil; 2. Kodun karmaşıklığı O(n^2) iken, sıralanmamış bir girdi dizisiyle verilen bir problem için en kötü karmaşıklık O(n); 3. Kod çalışmıyor, çünkü işlevin gerçek kullanımında döndürülen dizinin kaç gerçek değer içerdiğini belirlemek mümkün değildir:
Yürütme sonucu:
Diziden hiçbir zaman kaldırılmayan geçersiz değerler kırmızıyla vurgulanır.
Jublik? Bırak olsun. Çift değişkenleri karşılaştırmak, karşılaştırmadan önce değerlendirilmezlerse çok kötü olur.
1. Double ile == türündeki değişkenleri karşılaştırmak, en hafif tabirle, comme il faut değil; 2. Kodun karmaşıklığı O(n^2) iken, sıralanmamış bir girdi dizisiyle verilen bir problem için en kötü karmaşıklık O(n); 3. Kod çalışmıyor, çünkü işlevin gerçek kullanımında döndürülen dizinin kaç gerçek değer içerdiğini belirlemek mümkün değildir:
Yürütme sonucu:
Diziden hiçbir zaman kaldırılmayan geçersiz değerler kırmızıyla vurgulanır.
Saçma sapan konuşma. Size hatanızı açıklayın veya kendinizi tahmin edin? hiç de zor değil...
Üç puan - üç padok. Hayır, sadece iki padok olmasına rağmen.
Pekala, hız açısından böyle bir içki yarışması çoktan gittiyse, o zaman kendi versiyonumu sunacağım:
int ArrayDeleteVal( int &a[], constint val) // вариант Semko
{
int size= ArraySize (a);
int i= 0 ,start,s,count;
while (i<size && a[i]!=val) i++; // ищем первый элемент массива со значением val
start=i; i++;
while (i<size && a[i]==val) i++; // ищем элемент массива со значением, не равным val
s=i; i++;
while ( true )
{
while (i<size && a[i]!=val) i++; // ищем элемент массива со значением val
count=i-s;
if (count> 6 ) { ArrayCopy (a,a,start,s,count); start+=count;} // если нужно скопировать более 6 элементов, то имеет смысл воспользоваться ArrayCopyelsefor (; s<i; start++,s++) a[start]=a[s]; // иначе простой циклif (i==size) break ;
i++;
while (i<size && a[i]==val) i++; // ищем элемент массива со значением, не равным valif (i<size) s=i; elsebreak ;
i++;
}
if (start<size) ArrayResize (a,start); else start=size;
return (start);
}
Tüm seçenekler için bir test komut dosyası yazdı. 1.000.000 elemanlı bir dizi için sonuç (yaklaşık 1000 ekstra değer):
2018.11 . 1219 : 50 : 02.965 ArrayDeleteValue (EURUSD,D1) вариант Pastushak: Контрольная сумма = 495654091 ; элементов - 998983 ; время выполнения = 156457 микросекунд
2018.11 . 1219 : 50 : 02.969 ArrayDeleteValue (EURUSD,D1) вариант Korotky: Контрольная сумма = 495654091 ; элементов - 998983 ; время выполнения = 2319 микросекунд
2018.11 . 1219 : 50 : 02.972 ArrayDeleteValue (EURUSD,D1) вариант Fedoseev: Контрольная сумма = 495654091 ; элементов - 998983 ; время выполнения = 1810 микросекунд
2018.11 . 1219 : 50 : 02.974 ArrayDeleteValue (EURUSD,D1) вариант Semko: Контрольная сумма = 495654091 ; элементов - 998983 ; время выполнения = 785 микросекунд
Ana görev, diziyi verilen değerlerden temizlemektir.
Ana sorun bu olmayabilir. Bu dizide ne toplanır ve daha sonra nasıl kullanılır?
Ciddi değil. Bu küçük sorunu çözmek için filleri cezbedeceksem, o zaman STL::remove(dizi, değer)'den bahsederim.
Bu sadece çok ciddi ve temel. MQL sadece ayrıntılıdır. Dehşete.
Filtre (ve TS'de vardır, filtreleme), harita (görüntüleme), katlama (konvolüsyon, toplam) gibi temel operatörler
derhal ve sorgusuz sualsiz uygulanmalıdır. Ve optimize olun.
Bu sadece çok ciddi ve temel. MQL sadece ayrıntılıdır. Dehşete.
Filtre (ve TS'de vardır, filtreleme), harita (görüntüleme), katlama (konvolüsyon, toplam) gibi temel operatörler
derhal ve sorgusuz sualsiz uygulanmalıdır. Ve optimize olun.
Mesele şu ki, küçük bir görev için böylesine büyük bir ("temel") bağımlılığı çekmek saçmalıktır. Her şeyi akıllıca yazarsanız ve tüm projeyi yeniden düzenlerseniz - o zaman elbette, ancak asıl sorunun özü bu değildir.
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
Verilen eleman(lar)ın bir dizisini temizleme
Dmitry Fedoseev , 2018.11.12 23:05
Bu biraz ayıp ... ©
1. Double ile == türündeki değişkenleri karşılaştırmak, en hafif tabirle, comme il faut değil;
2. Kodun karmaşıklığı O(n^2) iken, sıralanmamış bir girdi dizisiyle verilen bir problem için en kötü karmaşıklık O(n);
3. Kod çalışmıyor, çünkü işlevin gerçek kullanımında döndürülen dizinin kaç gerçek değer içerdiğini belirlemek mümkün değildir:
Yürütme sonucu:
Diziden hiçbir zaman kaldırılmayan geçersiz değerler kırmızıyla vurgulanır.
Bu biraz ayıp ... ©
1. Double ile == türündeki değişkenleri karşılaştırmak, en hafif tabirle, comme il faut değil;
2. Kodun karmaşıklığı O(n^2) iken, sıralanmamış bir girdi dizisiyle verilen bir problem için en kötü karmaşıklık O(n);
3. Kod çalışmıyor, çünkü işlevin gerçek kullanımında döndürülen dizinin kaç gerçek değer içerdiğini belirlemek mümkün değildir:
Yürütme sonucu:
Diziden hiçbir zaman kaldırılmayan geçersiz değerler kırmızıyla vurgulanır.
Jublik? Bırak olsun. Çift değişkenleri karşılaştırmak, karşılaştırmadan önce değerlendirilmezlerse çok kötü olur.
Malzeme öğrenin. Utançla ne alakası var?
Bu biraz ayıp ... ©
1. Double ile == türündeki değişkenleri karşılaştırmak, en hafif tabirle, comme il faut değil;
2. Kodun karmaşıklığı O(n^2) iken, sıralanmamış bir girdi dizisiyle verilen bir problem için en kötü karmaşıklık O(n);
3. Kod çalışmıyor, çünkü işlevin gerçek kullanımında döndürülen dizinin kaç gerçek değer içerdiğini belirlemek mümkün değildir:
Yürütme sonucu:
Diziden hiçbir zaman kaldırılmayan geçersiz değerler kırmızıyla vurgulanır.
Saçma sapan konuşma. Size hatanızı açıklayın veya kendinizi tahmin edin? hiç de zor değil...
Üç puan - üç padok. Hayır, sadece iki padok olmasına rağmen.
ps ama sana inanıyorum
ps2, işlevi doğru kullanırsanız sonuç budur:
Bu daha iyi:
Bu daha iyi:
Dmitry, üzgün - v - ayrıca bir dizi.
Ve genel olarak, tüm bunlar tamamen saçmalık.
Dmitry, üzgün - v - ayrıca bir dizi.
Ve genel olarak, tüm bunlar tamamen saçmalık.
v bir diziyse, bu bir sorun değil. Ve saçma olduğu gerçeği - oldukça evet. Bu sorunu çözme ihtiyacı hiç duymadım.
Pekala, hız açısından böyle bir içki yarışması çoktan gittiyse, o zaman kendi versiyonumu sunacağım:
Tüm seçenekler için bir test komut dosyası yazdı.
Sıradaki kim? :))1.000.000 elemanlı bir dizi için sonuç (yaklaşık 1000 ekstra değer):
Peter, vay...