Bibliothèque de classes génériques - bogues, description, questions, caractéristiques d'utilisation et suggestions - page 35
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Presque impossible et si vous en rencontrez un, l'accès reste super efficace.
La collision à tout niveau d'efficacité est mauvaise. Merci pour la réponse. Je garderai cela à l'esprit.
La collision à tout niveau d'efficacité est mauvaise. Merci de votre réponse. Je garderai cela à l'esprit.
Par définition, les hashmaps ne sont pas sans collision.
Question sur les collisions. Est-il possible d'entrer en collision dans un tel cas ?
Si 27 000 enregistrements ont été produits.
Vous obtiendrez constamment des collisions, surtout lorsque la collection s'agrandit (se redimensionne). Puisque le hachage est en plus tronqué au numéro de gang, et qu'il y en a toujours un nombre limité (idéalement égal à un).
Conclusions :
1. Ce n'est pas la stabilité cryptographique de la fonction de hachage qui importe à la carte, c'est sa vitesse. La fonction de hachage doit simplement fournir un bon caractère aléatoire et c'est tout.
2. Le redimensionnement est à éviter par tous les moyens. C'est le redimensionnement qui provoque la principale baisse, et non les collisions de la fonction de hachage. Dans la mesure du possible, initialisez toujours la collection avec un nombre prédéfini d'éléments. Même si vous ne les connaissez pas exactement, donnez un chiffre approximatif - cela aidera grandement l'algorithme.
3. Les collisions sont un mécanisme régulier de compactage. Par le biais de collisions, il est possible de stocker trois enregistrements avec des id, disons, 159, 4'569'209, 29'459'876 dans un tableau de longueur trois, plutôt que de longueur 30 000 000, même si les deux dernières valeurs tombent toutes les deux dans le gang avec l'index 2.
2. Le redimensionnement est à éviter par tous les moyens. C'est le redimensionnement, et non les collisions de fonctions de hachage, qui constitue le principal inconvénient. Dans la mesure du possible, initialisez la collection avec un nombre prédéfini d'éléments. Même si vous ne les connaissez pas exactement, donnez un chiffre approximatif - c'est une aide précieuse pour l'algorithme.
Veuillez montrer par l'exemple.
Je n'utilise que ça pour l'instant.
Veuillez me montrer un exemple.
Je n'utilise que ça pour l'instant.
Lorsque vous créez une collection CHashMap, utilisez l'un des constructeurs qui accepte le paramètre de capacité. Voir mon article sur CDicionary pour plus de détails sur les performances lors du redimensionnement. Il existe une présentation complète de cet algorithme.
J'ai trouvé un comportement très inhabituel dans CHashMap.
Il apparaît qu'une clé est censée être ajoutée, mais rien ne peut être lu à partir de celle-ci. Cependant, dès que la clé est à nouveau ajoutée, elle devient lisible !
C'est un SAC ?
Si vous remplacez le prix1.75141 dans l'exemple par un autre, cela fonctionnera correctement.
Il était très difficile de détecter ce comportement dans un code énorme sans déboguer et de créer un exemple aussi concis.
Dans la mesure du possible, initialisez toujours la collection avec un nombre prédéterminé d'éléments. Même si vous ne les connaissez pas exactement, donnez un chiffre approximatif - cela sera d'une grande aide pour l'algorithme.
Dans l'exemple ci-dessus, j'ai essayé de définir la capacité par le biais du constructeur. A partir d'une certaine valeur de capacité, l'exemple commence à fonctionner correctement.
Mais je pense que c'est une coïncidence.
J'ai trouvé un comportement très inhabituel dans CHashMap.
Il apparaît qu'une clé est censée être ajoutée, mais rien ne peut être lu à partir de celle-ci. Cependant, dès que je rajoute la clé, il devient lisible !
C'est un SAC ?
Si vous remplacez le prix1.75141 dans l'exemple par un autre, cela fonctionnera correctement.
Il était extrêmement difficile de détecter ce comportement dans un code énorme sans déboguer et de créer un exemple aussi concis.
Corrigé, sera dans la version d'aujourd'hui.
Merci ! Je vois la modification.
Dans l'exemple ci-dessus, j'ai essayé de définir la capacité via le constructeur. A partir d'une certaine valeur de capacité, l'exemple commence à fonctionner correctement.
Mais je pense que c'est une coïncidence.
Oui, il y a un pépin sur un pépin. Je déconseille fortement l'utilisation de Générique.