Discussione sull’articolo "Forum sulla programmazione MQL5 Liste"

 

Il nuovo articolo Forum sulla programmazione MQL5 Liste è stato pubblicato:

La nuova versione del linguaggio MQL ha fornito agli sviluppatori di sistemi di trading automatizzato strumenti efficaci per l'implementazione di attività complesse. Non si può negare il fatto che le funzionalità di programmazione del linguaggio siano state notevolmente ampliate. Anche solo le caratteristiche OOP di MQL5 valgono molto. Da non sottovalutare è l’importanza della Standard Library. A giudicare dal codice di errore 359, i modelli di classe saranno presto supportati.

In questo articolo, vorrei parlare di quella che potrebbe essere in qualche modo un'espansione o una continuazione degli argomenti che descrivono i tipi di dati e i loro insiemi. Vorrei qui fare riferimento ad un articolo pubblicato sul sito MQL5.community. Una descrizione completa molto dettagliata dei principi e della logica del lavoro con gli array è stata fornita da Dmitry Fedoseev (Integer) nel suo articolo "MQL5 Programming Basics: Arrays".

Fig. 1 Nodi in una lista collegata singolarmente


Autore: Denis Kirichenko

 

Grazie all'autore per l'ottimo articolo!

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

ci sono altri"chi"? È un'idea un po' incompleta.

Quindi, le capacità di un nodo per un elenco a doppio collegamento saranno simili a quelle di un nodo a collegamento singolo, tranne per il fatto che è ancora necessario gestire un puntatore al nodo precedente.

È necessario elaborare un puntatore al nodo precedente per avere le capacità di un nodo a collegamento singolo? L'autore ha colto il punto che voleva trasmettere, ma la formulazione non è molto buona.....

Fig.3 Nodi di un elenco bilinkato ad anello

1) il puntatore più in alto - la freccia è un po' storta

2) Mi rendo conto che questo può essere lo stile dell'articolo, ma la descrizione della figura è scritta con caratteri molto piccoli e piuttosto fioca (opinione personale di scarsa vista).

Avremo anche bisogno di un nodo di questo tipo, che servirà alle esigenze di una lista doppiamente collegata. Si differenzia dalla formaprecedente in quanto contiene un altro puntatore che fa riferimento al nodoprecedente. E naturalmente, tale nodo dell'elemento di testa della lista sarà uguale a NULL.

1) Dallaforma precedente- da cosa? Quanto precedente? Perché dovrei cercare che per precedente l'autore intenda "Nodo per un elenco a collegamento singolo", o forse mi sbaglio.

2) "ilnodo dell'elemento di testa dell'elenco sarà uguale a NULL". Nodo o puntatore?Forse, vista l'affermazione precedente "Inuna lista si possono memorizzare nodi, non elementi", sarebbe più corretto dire:

"uno dei puntatori del nodo di testa diun elenco doppiamente collegatosarà uguale a NULL" .

Ma nel nodo di coda, il collegamento al nodo successivo non sarà vuoto, perché sarà riempito con il puntatore di testa.

1) non ci sarà alcun riferimento - non ci sarà chi-che ???? i casi non reggono

2) Ma nel nodo di coda non ci sarà alcun riferimento al prossimo nodo vuoto (chi-che ????). pensiero incompiuto

3) Il riferimento sarà riempito con un indice. Il collegamento sarà riempito dal puntatore o il puntatore avrà ancora un riferimento da qualche parte ????.

Per quanto riguarda le operazioni di cancellazione, esse sono quasi un doppione di quelle simili del gruppo add:

  • eliminare il nodo di testa;
  • eliminare il nodo di coda;
  • rimuovere un nodo dalla posizione specificata nell'elenco;
  • distruttore.

1) praticamente duplicano quelle simili (chi-cosa????) del gruppo add. Ancora una volta un pensiero incompleto

2) cancellare un nodo da una posizione specificata in una lista non è un caso generale di "cancellare il nodo di testa" e "cancellare il nodo di coda"??? analogamente per add

3)"Per quanto riguarda le operazioni di cancellazione", e prima era "I seguenti possono essere considerati come metodi di aggiunta:" (lì metodi, qui operazioni - voglio lo stesso formato).

Questa è quindi un'opinione personale sulla parte introduttiva da parte di una persona ignorante, per la quale sono state create queste parti introduttive dell'articolo.

 
Mi è piaciuto. Grazie. È bello quando, dopo averlo letto, ti vengono delle idee che puoi applicare a casa tua. )
 
tol64:
Mi è piaciuto. Grazie. È bello quando, dopo averlo letto, ti vengono delle idee che puoi applicare a casa tua. )
tol64, grazie per l'autorevole parere :-)
 
2ALXIMIKS: non hai ancora letto la letteratura di programmazione... In generale, da parte tua è assillante....
 
denkir:
tol64, grazie per il parere di un esperto autorevole :-)
Non mi considero uno specialista e nemmeno un'autorità. E non è per modestia, ma è proprio così. ))) Qui ci sono programmatori che hanno molta più esperienza nella programmazione, nella matematica e nel trading. E io devo ancora nuotare e nuotare. )))
 
tol64:
Non mi considero un esperto e nemmeno un'autorità. E non è per modestia, davvero. ))) Qui ci sono programmatori che hanno molta più esperienza nella programmazione, nella matematica e nel trading. E io devo ancora nuotare e nuotare. )))

Penso che l 'autorità sia una cosa soggettiva. È come il riconoscimento della sovranità di un paese da parte di un altro paese....

Citazione:

L'autorità consiste nel riconoscimento da parte del soggetto (portatore) di risultati eccezionali, conoscenze, abilità, capacità, la sua posizione speciale nella società...

Quindi, la tua è riconosciuta da me :-)

tol64, aspettiamo i tuoi nuovi articoli.

Авторитет — Википедия
  • ru.wikipedia.org
Авторитет (нем.  , от лат.   — «власть, влияние») — в общем смысле: значение и основанная на значении или с ним соединённая власть; в узком — влияние умственное, побуждающее уважение, доставляемое обладанием превосходной и признанной власти или выдающейся и признанной мудрости, знания, добродетели. Влияние индивида, основанное на занимаемом им...
 
Nel blocco successivo (Esempio 4) suggerisco di prestare attenzione a uno dei principali svantaggi di un contenitore di dati come un elenco: la velocità di accesso agli elementi. Il punto è che l'accesso agli elementi dell'elenco è lineare, а в случае со списочным классом CList - бинарно, что немного уменьшает трудоёмкость алгоритма.
Con la ricerca lineare abbiamo un'intensità di lavoro della forma O(N), e con la ricerca binaria - log2(N).
Con la ricerca lineare abbiamo un'intensità di lavoro della forma O(N), e con quella binaria - log2(N).

Ecco un codice di questo tipo per un esempio di accesso agli elementi dell'insieme di dati:


Dove avete trovato l'accesso binario agli elementi di CList con complessità log2(N)?

CList è un elenco e l'accesso binario con complessità log2(N) richiede un salto momentaneo a un nodo con indice CurrentIndex +/- (CurrentIndex/2), dove CurrentIndex è il nodo corrente dell'elenco.

L'implementazione di CList utilizza il QuickSearch() standard, che nel caso dell'ordinamento cerca effettivamente un elemento facendo riferimento al nodo CurrentIndex +/- (CurrentIndex/2). Tuttavia, questo stesso nodo viene cercato dalla funzione GetNodeAtIndex(), che non fa miracoli. L'intera complessità dell'operazione di accesso ricade su di essa, in particolare su queste stringhe:

if(revers)
     {
      //--- ricerca da destra a sinistra
      for(;i>index;i--)
        {
         result=result.Prev();
         if(result==NULL)
            return(NULL);
        }
     }
   else
     {
      //--- ricerca da sinistra a destra
      for(;i<index;i++)
        {
         result=result.Next();
         if(result==NULL)
            return(NULL);
        }
     }

Osservandole, appare chiaro che la complessità della ricerca di un elemento è O(N/2) nel limite, perché l'elenco è bidirezionale, quindi l'accesso a un elemento da una delle estremità non supererà N/2 transizioni. L'autore farebbe bene a comprendere meglio l'algoritmo prima di scrivere un articolo su di esso.

In base alla mia esperienza personale, posso dire che, poiché lavorare con i dati è quasi sempre legato alla ricerca e all'ordinamento, è quasi sempre inefficiente usare la classica CList per compiti reali. La lista è forte innanzitutto nelle collezioni combinate, dove l'accesso per indice è combinato con l'accesso per lista.

Per qualche motivo, pochi pensano al fatto che la transizione di un puntatore è molto, molto più lenta dell'indirizzamento diretto per indice. Passare mille volte attraverso result.Next() è molto più lento che passare mille volte attraverso l'indice in for.

 
denkir:

Un coma.

A partire dalle immagini. Il puntatore va al nodo, non ai dati, i dati sono solo una parte del nodo, cioè c'è un conflitto con l'implementazione e una potenziale confusione.

Il testo è per lo più normale, a dire il vero.

Sull'implementazione. Queste cose sono implementate da modelli. La variante ottimale di rappresentazione dei contenitori in STL, anche se qui con iteratori e funtori è un fallimento, anche se probabilmente si può pensare a qualcosa.

Di conseguenza, i vostri metodi virtuali vuoti sembrano non solo incomprensibili, ma anche vryviglaz. L'ordinamento del foglio ) ha dato i suoi frutti. L'implementazione e persino la dichiarazione di alcuni metodi sono discutibili e lasciano perplessi.

Zero incapsulamento.

Rivelazioni sulla complessità e sulla ricerca binaria(!) alla lista(! gg) finita.

Come risultato, abbiamo un'attuale schifezza incomprensibile e scomoda, non utilizzabile nemmeno come esempio per l'apprendimento (imho).

Senza offesa) se vuoi diventare un programmatore impara a programmare NORMALMENTE. Sarete in grado di implementarlo molto meglio.

C-4:

Guardandoli, è subito chiaro che la complessità di trovare un elemento è nel limite O(N/2), perché la lista è bidirezionale, quindi l'accesso a un elemento da un'estremità non supererà N/2 transizioni. L'autore farebbe bene a comprendere meglio l'algoritmo prima di scrivere un articolo su di esso.

Anche voi fareste bene a rinfrescarvi la memoria: ciò che è O, scritto sopra, è innanzitutto calcolato in modo errato, e in secondo luogo scritto in modo errato.

_____________________________________

La cosa più interessante è che questo è tutt'altro che il peggior articolo sulle risorse.

 
TheXpert:

...

Senza offesa ) se vuoi diventare un programmatore impara a programmare NORMALMENTE. Potrai rendertene conto molto meglio.

Faresti anche bene a rinfrescarti la memoria, quello che è O, scritto sopra è prima di tutto calcolato in modo errato, in secondo luogo scritto in modo errato.

...

Vi auguro di fare lo stesso. Guardate e vi ritroverete in una coorte di prescelti)).