Löschen eines Arrays mit definierten Element(en) - Seite 13

 
Maxim Kuznetsov:

Der Optimierer ist nicht beteiligt - es gibt nur halb so viele Vergleiche...

Gehen Sie die Taktik sorgfältig durch und achten Sie darauf, dass die Logik vollständig übereinstimmt
ZS: Ich habe allerdings gezögert.
 

Nur ein kleines Refactoring ("Weil man in der Welt nicht so schön sein kann..."):

#define  BENCHMARK_TEST(function, test_name)     \
   ArrayCopy(arr2,arr);                         \
   t=GetMicrosecondCount();                     \
   N=##function(arr2,Value);                    \
   t=GetMicrosecondCount()-t;                   \
   printf("вариант %-12s: Контрольная сумма = %f; элементов - %d; время выполнения - %6d микросекунд", test_name, ControlSumm(arr2), N, t);


void OnStart()
{
   srand(1);
   
   int N;
   ulong t;
   int Value=rand()%1000; // значение, которое нужно удалить из массива
   
   int arr[]; // исходный массив
   int arr2[]; // создаем еще один массив для теста и копируем в него исходный массив

   ArrayResize(arr,1000000);
   for(int i=0; i<1000000;i++){ 
      arr[i]=rand()%1000; //генерируем исходный массив случайными значениями от 0 до 1000
   }   
   
   BENCHMARK_TEST(ArrayDeleteVal1,      "Pastushak");
   BENCHMARK_TEST(arrayFilter,          "Korotky");
   BENCHMARK_TEST(DelEl2,               "Fedoseev");
   BENCHMARK_TEST(ArrayDeleteVal,       "Semko");
   BENCHMARK_TEST(ArrayModify,          "Pavlov");
   BENCHMARK_TEST(arrayFilter2,         "Nikitin");
   BENCHMARK_TEST(ArrayDelV,            "Vladimir");
   BENCHMARK_TEST(PeterArray,           "Peter");
   BENCHMARK_TEST(arrayFilter3,         "Kuznetsov");
}

//..............................................

Ergebnis:
2018.11.15 01:11:13.670 Test (EURUSD,H1)        вариант Pastushak   : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения - 127587 микросекунд
2018.11.15 01:11:13.675 Test (EURUSD,H1)        вариант Korotky     : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   2530 микросекунд
2018.11.15 01:11:13.679 Test (EURUSD,H1)        вариант Fedoseev    : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   1995 микросекунд
2018.11.15 01:11:13.681 Test (EURUSD,H1)        вариант Semko       : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -    854 микросекунд
2018.11.15 01:11:13.686 Test (EURUSD,H1)        вариант Pavlov      : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   3239 микросекунд
2018.11.15 01:11:13.692 Test (EURUSD,H1)        вариант Nikitin     : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   3812 микросекунд
2018.11.15 01:11:13.698 Test (EURUSD,H1)        вариант Vladimir    : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   4037 микросекунд
2018.11.15 01:11:13.707 Test (EURUSD,H1)        вариант Peter       : Контрольная сумма = 7225.757267; элементов - 998994; время выполнения -   7855 микросекунд
2018.11.15 01:11:13.710 Test (EURUSD,H1)        вариант Kuznetsov   : Контрольная сумма = 7224.813498; элементов - 998994; время выполнения -    744 микросекунд
Dateien:
 
Sergey Dzyublik:

Nur ein kleines Refactoring ("Weil man in der Welt nicht so schön sein kann..."):

Gerade oben fragte ich - versuchen Sie, das ursprüngliche Array als eine Reihe zu setzen. ArraySetAsSeries(...,true);

Diese Frage ist sehr wichtig, um herauszufinden, welche Methoden bei Reihen überhaupt nicht funktionieren und welche unerwartet langsam sind.

Es geht nicht um Array-Filterung, die Frage nach Serien ist praktischer

 
Sergey Dzyublik:

Nur ein kleines Refactoring ("Weil man in der Welt nicht so schön sein kann..."):

Vielen Dank, Sergei, für eine nützliche Qualitätslektion. :)

 

Verschiebung von @Maxim Kuznetsov in eine andere Kategorie, schließlich sind es unterschiedliche Funktionen

Empfohlene Tests mit Fehlern (Semko und Pavlov).

Ihre Variante hinzugefügt

P.S. Und Schablonen müssen entfernt werden, das ist auch ein möglicher Fehler beim Vergleich von Doppeln

Dateien:
 
Stanislav Dray:

Verschiebung von @Maxim Kuznetsov in eine andere Kategorie, schließlich sind es unterschiedliche Funktionen

Empfohlene Tests mit Fehlern (Semko und Pavlov).

Ihre Variante hinzugefügt

P.S. Schablonen müssen ebenfalls entfernt werden, da dies ein potenzieller Fehler beim Vergleich von Doppeln ist.

Die letzten beiden Array-Elemente wurden mit Value gleichgesetzt. Semko hat keine Fehler. Bitte zeigen Sie uns den Fehler in welchem Fall. Es ist nicht sehr vernünftig, einen Anführer zu entlassen.

Was sind die Fehler bei Double, die durch ihre Normalisierung verursacht werden? Wenn Sie also mit einem Array von Doubles arbeiten, müssen Sie sich selbst darum kümmern, normalisierte Daten in das Array zu übertragen.

 
Dmitry Fedoseev:

Die letzten beiden Elemente des Arrays wurden mit Value gleichgesetzt. Semko hat keine Fehler. Zeigen Sie mir, in welchem Fall er Fehler hat. Es ist nicht fair, den Anführer hinauszuwerfen.

Was sind die Fehler bei Double, die durch ihre Normalisierung verursacht werden? Wenn wir mit einem Array von Doubles arbeiten, müssen wir die normalisierten Daten selbst in das Array einfügen.

Ich habe den Code nur auskommentiert, Sie haben es wahrscheinlich nicht bemerkt. Ein Fehler, wenn das letzte Array-Element unter die Löschbedingung fällt, d.h. gleich Value ist.

Ich habe es nicht aus dem Code entfernt :), nur um zu verhindern, dass jemand den Fehler kopiert. Ich denke, Nikolay wird seinen Code korrigieren und er wird selbst zurückkehren :)

Wie für die Vorlagen: es wird ein Fehler bei der Übergabe der doppelten, wie die Funktion ist falsch Vergleich von reellen Zahlen, oder besser gesagt, es ist einfach nicht für diese, so dass, bevor Sie eine Vorlage, sollten wir sicherstellen, dass die Funktion korrekt mit allen Typen.

1

 
Stanislav Dray:

Ich habe den Code auskommentiert, Sie haben es wahrscheinlich nicht bemerkt. Der Fehler tritt auf, wenn das letzte Element des Arrays unter die Löschbedingung fällt, d.h. gleich Value ist

Ich habe es nicht aus dem Code entfernt :), nur um zu verhindern, dass jemand es mit einem Fehler kopiert. Ich denke, Nikolay wird seinen Code korrigieren und er wird selbst zurückkehren :)

Und über die Vorlagen: es wird ein Fehler bei der Übergabe der doppelten, wie die Funktion ist falsch Vergleich von reellen Zahlen, oder besser gesagt, es ist einfach nicht für diese, so dass, bevor Sie eine Vorlage, sollten Sie sicherstellen, dass die Funktion korrekt mit allen Typen arbeiten.


Und was gab es zu beachten? Dies: "Array beschädigt, wenn eines oder mehrere seiner letzten Elemente unter eine Bedingung fallen"? Das habe ich oben geschrieben - es hat nicht funktioniert. Ich sehe an Ihrem Screenshot, dass es nicht darum geht. Der Fehler scheint aufzutreten, wenn die Anzahl der Artikel gering ist.

Welche Art von Fehler würde bei Double auftreten? Warum? Alle Daten in dem Array werden auf diese Weise funktionieren. Wenn Sie wollen, dass es richtig funktioniert, sollten Sie eine Normalisierung durchführen, bevor Sie es in ein Array einfügen. Sie sollten jedoch keine Normalisierung in die Funktion selbst einfügen. Die Funktion ist perfekt auf die Vorlage abgestimmt und funktioniert auch mit Double, wenn Sie sie richtig verwenden.

Es ist sehr gut, dass sich plötzlich alle mit dem Problem der Doppelbelastung befassen.

 
Dmitry Fedoseev:

Was gab es da zu beachten? Diese hier: "Das Array ist beschädigt, wenn eines oder mehrere der letzten Elemente unter diese Bedingung fallen"? Das ist es, was ich oben geschrieben habe, dass es nicht funktioniert hat. Wie Sie auf Ihrem Screenshot sehen können, ist das nicht der Punkt. Der Fehler scheint aufzutreten, wenn die Anzahl der Artikel gering ist.

Welche Art von Fehler würde bei Double auftreten? Warum? Alle Daten in dem Array werden auf diese Weise funktionieren. Wenn Sie wollen, dass es richtig funktioniert, sollten Sie eine Normalisierung durchführen, bevor Sie es in ein Array einfügen. Sie sollten jedoch keine Normalisierung in die Funktion selbst einfügen. Die Funktion passt perfekt zur Vorlage und funktioniert einwandfrei, wenn Sie sie richtig verwenden.

Die Tatsache, dass sich plötzlich alle mit dem Problem der Doppelbelastung befassen, ist sehr gut, aber man muss dabei klug vorgehen.

Sie und ich haben unterschiedliche Ansichten darüber, wie die Funktion funktionieren sollte. Eine Funktion ist eine Funktion in Afrika und sollte ohne jegliche Datenaufbereitung funktionieren, alles muss intern funktionieren.

P.S. Eigentlich geht das niemanden etwas an, es stört mich nicht wirklich. Ich habe gerade geschrieben, dass die Vorlagen hier als fünftes Bein eines Hundes und ein möglicher Fehler

 
Stanislav Dray:

Eine Funktion ist eine Funktion und sollte ohne jegliche Datenaufbereitung funktionieren, alles sollte intern funktionieren.

Das ist ein Kindergarten.

Grund der Beschwerde: