Alle Fragen von einem PROFI an einen SUPER PROFI - 1. - Seite 7

 
sergeev:

Ja, ich denke, in diesem Fall können wir auf Hash verzichten. Ich war zu voreilig mit meinem Rat zu Hashes. :)

Wenn diese Option für Vasily geeignet ist, werden wir einfach alle Parameter in eine Zeichenkette einfügen. Der String ist der Bezeichner der Klasse.


Aber es ist auch richtig. Schließlich ist in diesem Fall ein Kryptoschutz überhaupt nicht erforderlich. Der Nachteil ist jedoch, dass Sie die Zeichenkette aller Parameter in eine spezifische, vorzugsweise 32-Bit-eindeutige Zahl umwandeln müssen, und dafür werden Sie wahrscheinlich Hash-Funktionen verwenden müssen.

Verdammt, MQL hat keine bitweisen Operatoren wie Invertierung, Offset, etc. Ja, es ist ein bisschen schwierig, all das in MQL zu tun.

 
sergeev:

Ja, in diesem Fall können wir auf die Raute verzichten.
Wenn diese Variante zu Vasiliy passt, dann setzen wir einfach alle Parameter in einen String. Die Zeichenkette ist der Klassenbezeichner.

Nun, wenn Sie Java Hash Set implementieren, wird es noch interessanter sein...
Wie... passende Hash -> sortierte Menge -> Elemente...
Die Hauptsache ist, dass eine sortierte Liste mit dem Hash verbunden ist.
.
Dann wird auch alles "fliegen" (wenn auch niedrig und niedrig...).
 
C-4:

Problem: Sie müssen eine Instanz einer Klasse durch ihre eindeutige ID, vorzugsweise vom langen Typ, eindeutig identifizieren. Die eindeutige ID sollte unter Berücksichtigung der Einzigartigkeit der Werte der zur Klasse gehörenden Variablen gebildet werden.

Oje! Ich werde am Montag die gleiche Aufgabe haben )))).

Ich werde keine Zeichenkette verwenden können, da ich durch die Länge begrenzt bin - ich werde Objekte auf der Grundlage der Zeichenkette benennen müssen.

Ich habe gedacht... Sie können wahrscheinlich zwei Hash-Algorithmen gleichzeitig verwenden - dies wird die Wahrscheinlichkeit der Nicht-Eindeutigkeit erheblich verringern... oder irre ich mich?

 
C-4:


Verdammt, es gibt keine bitweisen Operatoren wie Inversion, Offset usw. in MQL. Ja, es wird schwer sein, all das in MQL zu tun.

Warum nicht? Es ist doch alles da! https://docs.mql4.com/ru/basis/operations/bit

 
C-4:

Verdammt, MQL hat keine bitweisen Operatoren wie Invertierung, Offset, etc. Ja, es wäre schwierig, all dies in MQL zu tun.

https://docs.mql4.com/ru/basis/operations/assign
Verschiebung der binären Darstellung von y um x Bits nach rechts y >>= x;
Verschiebung der binären Darstellung von y nach links um x Bit y <<= x;
Bitweise UND-Verknüpfung der binären Darstellungen von y und x y &= x;
Bitweise ODER-Verknüpfung der binären Darstellungen y und x y |= x;
Bitweise exklusive ODER-Verknüpfung
von binären Darstellungen y und x y ^= x;

Vielleicht funktioniert y != x; auch

SZY: über die Einzigartigkeit von Namen usw. - Das Problem ist wie immer das alte Problem: Wie kann man Speicherplatz sparen, ohne an Leistung zu verlieren?

entweder ein Array von Strings mit eindeutigen Namen zu verwenden und damit die Datenmenge zu erhöhen oder eine Funktion zu verwenden, die einen Algorithmus auf der Grundlage der Eingabedaten verwendet, um einen eindeutigen Namen zu bilden, was die Leistung verringert, aber Speicherplatz spart

 
 
sergeev:

nicht da.

aber hier https://docs.mql4.com/ru/basis/operations/bit


nicht da! ;)

SZY: diese Informationen sind die gleichen, nur das Beispiel für beide Zuweisungen und bitweise Operationen ist das gleiche, weil mein Link sagt "Bitweise Operationen werden nur mit ganzen Zahlen durchgeführt", wenn Sie wollen, kann ich Ihnen den genauen Link sagen ;), ich denke, C-4 wird verstehen, wo und wo die Hilfe zu lesen

 

Hier ist ein funktionierendes Beispiel für die Adler32-Hash-Funktion:

//+------------------------------------------------------------------+
//|                                                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);
  }

Der Grundcode der Funktion ist aus Wikipedia entnommen und für MQL5 leicht modifiziert. Hier ist das Ergebnis der Skriptarbeit:

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

Wie Sie sehen können, sind alle von dieser Funktion zurückgegebenen Werte völlig unterschiedlich, obwohl die Zeichenketten selbst nicht sehr unterschiedlich sind.

 
C-4:

Hier ist ein funktionierendes Beispiel für die Adler32-Hash-Funktion:

Der Grundcode der Funktion ist aus Wikipedia entnommen und für MQL5 leicht modifiziert. Hier ist das Ergebnis der Skriptarbeit:

Wie Sie sehen können, sind alle von dieser Funktion zurückgegebenen Werte völlig unterschiedlich, obwohl die Zeichenketten selbst nicht sehr unterschiedlich sind.

großartig.

wenn Sie können (um sie nicht zu verlieren), legen Sie sie in der MQL5-Codebasis ab.

 
sergeev:

großartig.

wenn Sie können (um sie nicht zu verlieren), legen Sie sie in der MQL5-Codebasis ab.


Okie.