PROFI에서 SUPERPROFI에 대한 모든 질문 - 1. - 페이지 7

 
sergeev :

네. 이 경우 해시 없이 할 수 있다고 생각합니다. 나는 해시에 대한 조언을 서두르고 있다. :)

이 옵션이 Vasily에 적합하면 모든 매개변수를 라인에 입력하기만 하면 됩니다. 문자열은 클래스 식별자가 됩니다.


그리고 그것은 또한 사실입니다. 실제로 이 경우 암호 보호는 전혀 필요하지 않습니다. 그러나 이 변형의 나쁜 점은 모든 매개변수의 문자열을 특정, 가급적이면 32비트 고유 숫자로 변환해야 하지만 이를 위해서는 해시 함수를 사용해야 한다는 것입니다.

젠장, MQL에는 반전, 시프트 등과 같은 비트 연산자가 없습니다. 예, MQL에서 이 모든 작업을 수행하는 것은 어려울 것입니다.

 
sergeev :

네. 이 경우 해시 없이 할 수 있습니다.
이 옵션이 Vasily에 적합하면 모든 매개변수를 라인에 입력하기만 하면 됩니다. 문자열은 클래스 식별자가 됩니다.

자, Java 해시 세트를 구현하면 훨씬 더 흥미롭습니다.
같은... 일치하는 해시 -> 정렬된 집합 -> 요소...
가장 중요한 것은 정렬된 목록이 해시와 연결되어 있다는 것입니다.
.
그런 다음 여전히 "비행"합니다(그러나 낮음, 낮음 ...)
 
C-4 :

작업: 고유 ID, 가급적이면 long 유형으로 클래스의 인스턴스를 고유하게 식별해야 합니다. 고유 ID는 클래스에 포함된 변수 값의 고유성을 고려하여 구성되어야 합니다.

믈린! 월요일에도 같은 문제가 발생합니다.

문자열은 길이가 제한되어 있으므로 사용할 수 없습니다. 이를 기반으로 개체에 이름을 할당해야 합니다.

나는 생각하고 있습니다 ... 아마도 동시에 두 개의 해싱 알고리즘을 사용할 수 있습니다. 이렇게하면 고유하지 않을 가능성이 크게 줄어들 것입니다 ... 아니면 내가 매우 잘못 알고 있습니까?

 
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의 이진 표현을 x 비트만큼 오른쪽으로 이동합니다. y >>= x;
y의 이진 표현을 x 비트만큼 왼쪽으로 이동합니다. y <<= x;
y와 xy의 이진 표현의 비트 연산 AND &= x;
y 및 xy의 이진 표현의 비트 OR 연산 |= x;
비트 배타적 OR 연산
y 및 xy의 이진 표현 ^= x;

아마도 y != x; 공장

추신: 이름의 고유성과 관련하여 - 항상 그렇듯이 작업은 오래된 문제로 귀결됩니다. 메모리를 절약하고 성능을 잃지 않는 방법

또는 고유한 이름을 가진 문자열 배열을 사용하여 데이터의 양을 늘리거나, 입력 데이터를 기반으로 하는 일부 알고리즘을 기반으로 고유한 이름을 생성하는 함수를 사용하여 성능을 저하시키지만 메모리를 절약합니다.

 
 
sergeev :

거기 아니야.

여기 https://docs.mql4.com/ru/basis/operations/bit


아니 거기! ;)

추신: 이것은 동일한 정보입니다. 할당 연산과 비트 연산 모두에 대한 예는 동일합니다. 왜냐하면 내 링크에 "비트 연산은 정수로만 수행됩니다.", 원하는 경우 더 정확한 링크가 있다고 말할 수 있습니다.), C-4 는 Nuno가 도움말을 읽는 위치와 위치를 이해할 것이라고 생각합니다.

 

여기에서 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 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);
  }

함수의 주요 코드는 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 코드베이스에 넣으십시오.


오케이.