Toute question d'un PROFI à un SUPER PROFI - 1. - page 7

 
sergeev:

Oui. Je pense que nous pouvons nous passer du hachage dans ce cas. J'ai été trop hâtif avec mes conseils sur les hachages. :)

Si cette option convient à Vasily - nous mettrons simplement tous les paramètres dans une chaîne. La chaîne sera l'identifiant de la classe.


Mais c'est aussi correct. Après tout, dans ce cas, la protection cryptographique n'est pas du tout nécessaire. L'inconvénient, cependant, est que vous devez toujours convertir la chaîne de tous les paramètres en un numéro unique spécifique, de préférence de 32 bits, et pour cela vous devrez probablement utiliser des fonctions de hachage.

Bon sang, il n'y a pas d'opérateurs bit à bit comme l'inversion, le décalage, etc. dans MQL. Oui, c'est un peu difficile de faire tout ça dans MQL.

 
sergeev:

Oui. Dans ce cas, nous pouvons nous passer du hachage.
Si cette variante convient à Vasiliy, il suffit de mettre tous les paramètres dans une chaîne. La chaîne sera l'identifiant de la classe.

Eh bien, si vous implémentez le jeu de hachage java, ce sera encore plus intéressant...
Comme... hachage correspondant -> ensemble trié -> éléments...
L'essentiel est qu'une liste triée soit associée au hachage.
.
Alors tout va aussi "voler" (bien que, bas et bas...).
 
C-4:

Problème : vous devez identifier de manière unique une instance d'une classe par son ID unique, de préférence de type long. L'ID unique doit être formé en tenant compte de l'unicité des valeurs des variables appartenant à la classe.

Bon sang ! J'aurai la même tâche le lundi )))).

Je ne pourrai pas utiliser une chaîne de caractères, car je suis limité par la longueur - je devrai nommer les objets en fonction de celle-ci.

Je pensais... Vous pouvez probablement utiliser deux algorithmes de hachage en même temps - cela réduira considérablement la probabilité de non-unicité... ou est-ce que je me trompe ?

 
C-4:


Bon sang, MQL n'a pas d'opérateurs bit à bit comme l'inversion, le décalage, etc. Oui, ça va être difficile de faire tout ça dans MQL.

Pourquoi pas ? Tout est là ! https://docs.mql4.com/ru/basis/operations/bit

 
C-4:

Bon sang, MQL n'a pas d'opérateurs bit à bit comme l'inversion, le décalage, etc. Oui, il serait difficile de faire tout cela dans MQL.

https://docs.mql4.com/ru/basis/operations/assign
Décale la représentation binaire de y vers la droite de x bits y >>= x ;
Décale la représentation binaire de y vers la gauche de x bit y <<= x ;
Opération ET par bit des représentations binaires de y et x y &= x ;
OU binaire des représentations binaires y et x y |= x ;
Opération OU exclusif par bit
de représentations binaires y et x y ^= x ;

Peut-être que y != x ; fonctionne aussi

SZY : sur l'unicité des noms, etc. - le problème, comme toujours, se résume au vieux problème : comment économiser de la mémoire sans perdre en performance ?

soit utiliser un tableau de chaînes de caractères avec des noms uniques et ainsi augmenter la quantité de données, soit utiliser une fonction qui utilisera un algorithme basé sur les données d'entrée pour former un nom unique, réduisant ainsi les performances mais économisant de la mémoire

 


pas là ! ;)

SZY : ces informations sont les mêmes, juste l'exemple pour l'affectation et les opérations bitwise est le même, parce que mon lien dit "Les opérations bitwise sont effectuées uniquement avec des entiers", si vous voulez je peux vous dire le lien exact ;), je pense que C-4 comprendra où et comment lire l'Aide

 

Voici un exemple fonctionnel de la fonction de hachage Adler32 :

//+------------------------------------------------------------------+
//|                                                Adler32_Sample.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string a="mesage 1: Hello word";
   string b="message 2: It's simple code";
   string c="message 2: It's simple codes";
   Print(adler32(a));
   Print(adler32(b));
   Print(adler32(c));
  }
//+------------------------------------------------------------------+

ulong adler32(string buf)
  {
     ulong s1 = 1;
     ulong s2 = 0;
     uint buflength=StringLen(buf);
     uchar array[];
     ArrayResize(array, buflength,0);
     StringToCharArray(buf, array, 0, -1, CP_ACP);
     for (uint n=0; n<buflength; n++)
     {
        s1 = (s1 + array[n]) % 65521;
        s2 = (s2 + s1)     % 65521;
     }
     return ((s2 << 16) + s1);
  }

Le code de base de la fonction est tiré de wikipedia et légèrement modifié pour MQL5. Voici le résultat du travail de script :

2011.01.22 22:50:10 BitOperations (#MCD,MN1) 2333149633
2011.01.22 22:50:10 BitOperations (#MCD,MN1) 2169506126
2011.01.22 22:50:10 BitOperations (#MCD,MN1) 1202325230

Comme vous pouvez le constater, toutes les valeurs renvoyées par cette fonction sont absolument différentes, bien que les chaînes de caractères elles-mêmes ne soient pas très différentes.

 
C-4:

Voici un exemple fonctionnel de la fonction de hachage Adler32 :

Le code de base de la fonction est tiré de wikipedia et légèrement modifié pour MQL5. Voici le résultat du travail de script :

Comme vous pouvez le constater, toutes les valeurs renvoyées par cette fonction sont absolument différentes, bien que les chaînes de caractères elles-mêmes ne soient pas très différentes.

super.

si vous le pouvez (pour ne pas le perdre), déposez-le dans la base de code de MQL5.

 
sergeev:

super.

si vous le pouvez (pour ne pas le perdre), déposez-le dans la base de code de MQL5.


Okie.