Cualquier pregunta de un PROFI a un SUPER PROFI - 1. - página 7

 
sergeev:

Sí. Creo que podemos prescindir del hachís en este caso. Me apresuré demasiado con mi consejo sobre los hashtags. :)

Si esta opción le conviene a Vasily - simplemente pondremos todos los parámetros en la cadena. La cadena será el identificador de la clase.


Pero también es correcto. Al fin y al cabo, en este caso la protección criptográfica no es necesaria en absoluto. Lo malo, sin embargo, es que sigue siendo necesario convertir la cadena de todos los parámetros en un número específico, preferiblemente de 32 bits, único, y para ello probablemente tendrá que utilizar funciones hash.

Diablos, MQL no tiene operadores de bits como la inversión, la compensación, etc. Sí, es un poco difícil hacer todo eso en MQL.

 
sergeev:

Sí. En este caso podemos prescindir del hash.
Si esta variante le conviene a Vasiliy, entonces simplemente ponemos todos los parámetros en la cadena. La cadena será el identificador de la clase.

Bueno, si implementas el conjunto de hash de Java, será aún más interesante...
Como... hash coincidente -> conjunto ordenado -> elementos...
Lo principal es que una lista ordenada está asociada al hash.
.
Entonces, todo "volará" también (aunque, por lo bajo...).
 
C-4:

Objetivo: Identificar unívocamente una instancia de una clase por su ID único, preferiblemente de tipo largo. El ID único debe formarse teniendo en cuenta la unicidad de los valores de las variables pertenecientes a la clase.

¡Caramba! Tendré la misma tarea el lunes )))).

No podré utilizar una cadena, ya que estoy limitado en cuanto a la longitud, sino que tendré que nombrar los objetos en función de ella.

Estaba pensando... Probablemente puedas utilizar dos algoritmos de hashing al mismo tiempo, lo que reducirá en gran medida la probabilidad de no unicidad... ¿o me equivoco?

 
C-4:


Diablos, no hay operadores de bitwise como la inversión, la compensación, etc. en MQL. Sí, va a ser difícil hacer todo eso en MQL.

¿Por qué no? ¡Está todo ahí ! https://docs.mql4.com/ru/basis/operations/bit

 
C-4:

Diablos, MQL no tiene operadores de bits como la inversión, la compensación, etc. Sí, sería difícil hacer todo eso en MQL.

https://docs.mql4.com/ru/basis/operations/assign
Desplazar la representación binaria de y hacia la derecha en x bits y >>= x;
Desplazar la representación binaria de y hacia la izquierda en x bit y <<= x;
Operación AND a nivel de bits de las representaciones binarias de y y x y &= x;
Operación OR a nivel de bits de las representaciones binarias y y |= x;
Operación OR exclusiva a nivel de bits
de representaciones binarias y y x y ^= x;

Tal vez y != x; también funcione

SZY: sobre la unicidad de los nombres, etc. - el problema, como siempre, se reduce al viejo problema: cómo ahorrar memoria y no perder rendimiento

utilizar una matriz de cadenas con nombres únicos, aumentando así la cantidad de datos, o utilizar una función que utilizará un algoritmo basado en los datos de entrada para formar un nombre único, reduciendo así el rendimiento, pero ahorrando memoria

 
 
sergeev:

no está allí.

pero aquí https://docs.mql4.com/ru/basis/operations/bit


no está ahí. ;)

SZY: esta información es la misma, solo que el ejemplo tanto para la asignación como para las operaciones bitwise es el mismo, ya que mi enlace dice "Las operaciones bitwise se realizan solo con enteros", si quieres te digo el enlace exacto ;), creo que C-4 entenderá donde y donde leer la Ayuda

 

Aquí hay un ejemplo de funcionamiento de la función hash de 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);
  }

El código básico de la función está tomado de la wikipedia y ligeramente modificado para MQL5. Aquí está el resultado del trabajo de guión:

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

Como puede ver, todos los valores devueltos por esta función son absolutamente diferentes, aunque las cadenas en sí no son muy diferentes.

 
C-4:

Aquí hay un ejemplo de funcionamiento de la función hash de Adler32:

El código básico de la función está tomado de la wikipedia y ligeramente modificado para MQL5. Aquí está el resultado del trabajo de guión:

Como puede ver, todos los valores devueltos por esta función son absolutamente diferentes, aunque las cadenas en sí no son muy diferentes.

genial.

si puedes (para no perderlo) déjalo en la base de código MQL5.

 
sergeev:

genial.

si puedes (para no perderlo) déjalo en la base de código MQL5.


Okie.