Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Mid-Square hashing (băm trung bình bình phương) trong C++


Đề bài

Phương pháp mid-square là một phương pháp sinh số ngẫu nhiên giả. Phương pháp này được phát minh bởi John von Neumann và được mô tả tại một hội nghị năm 1949.

  • Trong kỹ thuật này, một giá trị seed (hạt giống) ban đầu được lấy và bình phương nó.
  • Một số chữ số từ giữa được trích xuất và các chữ số trích xuất này tạo thành một số được lấy làm seed mới.
    • Giả sử lấy 3456 làm seed. Bình phương của nó là 11943936
    • Lấy 4 chữ số giữa làm seed mới tức là 9439. Bình phương của nó là 89094721
    • Lấy 4 chữ số giữa làm seed mới tức là 0947
    • Lặp lại quá trình này

Thuật toán

1. Chọn giá trị seed ban đầu 2. Lấy bình phương của giá trị seed 3. Cập nhật seed bằng cách lấy n chữ số từ kết quả trước

Ví dụ

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

Kết quả

Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau:

Random number: 10088419