Discussion de l'article "Les bases de la programmation MQL5 : Listes"

 

Un nouvel article Les bases de la programmation MQL5 : Listes a été publié :

La nouvelle version du langage de programmation pour le développement de stratégies de trading, MQL [MQL5], offre des fonctionnalités plus puissantes et efficaces par rapport à la version précédente [MQL4]. L'avantage réside essentiellement dans les fonctionnalités de programmation orientée objet. Cet article examine la possibilité d'utiliser des types de données personnalisés complexes, tels que des nœuds et des listes. Il fournit également un exemple d'utilisation des listes dans la programmation pratique en MQL5.

Les listes vous permettent de stocker des nœuds, au lieu d'éléments. Le nœud est un type de données composé de deux parties.

La première partie est un champ de données et la seconde partie est utilisée pour les liens avec d'autres nœuds (Fig. 1). Le premier nœud de la liste est appelé « tête » et le dernier nœud de la liste est appelé « queue ». Le champ de lien de queue contient une référence NULL. Il est essentiellement utilisé pour indiquer le manque de nœuds supplémentaires dans la liste. D'autres sources spécialisées se réfèrent au reste de la liste après la tête comme « queue ».

Fig. 1 Nœuds dans une liste à chaînage simple

Fig. 1 Nœuds dans une liste à chaînage simple

Outre les nœuds de liste à chaînage simple, il existe d'autres types de nœuds. Un nœud dans une liste à double chaînage est peut-être le plus courant.

Auteur : Denis Kirichenko

 

Merci à l'auteur pour cet excellent article !

 
Кроме узла для односвязного списка есть ещё другие. Пожалуй, самым популярным является узел для двусвязного списка.

il y a d'autres qui-quoi ? sorte d'idée incomplète.

Ainsi, les capacités d'un nœud pour une liste doublement liée seront similaires à celles d'un nœud simplement lié, sauf qu'il faut toujours traiter un pointeur sur le nœud précédent.

Est-il nécessaire de traiter un pointeur sur le nœud précédent pour avoir les capacités d'un nœud à lien unique ? L'auteur a compris ce qu'il voulait dire, mais la formulation elle-même n'est pas très bonne.....

Fig.3 Nœuds d'une liste en anneau bilinkée

1) le pointeur le plus haut - la flèche est un peu tordue

2) Je me rends compte qu'il s'agit peut-être du style des articles, mais la description de la figure est en très petits caractères et plutôt sombre (opinion personnelle d'une mauvaise vue).

Nous aurons également besoin d'un tel noeud qui répondra aux besoins d'une liste doublement liée. Il diffère de la formeprécédente en ce qu'il contient un autre pointeur qui fait référence au noeudprécédent. Et naturellement, un tel noeud de l'élément de tête de la liste sera égal à NULL.

1) À partir de laforme précédente - à partir de quoi ? de combien ? Pourquoi devrais-je chercher que par précédent l'auteur veut dire "Node for a single-linked list", ou peut-être que je me trompe.

2) "lenœud de l' élément de tête de la liste sera égal à NULL". Nœud ou pointeur ?Peut-être qu'au vu de la déclaration précédente "Vous pouvez stocker des nœuds, et non des éléments, dans une liste", il serait plus correct de dire :

"l'un des pointeurs du nœud de tête d'une liste doublement liéesera égal à NULL" .

Mais dans le nœud de queue, le lien vers le nœud suivant ne sera pas vide, car il sera rempli par le pointeur de tête.

1) il n'y aura pas de référence - il n'y aura pas de qui-quoi ? ??? les cas ne se présentent pas

2) Mais dans le nœud de queue, il n'y aura pas de référence au prochain nœud vide (qui-quoi ? ???). réflexion inachevée

3) Elle (la référence) sera remplie par un index. Le lien sera-t-il rempli par le pointeur, ou le pointeur aura-t-il encore une référence quelque part ? ???.

Quant aux opérations de suppression, elles reproduisent presque les opérations similaires du groupe d'ajout:

  • supprimer le nœud de tête ;
  • supprimer le nœud de queue ;
  • supprimer un nœud de la place spécifiée dans la liste ;
  • destructeur.

1) elles reproduisent pratiquement les opérations similaires (who-what ????) du groupe add. again an incomplete thought

2) Supprimer un nœud d'un emplacement spécifié dans la liste n'est-il pas un cas général de "supprimer le nœud de tête" et "supprimer le nœud de queue" ? ?? de la même manière pour add

3)"En ce qui concerne les opérations de suppression", et avant cela, c'était "Les éléments suivants peuvent être considérés comme des méthodes d'ajout :" (ici les méthodes, ici les opérations - je veux le même format).

Il s'agit donc d'une opinion personnelle sur la partie introductive de la part d'une personne ignorante, pour laquelle ces parties introductives de l'article sont créées.

 
J'ai bien aimé. Je vous remercie. C'est bien quand, après l'avoir lu, on a des idées que l'on peut appliquer chez soi. )
 
tol64:
J'ai bien aimé. Je vous remercie. C'est bien quand, après l'avoir lu, on a des idées que l'on peut appliquer chez soi. )
tol64, merci pour cet avis autorisé :-)
 
2ALXIMIKS: vous n'avez pas encore lu la littérature de programmation... En général, de votre côté, il s'agit d'un harcèlement....
 
denkir:
tol64, merci pour l'avis d'un expert qui fait autorité :-)
Je ne me considère pas comme un spécialiste et je ne me considère pas non plus comme une autorité. Et ce n'est pas par modestie, c'est vraiment le cas. ))) Il y a ici des programmeurs qui sont bien plus expérimentés en programmation, en mathématiques et en trading. Et je dois encore nager et nager. )))
 
tol64:
Je ne me considère pas comme un expert et je ne me considère pas non plus comme une autorité. Et ce n'est pas par modestie, c'est vraiment le cas. ))) Il y a ici des programmeurs qui sont bien plus expérimentés en programmation, en mathématiques et en trading. Et je dois encore nager et nager. )))

Je pense que l 'autorité est une chose subjective. C'est comme la reconnaissance de la souveraineté d'un pays par un autre pays....

Citation :

L'autorité consiste en la reconnaissance par le sujet (porteur) de réalisations exceptionnelles, de connaissances, de compétences, d'aptitudes, de sa position particulière dans la société...

Donc, la vôtre est reconnue par moi :-)

tol64, nous attendons vos nouveaux articles.

Авторитет — Википедия
  • ru.wikipedia.org
Авторитет (нем.  , от лат.   — «власть, влияние») — в общем смысле: значение и основанная на значении или с ним соединённая власть; в узком — влияние умственное, побуждающее уважение, доставляемое обладанием превосходной и признанной власти или выдающейся и признанной мудрости, знания, добродетели. Влияние индивида, основанное на занимаемом им...
 
Dans le bloc suivant (exemple 4), je propose de prêter attention à l'un des principaux inconvénients d'un conteneur de données tel qu'une liste, à savoir la vitesse d'accès aux éléments. Le fait est que l'accès aux éléments de la liste est linéaire, а в случае со списочным классом CList - бинарно, что немного уменьшает трудоёмкость алгоритма.
La recherche linéaire a une intensité de travail de la forme O(N), et la recherche binaire de la forme log2(N).
Avec la recherche linéaire, l'intensité du travail est de l'ordre de O(N), et avec la recherche binaire - log2(N).

Voici un tel code pour un exemple d'accès aux éléments de l'ensemble de données :


Où avez-vous trouvé un accès binaire aux éléments de CList avec une complexité log2(N) ?

CList est une liste, et l'accès binaire avec une complexité log2(N) nécessite un saut momentané vers un nœud avec l'index CurrentIndex +/- (CurrentIndex/2), où CurrentIndex est le nœud actuel dans la liste.

L'implémentation de CList utilise la fonction standard QuickSearch() qui, dans le cas du tri, recherche effectivement un élément en se référant au nœud CurrentIndex +/- (CurrentIndex/2). Cependant, ce nœud est lui-même recherché par la fonction GetNodeAtIndex(), et il n'y a pas de miracle. Toute la complexité de l'opération d'accès repose sur elle, et plus précisément sur ces chaînes de caractères :

if(revers)
     {
      //--- recherche de droite à gauche
      for(;i>index;i--)
        {
         result=result.Prev();
         if(result==NULL)
            return(NULL);
        }
     }
   else
     {
      //--- recherche de gauche à droite
      for(;i<index;i++)
        {
         result=result.Next();
         if(result==NULL)
            return(NULL);
        }
     }

En les regardant, il devient clair que la complexité de la recherche d'un élément est O(N/2) dans la limite, parce que la liste est bidirectionnelle, donc l'accès à un élément à partir d'une des extrémités ne dépassera pas N/2 transitions. L'auteur serait bien avisé de comprendre l'algorithme plus en profondeur avant d'écrire un article à son sujet.

D'après ma propre expérience, je peux dire qu'étant donné que le travail avec des données est presque toujours lié à la recherche et au tri de celles-ci, il est presque toujours inefficace d'utiliser la CList classique pour des tâches réelles. La liste est d'abord forte dans les collections combinées, où l'accès par index est combiné avec l'accès par liste.

Pour une raison quelconque, peu de gens pensent au fait qu'une transition par pointeur est beaucoup, beaucoup plus lente que l'adressage direct par index. Passer par result.Next() un millier de fois est beaucoup plus lent que de passer par l'index un millier de fois dans for.

 
denkir:

Un coma.

En commençant par les images. Le pointeur va au nœud, pas aux données, les données ne sont qu'une partie du nœud, c'est-à-dire qu'il y a un conflit avec la mise en œuvre et une confusion potentielle.

Le texte est en grande partie normal, pour être juste.

En ce qui concerne la mise en œuvre. De telles choses sont mises en œuvre par des modèles. La variante optimale de représentation des conteneurs dans STL, bien qu'ici avec des itérateurs et des foncteurs, est un échec, bien que vous puissiez probablement penser à quelque chose.

En conséquence, vos méthodes virtuelles vides ne sont pas seulement incompréhensibles, mais tout simplement vryviglaz. Le tri des feuilles de ) a porté ses fruits. L'implémentation et même la déclaration de certaines méthodes sont discutables et laissent même perplexe.

Encapsulation nulle.

Révélations sur la complexité et la recherche binaire( !) à la fin de la liste( ! gg).

En conséquence, nous avons une merde actuelle juste TOUT incompréhensible et incommode, pas utilisable même comme un exemple pour l'apprentissage (imho).

Sans vouloir vous offenser, si vous voulez devenir programmeur, apprenez à programmer NORMALEMENT. Vous serez en mesure de le mettre en œuvre beaucoup mieux.

C-4:

En les regardant, il est immédiatement clair que la complexité de trouver un élément est dans la limite O(N/2), parce que la liste est bidirectionnelle, donc accéder à un élément à partir d'une extrémité ne dépassera pas N/2 transitions. L'auteur ferait bien de comprendre l'algorithme plus en profondeur avant d'écrire un article à son sujet.

Vous feriez également bien de vous rafraîchir la mémoire, ce qui est O, écrit ci-dessus est d'abord incorrectement calculé, et ensuite incorrectement écrit.

_____________________________________

Le plus intéressant, c'est que cet article est loin d'être le plus mauvais.

 
TheXpert:

...

Sans vouloir vous vexer ) vous voulez être programmeur apprenez à programmer NORMALEMENT. Vous vous en rendrez beaucoup mieux compte.

Vous feriez bien aussi de vous rafraîchir la mémoire, ce qui est O, écrit ci-dessus est premièrement mal calculé, deuxièmement mal écrit.

...

Je vous souhaite la même chose. Cherchez et vous vous retrouverez dans une cohorte d'élus)).