Optimierung von Algorithmen. - Seite 3

 
joo:

Die Breite der Sektoren darf nicht mit den Werten im Array übereinstimmen, sonst funktioniert der Algorithmus nicht für alle Zahlen.

Es kommt darauf an, wie weit die Zahlen auseinander liegen. Je weiter alle Zahlen von der ersten entfernt sind, desto geringer ist die Wahrscheinlichkeit, dass sie herausfallen. Im Wesentlichen verschieben wir auf einer geraden Linie Bars proportional zum Abstand zwischen den Zahlen, um einen Faktor von 0,01 angepasst, so dass die letzte Zahl die Wahrscheinlichkeit des Herausfallens war nicht gleich 0 als die am weitesten von der ersten. Je höher der Koeffizient ist, desto gleicher sind die Sektoren. Die Excel-Datei ist beigefügt, experimentieren Sie damit.

1. Die Berechnung der theoretischen Wahrscheinlichkeiten ist in der Excel-Datei enthalten. Die erste Zahl ist die höchste Wahrscheinlichkeit, die letzte Zahl ist die niedrigste Wahrscheinlichkeit, aber nicht gleich 0.

2) Negative Sektorengrößen treten bei keiner Zahlenmenge auf, vorausgesetzt, die Menge ist absteigend sortiert - die erste Zahl ist die größte (es funktioniert auch mit der größten Zahl in der Menge, aber mit einer negativen Zahl).

Ich verstehe es nicht, aber mir gefällt schon Ihr Ansatz zur Wahrscheinlichkeitstheorie, der in einem Schlüsselsatz zum Ausdruck kommt: "Es ist wichtig, in welchem Abstand die Zahlen dazwischen liegen. Je weiter alle Zahlen von der ersten entfernt sind, desto unwahrscheinlicher ist es, dass sie herausfallen..." und Take 2 (Check Shot): "Schlägst du vor, einfach ein Element der Matrix zufällig auszuwählen? - Es berücksichtigt keine Abstände zwischen Array-Zahlen, also ist dein Weg nutzlos". Berechtigte Frage: Ist Gehirnwäsche eine Pflichtübung, um die Logik beim Schreiben von Programmen zu verfeinern? Ich bleibe lieber ein dilettantischer Programmierer, das ist besser für meine Gesundheit.

Und wenn Sie sich gut mit der Wahrscheinlichkeitstheorie auskennen, dann die Logik des Roulettes - ein Zufallszahlengenerator im Bereich von 0 bis 36 (wenn es sich um ein konventionelles, europäisches Roulette ohne die amerikanische Doppelnull handelt, usw.).

 
Wangelys:

Ich verstehe es nicht, aber mir gefällt schon Ihr Ansatz zur Wahrscheinlichkeitstheorie, der sich in dem Schlüsselsatz ausdrückt: "Der Abstand zwischen den Zahlen ist wichtig. Je weiter alle Zahlen von der ersten entfernt sind, desto unwahrscheinlicher ist es, dass sie herausfallen..." und Take zwei (Check Shot): "Du schlägst vor, einfach ein Element der Matrix zufällig auszuwählen? - Es berücksichtigt keine Abstände zwischen Array-Zahlen, also ist Ihr Weg nutzlos". Berechtigte Frage: Ist Gehirnwäsche eine Pflichtübung, um die Logik beim Schreiben von Programmen zu verfeinern? Ich glaube, ich bleibe lieber ein dilettantischer Programmierer, das ist besser für meine Gesundheit.

Und wenn Sie sich gut mit der Wahrscheinlichkeitstheorie auskennen, die Logik des Roulettes - ein Zufallszahlengenerator in einem Bereich von 0 bis 36 (wenn reguläres europäisches Roulette, ohne die Doppel-Null im amerikanischen Stil, etc.)

Eigentlich ist Casino-Roulette nichts weiter als eine Metapher, auf die bereits mindestens drei Personen in diesem Thread hereingefallen sind.

 
joo:

Eigentlich ist Casino-Roulette nichts weiter als eine Metapher, auf die schon mindestens drei Personen in diesem Thread hereingefallen sind.

- Ja, ja, ich hab's verstanden! Äsop-Sprache!

- Entschuldigung, woher kommt das?

 
Wangelys:

- Ja, ja, ich hab's verstanden! Äsopische Sprache!

- Tut mir leid, das habe ich nicht verstanden, woher kam das?

Robert Sheckley?
 
joo:

Die Breite der Sektoren darf nicht mit den Werten im Array übereinstimmen, sonst funktioniert der Algorithmus nicht für alle Zahlen.

Entscheidend ist, wie weit die Zahlen auseinander liegen. Je weiter alle Zahlen von der ersten entfernt sind, desto geringer ist die Wahrscheinlichkeit, dass sie herausfallen. Im Wesentlichen verschieben wir auf einer geraden Linie Bars proportional zum Abstand zwischen den Zahlen, um einen Faktor von 0,01 angepasst, so dass die letzte Zahl die Wahrscheinlichkeit des Herausfallens war nicht gleich 0 als die am weitesten von der ersten. Je höher der Koeffizient ist, desto gleicher sind die Sektoren. Die Excel-Datei ist beigefügt, experimentieren Sie damit.

1. Die Berechnung der theoretischen Wahrscheinlichkeiten ist in der Excel-Datei enthalten. Die erste Zahl ist die höchste Wahrscheinlichkeit, die letzte Zahl ist die niedrigste Wahrscheinlichkeit, aber nicht gleich 0.

2) Negative Sektorgrößen kommen bei keiner Zahlenmenge vor, solange die Menge absteigend sortiert ist - die erste Zahl ist die größte (funktioniert auch mit der größten Zahl der Menge, aber einer negativen Zahl).

Diese Aussage ist IMHO nicht korrekt.

имеем массив
 double a[10]={1,2,3,4,5,6,7,8,9,10};
какова вероятность выпадения каждого?
 55=1+2+3+4+5+6+7+8+9+10;
 double b[10]={1/55,2/55,3/55,4/55,5/55,6/55,7/55,8/55,9/55,10/55};
те вероятность выпадения [0] в 10 раз меньше чем [9].
теперь разметим массив где эти вероятности будут отображены
 double с[10]={1,3,6,10,15,21,28,36,45,55};
теперь при выпадении чисел от 1 до 55, если ранд55 <= c[x], то имеем нужный индекс.
для того чтоб работало и для отрицательных чисел нужно сдвинуть значения на 1-с[0].

теперь посмотрим изменяться ли вероятности при изменении чисел...
 double a[10]={2,4,6,8,10,12,14,16,18,20};
какова вероятность выпадения каждого?
 110=2+4+6+8+10+12+14+16+18+20;
 2/110==1/55
 double b[10]={1/55,2/55,3/55,4/55,5/55,6/55,7/55,8/55,9/55,10/55};
те вероятность выпадения [0] в 10 раз меньше чем [9], 
вероятность выпадения не изменилась, 
т.к. она измеряется относительно среднего рассчитанного по всему массиву.

 

Zweitens wird die Berechnung des Wahrscheinlichkeitsarrays mit[] einmal pro Epoche benötigt, so dass wir die Funktion in RoletteEpoh() und RoletteRand() aufteilen sollten.

Obwohl Joo es am Anfang erwähnt hat.

aber Sie können die Beschleunigung selbst erhalten, indem Sie einfach nach dem fallengelassenen Wert im c[]-Array suchen.

Sie können die Standardsuchmethoden von biblio verwenden, insbesondere die Schnellsuche.

Und Sie sollten besser seine überarbeiteten Methoden aus dem Artikel Spreadsheets in MQL5 nehmen

Wenn Sie eine schnelle Suche nach sortierten Arrays mit nicht-absteigenden Werten durchführen möchten, verwenden Sie den Standard mit aufsteigenden Werten (ich kann mich irren, es ist schon eine Weile her, seit ich in den Standard gestolpert bin).

 
joo:
Robert Shackley?
Nein, ein wenig einfacher - Privoz in Odessa, obwohl ich auch Shackley (fast buchstabiert shekels) liebe. Aber Ihre folgende Metapher hat alle Teilnehmer in dieser Branche "erwischt":
joo:
Ich schlage vor, dass wir hier die Probleme der Konstruktion optimaler Algorithmenlogik diskutieren
-weil das, was hier vor sich geht, kaum unter die Formulierung des Problems der "optimalen Konstruktion der Algorithmenlogik" fällt - es geht eher um die Verbesserung von Codierungsmethoden und -techniken... oder liege ich falsch?
 
Wangelys:
Probleme der "optimalen Konstruktion der Algorithmenlogik" - es geht eher um die Verbesserung von Kodierungsmethoden und -techniken... oder liege ich falsch?

Ein Thema von allgemeiner Natur:

"Wenn jemand bezweifelt, dass sein Algorithmus eine optimale Logik in Bezug auf Geschwindigkeit (oder Klarheit) hat, ist er willkommen."

Und meine Aufgabe lautete konkret: "...bitte schlagen Sie eine schnellere Variante vor...". Schneller! Ich frage nicht, ob mein Algorithmus richtig oder falsch ist, in diesem Fall brauche ich nur schneller, das heißt, wenn jemand eine andere Variante des Algorithmus vorschlägt, sollte sie genau wie meine Ergebnisse liefern und keine anderen. Und aus irgendeinem Grund fing jeder an, an sein eigenes Ding zu denken.


OK, meine Aufgabe , die Geschwindigkeit zu erhöhen, ist gelöst. :)

 
Wangelys:

- Ja, ja, ich hab's verstanden! Äsopische Sprache!

- Tut mir leid, das habe ich nicht verstanden, woher kam das?

Sie stammt von genetischen Algorithmen.
Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 
Jetzt habe ich ein Problem. Ich brauche, um eine effektive Sortierung von Arrays mit großen "Kosten" von Elementen Kopieren (dh Elemente, von denen sind sperrig, "schwere" Strukturen, Klasse Objekte, lange Strings, etc.). Der gesunde Menschenverstand legt nahe, dass wir sie an Ort und Stelle zu verlassen, sondern sortieren stattdessen durch eine Art von Zeigern - Indizes von Zellen ihrer ursprünglichen Position. Hier ist ein Zitat von hier :https://www.mql5.com/ru/forum/6476#comment_178318
Если прямо тут перевести в подобие "техзадания", то нужна функция, на вход берущая массив и возвращающая 
второй массив (int), элементы которого являются индексами элементов входного массива, расположенными 
по убыванию (возрастанию).

В идеальном случае сделать перегрузки для всех стандартных типов + CObject (при обязательном требовании
к реализации функции Compare() у наследников CObject).  Хотелось бы и для структур, но похоже на стороне
разработчика никак не решаемо - виртуальных функций у структур нет (и не надо!), т.е. юзерскую функцию
Compare() не пришить, а "стандартное" отношение порядка для структур, естественно, не определено.  
Lassen wir die geschätzten Terminalentwickler mit ihren zahlreichen aktuellen Aufgaben erst einmal in Ruhe und implementieren es auf mql5.