Optimisation des algorithmes. - page 3

 
joo:

La largeur des secteurs ne peut pas correspondre aux valeurs du tableau, sinon l'algorithme ne fonctionnera pas pour tous les nombres.

Ce qui compte, c'est la distance qui sépare les chiffres. Plus tous les chiffres sont éloignés du premier, moins ils ont de chances de tomber. En substance, nous reportons sur une ligne droite des barres proportionnelles à la distance entre les numéros, ajustées par un facteur de 0,01, de sorte que le dernier numéro dont la probabilité de tomber n'était pas égale à 0 comme le plus éloigné du premier. Plus le coefficient est élevé, plus les secteurs sont égaux. Le fichier excel est joint, faites-en l'expérience.

1. Le calcul des probabilités théoriques est donné dans l'excel. Le premier chiffre est la probabilité la plus élevée, le dernier chiffre est la probabilité la plus faible mais n'est pas égal à 0.

2) Les tailles négatives des secteurs ne se produisent jamais pour aucun ensemble de nombres, à condition que l'ensemble soit trié par ordre décroissant - le premier nombre est le plus grand (cela fonctionnera avec le plus grand de l'ensemble mais un nombre négatif).

Je ne comprends pas, mais j'aime déjà votre approche de la théorie des probabilités, exprimée en une phrase clé : "La distance à laquelle les nombres sont compris est importante. Plus tous les nombres sont éloignés du premier, moins ils ont de chances de tomber..." et deuxième prise (coup de contrôle) : "Suggérez-vous de choisir un élément du tableau au hasard ? - Il ne prend pas en compte les distances entre les nombres du tableau, donc votre méthode est inutile". Question légitime : le lavage de cerveau est-il un exercice obligatoire pour affiner la logique d'écriture de programmes ? Je ferais mieux de rester un codeur dilettante, c'est mieux pour ma santé.

Et si vous êtes bon en théorie des probabilités, alors la logique de la roulette - un générateur de nombres aléatoires dans la fourchette de 0 à 36 (si la roulette est conventionnelle, européenne, sans le double zéro à l'américaine, etc...).

 
Wangelys:

Je ne comprends pas, mais j'aime déjà votre approche de la théorie des probabilités, exprimée dans la phrase clé : "La distance entre les chiffres compte". Plus tous les chiffres sont éloignés du premier, moins ils ont de chances de tomber..." et deuxième prise (coup de contrôle) : "Vous proposez de choisir un élément du tableau au hasard ? - Il ne prend pas en compte les distances entre les nombres du tableau, donc votre méthode est inutile". Question légitime : le lavage de cerveau est-il un exercice obligatoire pour affiner la logique d'écriture de programmes ? Je pense qu'il vaut mieux que je reste un codeur dilettante, c'est mieux pour ma santé.

Et si vous êtes bon en théorie des probabilités, la logique de la roulette - un générateur de nombres aléatoires dans une fourchette de 0 à 36 (si la roulette européenne normale, sans le double zéro à l'américaine, etc...).

En fait, la roulette de casino n'est rien d'autre qu'une métaphore, dans laquelle au moins trois personnes dans ce fil de discussion sont déjà tombées.

 
joo:

En fait, la roulette de casino n'est rien d'autre qu'une métaphore dans laquelle au moins trois personnes dans ce fil de discussion se sont déjà laissées prendre.

- Oui, oui, j'ai compris ! Le langage d'Esope !

- Je suis désolé, d'où ça vient ?

 
Wangelys:

- Oui, oui, j'ai compris ! Le langage d'Esope !

- Je suis désolé, je n'ai pas compris, d'où ça venait ?

Robert Sheckley ?
 
joo:

La largeur des secteurs ne peut pas correspondre aux valeurs du tableau, sinon l'algorithme ne fonctionnera pas pour tous les nombres.

Ce qui compte, c'est la distance qui sépare les chiffres. Plus tous les chiffres sont éloignés du premier, moins ils ont de chances de tomber. En substance, nous reportons sur une ligne droite des barres proportionnelles à la distance entre les numéros, ajustées par un facteur de 0,01, de sorte que le dernier numéro dont la probabilité de tomber n'était pas égale à 0 comme le plus éloigné du premier. Plus le coefficient est élevé, plus les secteurs sont égaux. Le fichier excel est joint, faites-en l'expérience.

1. Le calcul des probabilités théoriques est donné dans l'excel. Le premier chiffre est la probabilité la plus élevée, le dernier chiffre est la probabilité la plus faible mais n'est pas égal à 0.

2) Les tailles de secteur négatives ne se produisent jamais pour n'importe quel ensemble de nombres, tant que l'ensemble est trié par ordre décroissant - le premier nombre est le plus grand (cela fonctionnera avec le plus grand de l'ensemble mais aussi avec un nombre négatif).

Cette affirmation n'est pas correcte, à mon avis.

имеем массив
 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], 
вероятность выпадения не изменилась, 
т.к. она измеряется относительно среднего рассчитанного по всему массиву.

 

Deuxièmement, le calcul du tableau de probabilité avec[] est nécessaire une fois par époque, nous devrions donc diviser la fonction en RoletteEpoh() et RoletteRand().

bien que Joo l'ait mentionné au début.

mais vous pouvez obtenir l'accélération elle-même en recherchant simplement la valeur abandonnée dans le tableau c[].

Vous pouvez utiliser la biblio standard, à savoir les méthodes de recherche rapide.

Et vous feriez mieux de prendre ses méthodes retravaillées dans l'article Tableaux de calcul dans MQL5

Si vous souhaitez effectuer une recherche rapide dans des tableaux triés contenant des valeurs non listées, utilisez la méthode de recherche en majuscules au lieu de la méthode standard (je peux me tromper, cela fait longtemps que je n'ai pas examiné la méthode standard).

 
joo:
Robert Shackley ?
Non, un peu plus simple - Privoz à Odessa, bien que j'aime aussi Shackley (presque orthographié shekels). Mais votre métaphore suivante a "touché" tous les participants de cette branche :
joo:
Je propose que nous discutions ici des problèmes de construction de la logique optimale des algorithmes.
-parce que ce qui se passe ici ne relève guère de la formulation du problème de la "construction optimale de la logique des algorithmes" - il s'agit plutôt de perfectionner les méthodes et techniques de codage... ou ai-je tort ?
 
Wangelys:
Problèmes de "construction optimale de la logique des algorithmes" - il s'agit plutôt d'améliorer les méthodes et techniques de codage... ou ai-je tort ?

Un fil de discussion de nature générale :

"Si quelqu'un doute que son algorithme a une logique optimale en termes de vitesse (ou de clarté), il est le bienvenu."

Et ma tâche spécifique était "...veuillez suggérer une variante plus rapide...". Plus vite ! Je ne demande pas si mon algorithme est bon ou mauvais, dans ce cas j'ai juste besoin d'être plus rapide, c'est-à-dire que si quelqu'un propose une autre variante de l'algorithme, elle doit produire des résultats exactement comme le mien et aucun autre. Et pour une raison quelconque, chacun a commencé à penser à son propre truc.


OK, ma tâche d'accélération a été résolue. :)

 
Wangelys:

- Oui, oui, j'ai compris ! Le langage d'Esope !

- Je suis désolé, je n'ai pas compris, d'où ça venait ?

Ça vient des algorithmes génétiques.
Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 
Maintenant, j'ai un problème. J'ai besoin de faire un tri efficace de tableaux avec un grand "coût" de copie d'éléments (c'est-à-dire des éléments dont les structures sont volumineuses, "lourdes", des objets de classe, de longues chaînes de caractères, etc. Le bon sens suggère que nous devrions les laisser en place, mais trier à la place par des sortes de pointeurs - des indices de cellule de leur emplacement d'origine. Voici une citation d'ici :https://www.mql5.com/ru/forum/6476#comment_178318
Если прямо тут перевести в подобие "техзадания", то нужна функция, на вход берущая массив и возвращающая 
второй массив (int), элементы которого являются индексами элементов входного массива, расположенными 
по убыванию (возрастанию).

В идеальном случае сделать перегрузки для всех стандартных типов + CObject (при обязательном требовании
к реализации функции Compare() у наследников CObject).  Хотелось бы и для структур, но похоже на стороне
разработчика никак не решаемо - виртуальных функций у структур нет (и не надо!), т.е. юзерскую функцию
Compare() не пришить, а "стандартное" отношение порядка для структур, естественно, не определено.  
Laissons pour l'instant les respectés développeurs de terminaux à leurs nombreuses tâches en cours, et implémentons-le sur mql5.