Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การแฮชแบบ Mid-Square ใน C++


คำชี้แจงปัญหา

วิธี mid-square เป็นวิธีการสร้างตัวเลขสุ่มเทียม วิธีนี้คิดค้นโดย John von Neumann และอธิบายไว้ในการประชุมในปี 1949

  • ในเทคนิคนี้ จะใช้ค่าเมล็ดเริ่มต้นและยกกำลังสอง

  • ตัวเลขบางตัวจากตรงกลางจะถูกดึงออกมา และตัวเลขที่แยกออกมาเหล่านี้จะสร้างตัวเลขซึ่งถือเป็นเมล็ดพันธุ์ใหม่

    • ให้เราเอา 3456 เป็นเมล็ด สี่เหลี่ยมของมันคือ 11943936

    • เอาเลขกลาง 4 ตัวเป็น seed ใหม่ เช่น 9439 สี่เหลี่ยมจัตุรัส 89094721

    • เอาเลขกลาง 4 ตัวเป็น seed ใหม่ เช่น 0947

    • ทำขั้นตอนนี้ซ้ำ

อัลกอริทึม

<ก่อน>1. เลือกค่าเมล็ดเริ่มต้น2. หากำลังสองของค่าเมล็ด3 อัพเดท seed โดยเอา n หลักจากผลลัพธ์ก่อนหน้า

ตัวอย่าง

#include #include ใช้เนมสเปซ std;getTime ยาว (){ time_t t =เวลา (NULL); struct tm *tm =เวลาท้องถิ่น (&t); ยาว ยาว x =(tm->tm_hour) * 50000000 + (tm->tm_min) * 100000 + (tm->tm_sec) * 5000 +(tm->tm_mday) * 50 + (tm->tm_year); return x;}long getHash(){ คีย์ยาว =getTime(); คีย์ =คีย์ * คีย์; คีย์ =คีย์ / 10000; คีย์ =คีย์ % 100000000; คีย์ย้อนกลับ;}int main(){ cout <<"หมายเลขสุ่ม:" < 

ผลลัพธ์

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้−

สุ่มเลข:10088419