PROFI'den SUPERPROFI'ye kadar tüm sorularınız - 1. - sayfa 7

 
sergeev :

Evet. Bu durumda bir karma olmadan yapabileceğinizi düşünüyorum. Hash'ler hakkında tavsiye vererek acele ettim. :)

Bu seçenek Vasily'ye uyuyorsa, tüm parametreleri satıra sürmemiz yeterlidir. Dize, sınıf tanımlayıcısı olacaktır.


Ve bu da doğru. Gerçekten de, bu durumda, kripto korumasına hiç ihtiyaç duyulmaz. Bununla birlikte, bu varyanttaki kötü şey, tüm parametrelerin dizesini belirli, tercihen 32 bit benzersiz bir sayıya dönüştürmek için hala gerekli olacak, ancak bunun için, görünüşe göre, karma işlevlerin kullanılması gerekecek.

Cehennem, MQL'de inversiyon, shift vb. gibi bitsel operatörler yoktur. Evet, tüm bunları MQL'de yapmak zor olacak.

 
sergeev :

Evet. bu durumda, bir karma olmadan yapabilirsiniz.
Bu seçenek Vasily'ye uyuyorsa, tüm parametreleri satıra sürmemiz yeterlidir. Dize, sınıf tanımlayıcısı olacaktır.

Pekala, eğer bir Java karma seti uygularsanız, bu daha da ilginçtir...
Gibi... eşleşen karma -> sıralı küme -> öğeler...
Ana şey, sıralanmış bir listenin bir karma ile ilişkilendirilmesidir.
.
O zaman hala "uçacak" (ancak, düşük, düşük ...)
 
C-4 :

Görev: Bir sınıfın bir örneğini benzersiz kimliğiyle, tercihen uzun türüyle benzersiz bir şekilde tanımlamak gerekir. Sınıfta yer alan değişkenlerin değerlerinin benzersizliği dikkate alınarak benzersiz bir kimlik oluşturulmalıdır.

Mlyn! Pazartesi günü aynı görevi yapacağım.

Uzunluğu sınırlı olduğu için dizeyi kullanamayacağım - nesnelere buna dayalı adlar atamak gerekecek.

Düşündüm de... muhtemelen aynı anda iki karma algoritma kullanabilirsiniz - bu, benzersiz olmama olasılığını önemli ölçüde azaltacaktır... yoksa çok mu yanılıyorum?

 
C-4 :


Cehennem, MQL'de inversiyon, shift vb. gibi bitsel operatörler yoktur. Evet, tüm bunları MQL'de yapmak zor olacak.

neden? herşey! https://docs.mql4.com/ru/basis/operations/bit

 
C-4 :

Cehennem, MQL'de inversiyon, shift vb. gibi bitsel operatörler yoktur. Evet, tüm bunları MQL'de yapmak zor olacak.

https://docs.mql4.com/ru/basis/operations/assign
y'nin ikili gösterimini x bit y >>= x ile sağa kaydırın;
y'nin ikili gösterimini sola x bit y <<= x;
y ve xy ikili gösterimlerinin bitsel işlemi VE &= x;
y ve xy ikili gösterimlerinin bitsel VEYA işlemi |= x;
Bit düzeyinde özel VEYA işlemi
y ve xy'nin ikili gösterimleri ^= x;

muhtemelen y != x; İşler

Not: adların benzersizliği vb. ile ilgili olarak. - görev, her zaman olduğu gibi, eski soruna iner: bellekten nasıl tasarruf edilir ve performansı kaybetmez

veya benzersiz adlara sahip bir dizi dizi kullanın, böylece veri miktarını artırın veya giriş verilerine dayalı bir algoritmaya dayalı benzersiz bir ad oluşturacak bir işlev kullanın, böylece performansı düşürür, ancak bellekten tasarruf sağlar

 
 
sergeev :

orada değil.

ve burada https://docs.mql4.com/ru/basis/operations/bit


burada değil! ;)

Not: Bu aynı bilgidir, hem atama işlemi hem de bitsel işlemler için sadece bir örnek aynıdır, çünkü linkimde "Bitsel işlemler sadece tamsayılar ile yapılır" yazıyor isterseniz daha doğru bir linke sahip olduğunuzu söyleyebilirim ;), Nuno'nun yardımı nerede ve nerede okuduğunu C-4 anlayacaktır diye düşünüyorum

 

Burada Adler32 karma işlevinin çalışan bir örneğini kırptım:

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

Fonksiyonun ana kodu Wikipedia'dan alınmıştır ve MQL5 için biraz değiştirilmiştir. İşte betiğin çıktısı:

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

Gördüğünüz gibi, işlev tarafından verilen tüm değerler tamamen farklıdır, ancak dizelerin kendileri çok fazla farklılık göstermez.

 
C-4 :

Burada Adler32 karma işlevinin çalışan bir örneğini kırptım:

Fonksiyonun ana kodu Wikipedia'dan alınmıştır ve MQL5 için biraz değiştirilmiştir. İşte betiğin çıktısı:

Gördüğünüz gibi, işlev tarafından verilen tüm değerler tamamen farklıdır, ancak dizelerin kendileri çok fazla farklılık göstermez.

İyi.

mümkünse (kaybetmemek için) MQL5 kod tabanına koyun.

 
sergeev :

İyi.

mümkünse (kaybetmemek için) MQL5 kod tabanına koyun.


Tamam.