কম্পিউটার টিউটোরিয়াল

C++ প্রোগ্রাম: পার্ক-মিলার র‍্যান্ডম নম্বর জেনারেশন অ্যালগরিদম বাস্তবায়ন


পার্ক-মিলার র‍্যান্ডম নম্বর জেনারেশন অ্যালগরিদম (Park-Miller Random Number Generation Algorithm) র‍্যান্ডম সংখ্যা জেনারেট করার আরেকটি পদ্ধতি।

এই ধরনের র‍্যান্ডম নম্বর জেনারেটর (RNG)-র সাধারণ ফর্মুলা:

X_{k+1} = g X(k) mod n

যেখানে মডুলাস n হল একটি মৌলিক সংখ্যা বা মৌলিক সংখ্যার ঘাত, মাল্টিপ্লায়ার g হল n মডুলো উচ্চ গুণাত্মক ক্রমের একটি এলিমেন্ট, এবং সিড X₀ হল n-এর সাথে কো-প্রাইম।

অ্যালগরিদম

শুরু
    n, a, b, c এবং seed ভেরিয়েবল ঘোষণা করুন
    n, a, b, c এবং seed পড়ুন
    Uniform()
        hi, lo, t ভেরিয়েবল ঘোষণা করুন
        hi = seed / b
        lo = seed - b * hi
        t = a * lo - c * hi
        যদি (t > 0)
            seed = t
        অন্যথায়
            seed = t + n
        seed ফেরত দাও
    শেষ
    i = 0 থেকে n পর্যন্ত
        random ফাংশন কল করুন
    শেষ
শেষ

উদাহরণ কোড

#include <iostream>
using namespace std;

const long n = 2145678965L;
const long a = 763214L;
const long b = 88844L;
const long c = 7766L;
static long seed = 12345678L;

double uniform() {
    long hi = seed / b;
    long lo = seed - b * hi;
    long t = a * lo - c * hi;
    if (t > 0)
        seed = t;
    else
        seed = t + n;
    return seed;
}

int main(int argc, char **argv) {
    double A[10];
    for (int i = 0; i < 10; i++)
        A[i] = uniform();
    cout << "Random numbers are:\n";
    for (int i = 0; i < 10; i++)
        cout << A[i] << endl;
}

আউটপুট

Random numbers are:
6.50293e+10
4.27187e+10
2.1539e+10
4.62058e+10
1.70792e+10
8.24569e+09
5.93381e+10
3.63839e+10
4.81931e+10
8.91007e+09
  1. C++ প্রোগ্রাম: লিনিয়ার কনগ্রুয়েনশিয়াল জেনারেটর বাস্তবায়ন সুডো র‍্যান্ডম নম্বর জেনারেশনের জন্য

  2. C++ প্রোগ্রাম: ইন্টারপোলেশন সার্চ অ্যালগরিদম বাস্তবায়ন

  3. C++ প্রোগ্রাম: র‍্যান্ডম নম্বর জেনারেট

  4. অ্যারে শাফলিং-এর জন্য ফিশার-ইয়েটস অ্যালগরিদম বাস্তবায়নের C++ প্রোগ্রাম