Bibliothèque de classes génériques - bogues, description, questions, caractéristiques d'utilisation et suggestions - page 17
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Un excellent exemple théorique ! En pratique, quelqu'un a-t-il déjà effectué des milliers de transactions ?
p.s. Je n'essaie pas de prouver que c'est de la merde et que personne n'en a besoin. J'essaie de comprendre la valeur pour le commerce réel. Je ne suis pas un théoricien en général, mais un pur praticien.
Décrire brièvement la mise en œuvre actuelle deCHashMap:
Tout d'abord, découvrons ce qu'estEntry<TKey,TValue>.
Essentiellement, il s'agit d'un nœud, comme dans CLinkedList, qui contient :
m_entries[] - tableau de "cellules" où la clé et la valeur ajoutées, le hash_code, le suivant sont placés. La taille du tableau correspond à la capacité.
m_count - indique l'indice de la première cellule inutilisée dans m_entries. La valeur initiale est 0, elle augmente jusqu'à la capacité, puis elle reconstruit toutes les matrices en augmentant la capacité et la taille de toutes les matrices.
m_buckets[] - tableau d'index sur m_entries[]. La valeur par défaut est -1. La taille du tableau correspond à la capacité.
Pas de collision, ajout d'une valeur unique au conteneurCHashMap :
Sans collisions, récupérer la valeur par clé dans le conteneurCHashMap:
Résolution des collisions :
Collision, obtenir la valeur par clé dans le conteneurCHashMap:
Suppression d'une valeur du conteneurCHashMap:
Reconstruction de la table de hachage (processus visant à augmenter la capacité) :
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Generic Class Library - bugs, description, questions, utilisation et suggestions
Sergey Dzyublik, 2017.12.09 01:12
Je me suis familiarisé avec l'implémentation deCHashMap
. Honnêtement, j'ai aimé.
Il y a plusieurs suggestions d'améliorations possibles :
1) À mon humble avis, l'implémentation contient une sélection de capacité pas tout à fait correcte - à la fois la taille initiale 3 et les suivantes lors de la reconstruction de la table de hachage.
Oui, il est exact qu'un nombre premier doit être choisi pour l'uniformité de la distribution.
Cependant, l'implémentation de CPrimeGenerator ne répond pas aux attentes et contient des omissions de nombres premiers.
L'objectif d'un tel "générateur" est clair : fournir un facteur d'incrémentation de l'ordre de 1,2 avec la génération automatique de nombres premiers.
Toutefois, ce coefficient n'est-il pas trop faible ? En C++ pour les vecteurs, le coefficient est généralement de 1,5 à 2,0, selon la bibliothèque (car il affecte fortement la complexité moyenne de l'opération).
La solution pourrait être un coefficient constant suivi d'un arrondi au nombre premier via une recherche binaire d'une liste de nombres premiers.
Et une taille initiale de 3 est trop petite, nous ne vivons pas au siècle dernier.
2) Actuellement, la table de hachage est reconstruite (Redimensionnement) uniquement lorsque la capacité est remplie à 100% (toutes les m_entries[] sont remplies).
De ce fait, il peut y avoir un nombre important de collisions pour les clés qui ne sont pas distribuées de manière très uniforme.
En option, envisagez d'introduire un facteur de remplissage qui réduit de 100% la limite nécessaire pour effectuer une reconstruction de la table de hachage.
En pratique, quelqu'un a-t-il déjà opéré sur des milliers de transactions ?
Oui, des millions d'appels d'histoire sur une passe sont pratiqués par beaucoup.
Sur les Forts tous les premiers.
C'est clair.
Envoyer des commandes par l'algorithme hft et les récupérer pour les analyser sont des choses différentes. Ces hachages ne sont pas nécessaires pour l'envoi, et ils ne sont pas non plus nécessaires pour l'analyse, car ils sont analysés d'une manière différente.
Donc, sans vouloir vous offenser. Vous avez également besoin de théorie.
C'est clair.
Envoyer des commandes par l'algorithme hft et les récupérer plus tard pour les analyser sont des choses différentes. Vous n'avez pas besoin de ces hachages pour l'envoi, et vous n'en avez pas besoin non plus pour l'analyse, car ce n'est pas ce qui est analysé.
Donc, sans vouloir vous offenser. Nous avons également besoin de théorie.
Je n'utilise pas de lave-vaisselle, j'utilise une éponge.
Sans vouloir vous offenser. Les lave-vaisselles sont nuls, à quoi ils servent.
C'est clair.
Envoyer des ordres par l'algorithme hft et les relever plus tard pour analyse sont des choses différentes. Vous n'avez pas besoin de ces hachages pour les soumettre et vous n'en avez pas besoin pour l'analyse puisque nous analysons autre chose par la suite.
Donc, sans vouloir vous offenser. Nous avons également besoin de théorie.
Quelles rancunes ? Continuez à écrire vos béquilles.
Brève description de l'implémentation actuelle deCHashMap
Merci, je vais l'utiliser lors de l'analyse du code source.
Quelles rancunes ? Continuez à écrire vos béquilles.
Merci, je l'utiliserai lors de l'analyse des sources.
Omission de la vérification de l'existence de la clé dans le conteneur lors de l'ajout d'une nouvelle paire clé-valeur, exécutée en premier.
Mais ce n'est pas important.
S'il vous plaît, réparez quelque chose comme ça dans tous les génériques.