Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 Mid-Square 해싱.

<시간/>

문제 설명

mid-square 방법은 의사 난수를 생성하는 방법입니다. 이 방법은 John von Neumann에 의해 발명되었으며 1949년 회의에서 설명되었습니다.

  • 이 기술에서는 초기 시드 값을 가져와 제곱합니다.

  • 중간에서 일부 숫자가 추출되고 이 추출된 숫자가 새로운 시드로 사용되는 숫자를 형성합니다.

    • 3456을 시드로 사용합시다. 제곱은 11943936입니다.

    • 중간 4자리를 새 시드(예:9439)로 사용합니다. 정사각형은 89094721입니다.

    • 중간 4자리 숫자를 새 시드로 사용(예:0947

      )
    • 이 과정을 반복하세요

알고리즘

1. Choose initial seed value
2. Take the square of the seed value
3. Update seed by taking n digits from previous result

예시

#include <iostream>
#include <ctime>
using namespace std;
long long getTime(){
   time_t t = time(NULL);
   struct tm *tm = localtime(&t);
   long long x = (tm->tm_hour) * 50000000 + (tm->tm_min) * 100000 + (tm->tm_sec) * 5000 +
(tm->tm_mday) * 50 + (tm->tm_year);
   return x;
}
long getHash(){
   long long key = getTime();
   key = key * key;
   key = key / 10000;
   key = key % 100000000;
   return key;
}
int main(){
   cout << "Random number: " << getHash() << endl;
   return 0;
}

출력

위의 프로그램을 컴파일하고 실행할 때. 다음 출력을 생성합니다-

Random number: 10088419