প্রদত্ত কাজটি হল M মুখ বিশিষ্ট একটি ডাইস N বার ছুঁড়ে দেওয়ার পরে প্রত্যাশিত সর্বোচ্চ সংখ্যক বিন্দু গণনা করা৷
ডাইসের প্রথম মুখটিতে 1টি বিন্দু রয়েছে, দ্বিতীয় মুখে 2টি বিন্দু রয়েছে ইত্যাদি। একইভাবে M-তম মুখে M সংখ্যক বিন্দু রয়েছে।
প্রতিটি মুখের উপস্থিতির সম্ভাবনা 1/M হয়ে যায়।
আসুন এখন বুঝতে পারি একটি উদাহরণ ব্যবহার করে আমাদের কী করতে হবে −
ইনপুট৷ − M=2, N=3
আউটপুট − 1.875
ব্যাখ্যা − পাশাটির 2টি দিক আছে ={1, 2}
যদি ডাইসটি 3 বার নিক্ষেপ করা হয় তবে নমুনা স্থান হবে =M N =2 3
{(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2,) (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2,)} Maximum number in (1, 1, 1) = 1 Maximum number in (1, 1, 2) = 2 Maximum number in (1, 2, 1) = 2 Maximum number in (1, 2, 2) = 2 Maximum number in (2, 1, 1) = 2 Maximum number in (2, 1, 2) = 2 Maximum number in (2, 2, 1) = 2 Maximum number in (2, 2, 2) = 2 Probability of each case = 1/23 = 0.125 Therefore, expectation of maximum number = (1+2+2+2+2+2+2+2) * (0.125) = 1.875
ইনপুট − M=2, N=2
আউটপুট − 1.75
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
সর্বাধিক সংখ্যক ক্ষেত্রে যেখানে একটি সংখ্যা ঘটতে পারে তার পূর্ববর্তী সংখ্যাটি সূত্র ব্যবহার করে খুঁজে পাওয়া যেতে পারে − i N – (i-1) N .
উদাহরণস্বরূপ যদি M=4 এবং N=2, তাহলে মোট ক্ষেত্রের সংখ্যা যেখানে সর্বোচ্চ =4 হবে 4 2 – (4-1) 2 =7.
সুতরাং চূড়ান্ত উত্তরটি 1 থেকে M −
পর্যন্ত প্রতিটি উপাদানে এই সূত্রটি প্রয়োগ করবে(i * (i N – (i - 1) N )) / M N এবং সেগুলি যোগ করা।
-
ফাংশনে MaxExpect() যোগফল সঞ্চয় করার জন্য একটি ভেরিয়েবল সর্বাধিক =0 টাইপ দ্বিগুণ শুরু করে।
-
তারপর i=M থেকে i>0
পর্যন্ত লুপ করুন -
লুপের ভিতরে উপরে উল্লিখিত সূত্রটি প্রয়োগ করুন এবং সমস্ত ফলাফলের মান পরিবর্তনশীল সর্বোচ্চে যোগ করতে থাকুন।
উদাহরণ
#include <bits/stdc++.h> using namespace std; double MaxExpect(double M, double N){ double max = 0.0, i; for (i = M; i; i--) /*formula to find maximum number and sum of maximum numbers*/ max += (pow(i / M, N) - pow((i - 1) / M, N)) * i; return max; } int main(){ double M = 2, N = 3; cout << MaxExpect(M, N); return 0; }
আউটপুট
আমরা উপরের কোডটি চালালে আমরা নিম্নলিখিত আউটপুট পাব −
1.875