Libreria di classi generiche - bug, descrizione, domande, caratteristiche d'uso e suggerimenti - pagina 2

 
Combinatore:
Tempo medio O(1) peggiore O(n) e le prestazioni sono fortemente dipendenti dall'hash.

O(n) - questo se si va testa a testa.

 
Vasiliy Sokolov:


Dal 6 dicembre 2017, il set di consegna standard di MetaTrader 5 include le cosiddette classi generiche, che implementano algoritmi efficienti per la memorizzazione e l'estrazione dei dati. Questo ramo è stato creato per descrivere queste classi, esempi di lavoro con loro e per suggerimenti su come migliorare il loro lavoro.

Cos'è il generico? Generic è una classe speciale di template che può memorizzare tipi di dati personalizzati. L'identificazione del tipo viene eseguita al momento della compilazione, e quindi si ottengono alte prestazioni.

Perché generico? Di solito i programmatori principianti hanno familiarità con un solo tipo di collezioni: un array. Ma ci sono molti compiti in cui lavorare con un array è inefficace. Immaginiamo di avere un array composto da un milione di identificatori unici, per esempio, mille ordini. Come controllare se c'è un ordine con il numero N in questo migliaio di ordini? Se usiamo una delle classi generiche, questo compito può essere eseguito quasi immediatamente, in un tempo costante, che non dipende dal numero di elementi che stiamo cercando. Ci sono altri problemi, dove l'algoritmo corretto dalla collezione generica può essere più veloce dell'algoritmo inventato dal programmatore.

È un tema interessante.

Personalmente, penso che non ci sia niente di più efficiente nella programmazione che organizzare i dati all'interno di array e lavorare correttamente con questi array nei cicli. Questa è la base delle basi. Tutte le altre soluzioni sono derivati, che occupano tempo aggiuntivo al computer e creano overhead.

Array globali, array locali, cicli e funzioni. Tutto.

Coloro che sono abili maestri di questi strumenti saranno più avanti di tutti gli altri nell'efficienza.

imho.

 
Ivan Gurov:

Suggerisco di semplificare i nomi, rendendoli più logici. Per esempio, CArrayList è un Array o una lista in mql5 un'implementazione di entrambi?

Tutto questo porta a domande e confusione. IMHO, dovremmo usare stl e non C# o Java. Oppure rimuovete la C davanti e lasciate che sia solo ArrayList.

...

Al contrario, mi piace molto usare C#.

 
fxsaber:

L'ho detto molto chiaramente.

Guardate cosa è evidenziato.

L'ho cercato. Tutto è scritto correttamente. La tua risposta è che ci vuole una media di O(1) per trovare un elemento nel dizionario, cioè istantaneo.
 
Vladimir Karputov:
Se potete dare degli esempi, per esempio di ricerca tra migliaia di offerte.

OK.

 
Tag Konow:

Questo è un argomento interessante.

Personalmente, penso che non ci sia niente di più efficace nella programmazione che sapere come organizzare correttamente i dati all'interno degli array e come lavorare correttamente con questi array nei cicli. Questa è la base delle basi. Tutte le altre soluzioni sono derivati, che occupano tempo aggiuntivo al computer e creano overhead.

Array globali, array locali, cicli e funzioni. Tutto.

Quei programmatori che riescono a padroneggiare questi strumenti in modo magistrale saranno più avanti di tutti gli altri in efficienza.

imho.

Peter, rallenta per favore. Questa è una discussione sulle nuove classi di SB, non sulle vostre dichiarazioni astratte. Per favore, non deviate l'argomento a lato. Grazie.

 
Artyom Trishkin:

Peter, per favore, rallenta. Questa è una discussione sulle nuove classi SB, non sulle tue affermazioni astratte. Per favore, non prendete l'argomento di traverso. Grazie.

Ho il diritto di esprimere la mia opinione? O è intollerabile per voi?
 
ReTeg Konow:
Ho diritto alla mia opinione? O è intollerabile per voi?
No. perché questa opinione è già stata espressa 100 volte e qui di nuovo con il tuo samovar come oop è il male ecc. hai sentito abbastanza di questa opinione, sei stufo.
 
Tag Konow:
Ho il diritto di esprimere la mia opinione? O è intollerabile per voi?

La sua opinione è di solito un trattato su Guerra e Pace in tre volumi. Quindi è meglio astenersi.

Nota - questa è una seconda richiesta di un moderatore.

 
fxsaber:

O(n) è per il testa a testa.

No. O(n) è dovuto a collisioni di hash in casi molto rari. Queste sono stime di complessità per l'algoritmo ottimale. Il numero di collisioni è legato all'overhead della memoria

Nel caso normale non c'è essenzialmente bisogno di cercare, perché calcolando l'hash si conosce essenzialmente già la posizione dell'elemento desiderato