Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Im Grunde genommen sind alle Algorithmen gleich. Jeder modifiziert das Array Element für Element, und jeder strebt nach Fedoseevs Variante, weil sie nichts Überflüssiges enthält.
Nur in meinem Fall ist es in Blöcken mit ArrayCopy getan, so gibt es einen Geschwindigkeitsvorteil.
Und was ist mit Pjotr? Sind alle "aufgerissen"? Niemand hat seinen Code in den Checker eingegeben. Ich frage mich, wie und in welchem Ausmaß er alle im Vorstand umgehauen hat.
Ich habe über die Gründe nachgedacht und zwei Zeilen darin korrigiert, um ein Drittel der Elemente zu entfernen, nicht 0,1 %.
Fazit: Die Berechnung von Adressen in einem Array mit einem beliebigen Abstand zwischen ihren Nummern ist immer noch schlechter als die Verarbeitung von Elementen in einer Reihe in einem bestimmten Schritt, umso mehr in Schritt 1, der Compiler kann es optimieren.
Oh, ich verstehe, was Sie meinen. Irgendwie habe ich diesen Satz übersehen
Ja, natürlich ist es klar, aber trotzdem, selbst wenn ich jedes dritte Element wegwerfen muss (dann funktioniert ArrayCopy nicht mehr für mich und die Gewinne verschwinden) ist das Bild anders:
Die Pavlov-Variante funktioniert wirklich nicht, aber es gibt auch richtige und falsche Prüfsummen.
Und was ist mit Peter? Hast du sie alle auseinandergenommen? Niemand hat seinen Code in den Checker eingegeben. Es ist interessant, wie und in welchem Ausmaß er jeden in diesem Gremium umgehauen hat.
Ich verstehe seinen Höhenflug immer noch nicht. Er hat immer noch keine fertige Funktion geliefert. Und wenn ich es für ihn fertig stelle, wird er mir wieder vorwerfen, alles neu zu machen. ))
Ich verstehe seinen Höhenflug immer noch nicht. Er hat immer noch keine fertige Funktion geliefert. Und wenn ich es für ihn fertig stelle, wird er mir wieder vorwerfen, alles neu zu machen. ))
Nun, wenn ich mir seinen Code von einem Mobiltelefon aus ansehe, habe ich den Eindruck, dass er auf eine "einfache Art und Weise" schreibt. Deshalb hat er die Funktion nicht angegeben - er macht alles in einer Reihe. Und sein Skript ist keine Funktion, sondern reiner Code. Natürlich darf ein solches Skript keine Funktion beinhalten, aber... Ich glaube, ihm fehlt ein Foto für seine Flüge :)
Aber das ist nur mein Gefühl.
Die Pawlowsche Variante wurde korrigiert.
Ihre Werte sind seltsam. Vielleicht haben Sie das Skript nach dem Profiling oder Debugging ausgeführt, ohne den Code neu zu kompilieren?
So funktioniert es bei mir:
Und in Ihrer Variante gibt es eine falsche Prüfsumme. Die Erstellung eines zusätzlichen Arrays ist überhaupt nicht rentabel, im Gegenteil, sie verlangsamt den Prozess und verbraucht zusätzliche Ressourcen.
Korrigiert.
Ich habe es ein paar Mal laufen lassen, aber die Ergebnisse hängen noch in der Luft - der Computer ist sehr beschäftigt und wird erst am Samstag wieder frei sein. Fragen Sie lieber jemand anderen. Aber die Prüfsumme stimmt jetzt überein. Für sehr spärliche unnötige Werte (0,1%)
2018.11.13 21:35:16.888 del_2 (GBPUSD.m,H1) Option Pastushak: Checksumme = 497057781; Elemente - 998984; Ausführungszeit = 418662 Mikrosekunden
2018.11.13 21:35:16.898 del_2 (GBPUSD.m,H1) Variante Korotky: Checksumme = 497057781; Elemente - 998984; Ausführungszeit = 10683 Mikrosekunden
2018.11.13 21:35:16.918 del_2 (GBPUSD.m,H1) Variante Fedoseev: Checksumme = 497057781; Elemente - 998984; Ausführungszeit = 9740 Mikrosekunden
2018.11.13 21:35:16.928 del_2 (GBPUSD.m,H1) Variante Semko: Checksumme = 497057781; Elemente - 998984; Ausführungszeit = 4691 Mikrosekunden
2018.11.13 21:35:16.944 del_2 (GBPUSD.m,H1) Variante Pavlov: Checksumme = 497057781; Elemente - 998984; Ausführungszeit = 12512 Mikrosekunden
2018.11.13 21:35:16.957 del_2 (GBPUSD.m,H1) Variante Nikitin: Prüfsumme = 497057781; Elemente - 998984; Ausführungszeit = 10720 Mikrosekunden
2018.11.13 21:35:16.978 del_2 (GBPUSD.m,H1) Variante Vladimir: Checksumme = 497057781; Elemente - 998984; Ausführungszeit = 17197 Mikrosekunden
für ein Drittel
2018.11.13 21:57:17.838 del_2 (GBPUSD.m,H1) Variante Pastushak: Prüfsumme = 668222; Elemente - 667065; Ausführungszeit = 65732 Mikrosekunden
2018.11.13 21:57:17.838 del_2 (GBPUSD.m,H1) Variante Korotky: Checksumme = 668222; Elemente - 667065; Ausführungszeit = 4757 Mikrosekunden
2018.11.13 21:57:17.848 del_2 (GBPUSD.m,H1) Variante Fedoseev: Checksumme = 668222; Elemente - 667065; Ausführungszeit = 4815 Mikrosekunden
2018.11.13 21:57:17.858 del_2 (GBPUSD.m,H1) Variante Semko: Checksumme = 668222; Elemente - 667065; Ausführungszeit = 5812 Mikrosekunden
2018.11.13 21:57:17.858 del_2 (GBPUSD.m,H1) Variante Pavlov: Prüfsumme = 1001157; Elemente - 667065; Ausführungszeit = 0 Mikrosekunden
2018.11.13 21:57:17.858 del_2 (GBPUSD.m,H1) Variante Nikitin: Prüfsumme = 668222; Elemente - 667065; Ausführungszeit = 4749 Mikrosekunden
2018.11.13 21:57:17.868 del_2 (GBPUSD.m,H1) Variante Vladimir: Checksumme = 668222; Elemente - 667065; Ausführungszeit = 9814 Mikrosekunden
Pawlow ist wieder abgestürzt.
Meine Schlussfolgerung zur Beschleunigung von for-Schleifen ist für MQL-Sprachen wahrscheinlich falsch.
Und die Erstellung eines zusätzlichen Arrays sollte die Dauer der Transaktion selbst verkürzen, indem die überflüssigen Arrays entfernt werden und das Array bis zum notwendigen Zeitpunkt seines Starts unverändert bleibt. Bislang war hier noch nicht die Rede von Datenerhalt.
Was ist mit Peter? Hat er alle "aufgerissen"? Niemand hat seinen Code in den Checker eingegeben. Ich frage mich, wie und in welchem Ausmaß er alle im Vorstand umgehauen hat.
Aber es ist mir gelungen, Peters Version in die Finger zu bekommen.
Es ist recht kompakt und funktioniert sogar richtig. Großes Lob an Pjotr.
Aber in Bezug auf die Geschwindigkeit ist er der zweitbeste von allen. Oder der erste Platz vom Ende her, wenn man die originale, völlig geschwindigkeitstechnisch ungeeignete Version des Besitzers dieses Threads nicht mitzählt.
:-) wenn man nicht versucht, die Reihenfolge einzuhalten, ist die Zeit O(1) , die Gesamtzahl der Schritte aller Schleifen= Arraygröße
zu faul zum Programmieren :-)
1. suchen Sie die ersten 3 von links nach rechts.
2. wenn gefunden, dann von rechts nach links nach einer Nicht-Drei suchen, diese an die Stelle der 3 kopieren.
fortfahren, bis sich 1,2 überschnitten haben, das Feld um die Anzahl der Kopien kürzen.
Im Idealfall ist es genau 1/2 der"Blasensortierung" :-), wenn man statt zu kopieren einen Tausch vornimmt, ist die Ausgabe ein teilweise geordnetes Feld (alle 3 Drittel nach rechts verschoben)
Mehr Raffinesse:
Tut mir leid, man sagt, Sie seien ein guter Vermarkter, aber ein Programmierer... noch schlimmer als ich.
1. Die interne Integer-Variable ist nicht initialisiert, so dass sie Null sein wird, was aber nicht garantiert ist. In der Schleife wird die Rückwärtsverschiebung (beim ersten Mal) aus zwei Gründen gleichzeitig nicht stattfinden - raten Sie mal, aus welchem.
2. (am wichtigsten) Sie verschieben zuerst die Array-Elemente, dann erhöhen Sie den Wert der gelöschten Variablen, und dann gibt es eine Schleife, und die nächste Verschiebung wird eine mehr als notwendig geschehen. Mit anderen Worten: Ihr Code wird das ursprüngliche Array durcheinander bringen.
Es gibt keine zusätzlichen Elemente im Array:
Das Array enthält alle unnötigen Elemente:
Tut mir leid, man sagt, Sie seien ein guter Vermarkter, aber ein Programmierer... noch schlimmer als ich.
Alexej, du bringst ein junges Talent um...
dieser Vermarkter ist seit 5 Jahren nicht in der Lage, mit dem Verkauf zu beginnen... und Sie sagen, er sei ein noch schlechterer Programmierer :-)