PROFIからSUPER PROFIへの質問-1. - ページ 7

 
sergeev:

そうですね、この場合はハッシュはなくても大丈夫だと思います。ハッシュについてのアドバイスは急ぎすぎました。:)

もし、このオプションがVasilyに合うなら、私たちは単純にすべてのパラメータを文字列にします。この文字列は、クラスの識別子となる。


しかし、それも正しいのです。結局、この場合、暗号保護は全く必要ないのです。しかし、悪い点は、すべてのパラメータの文字列を特定の、できれば32ビットのユニークな番号に変換する必要があることで、そのためにはおそらくハッシュ関数を使う必要があります。

MQLには反転やオフセットなどのビット演算子がないんです。うん、MQLで全部やるのはちょっと難しいね。

 
sergeev:

この場合、ハッシュはなくても大丈夫です。
もし、この方法がVasiliyに合っていれば、すべてのパラメータを文字列にすればいいのです。この文字列がクラス識別子となる。

まあ、Javaのハッシュセットを実装すれば、もっと面白いことになりそうですが...。
例えば...マッチングハッシュ→ソートされた集合→要素...
主な内容は、ソートされたリストがハッシュと関連づけられるということです。
.
そうすれば、すべてのものが「飛ぶ」ことにもなります(といっても、低空飛行ですが......)。
 
C-4:

問題: クラスのインスタンスを一意のID(できれば長い型)で一意に識別する必要がある。一意なIDは、クラスに属する変数の値の一意性を考慮して形成する必要があります。

ぎゃあああああああああああああああああああああああああああああああああああああああああああああああああ月曜日も同じ作業をします ))))。

長さに制限があるので、文字列は使えません。これを元にオブジェクトに名前を付ける必要があります。

考えていたのは...おそらく2つのハッシュアルゴリズムを同時に使うことができます。それとも私の勘違いでしょうか?

 
C-4:


MQLには反転やオフセットなどのビット演算子がないんです。うん、MQLで全部やるのは難しいだろうね。

なんでやねん、全部あるやんけ!https://docs.mql4.com/ru/basis/operations/bit

 
C-4:

MQLには反転やオフセットなどのビット演算子がないんです。そうですね、MQLで全部やるのは大変でしょう。

https://docs.mql4.com/ru/basis/operations/assign
yの2進数表現をxビット右にシフトする y >>= x。
y の2進表現を x ビット左にシフトする y <<= x;
y と x の2進表現のビットごとの AND 演算 y &= x;
2値表現yとxのビット単位のOR演算 y |= x。
ビット毎排他的論理和演算
の2値表現yとxのy ^= xである。

たぶんy != x;も動作する

SZY:名前のユニークさなどについて。- 問題は、いつものように、いかにしてメモリを節約してパフォーマンスを落とさないかという、昔からの問題に帰結します。

一意な名前を持つ文字列の配列を使用し、データ量を増やすか、入力データに基づいたアルゴリズムで一意な名前を形成する関数を使用し、パフォーマンスを下げますが、メモリを節約します。

 
sergeev:

ない

が、ここでhttps://docs.mql4.com/ru/basis/operations/bit


ノータッチ;)

SZY: この情報は同じです。ただ、代入とビット演算の両方の例は同じですが、私のリンクには「ビット演算は整数に対してのみ実行される」と書いてあるので、もし必要なら正確なリンクをお教えします ;) 、C-4は どことどこでヘルプを読めばいいのか理解できると思います。

 

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

関数の基本的なコードはwikipediaから引用し、MQL5用に少し修正したものです。これがスクリプト作業の結果です。

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

この関数が返す値は、文字列自体には大きな違いはないものの、見ての通り、すべて全く異なる値になっています。

 
C-4:

Adler32のハッシュ関数の動作 例を示します。

関数の基本的なコードはwikipediaから引用し、MQL5用に少し修正したものです。これがスクリプト作業の結果です。

この関数が返す値は、文字列自体には大きな違いはないものの、見ての通り、すべて全く異なる値になっています。

は素晴らしい。

できれば(失わないように)MQL5のコードベースに落とし込んでください。

 
sergeev:

は素晴らしい。

できれば(失わないように)MQL5のコードベースに落とし込んでください。


オッケーです。