ধরুন আমাদের উপাদান সংখ্যার একটি সেট আছে। আমাদের অ-হ্রাস ক্রমানুসারে তাদের সাজাতে হবে। কিন্তু বাছাই কৌশল এলোমেলো হয়. আমরা অ্যারে সাজানো আছে কিনা তা পরীক্ষা করব, যদি না হয় তাহলে র্যান্ডম শাফেল করে আবার চেক করব। যতক্ষণ না সমস্ত উপাদানগুলি সাজানো হয় এই প্রক্রিয়াটি চালিয়ে যান। এই ক্ষেত্রে আমাদের তাদের সাজানোর জন্য প্রয়োজনীয় সংখ্যক শাফেলগুলি খুঁজে বের করতে হবে। 6 দশমিক স্থান পর্যন্ত উত্তর দেখান।
সুতরাং, যদি ইনপুটটি nums =[5,2,7] এর মত হয়, তাহলে আউটপুট হবে 6 কারণ সেখানে 3টি পারমুটেশন সম্ভব, তাই সম্ভাব্যতা হল 1/3
- যদি আমরা i =1 সংখ্যার পুনরাবৃত্তিতে সাজানো অ্যারে পাই, তাহলে এটি 1/3 লাগবে
- যদি আমরা i =2 সংখ্যার পুনরাবৃত্তিতে সাজানো অ্যারে পাই, তাহলে এটি লাগবে (2/3)*(1/3)
যদি আমরা পুনরাবৃত্তির i-তম সংখ্যায় সাজানো অ্যারে পাই, তবে এটি (2/3)^(i-1) * (1/3)
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- যদি সংখ্যাগুলি সাজানো হয়, তাহলে
- রিটার্ন 0
- অন্যথায়,
- m:=একটি নতুন অভিধান প্রাথমিকভাবে খালি
- সংখ্যায় প্রতিটি i জন্য, করুন
- যদি আমি m এ উপস্থিত থাকি, তাহলে
- m[i] :=m[i] + 1
- অন্যথায়,
- m[i]:=1
- যদি আমি m এ উপস্থিত থাকি, তাহলে
- সংখ্যা:=1
- প্রতিটি কী i-এর জন্য m, do
- সংখ্যা :=সংখ্যা * ফ্যাক্টোরিয়াল(m[i])
- den:=ফ্যাক্টোরিয়াল (সংখ্যার আকার)
- রিটার্ন (ডেন/সংখ্যা) এবং 6 দশমিক স্থান পর্যন্ত রাউন্ডিং বন্ধ
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
<প্রে>ম্যাথ ইম্পোর্ট ফ্যাক্টোরিয়ালডেফ সমাধান(সংখ্যা):যদি nums ==সাজানো(সংখ্যা):ফেরত দাও 0 else:m={} i এর জন্য nums:যদি i m:m[i]+=1 else:m[ i] =1 সংখ্যা =1 i এর জন্য m:num *=ফ্যাক্টোরিয়াল(m[i]) den=factorial(len(nums)) রিটার্ন রাউন্ড((den/num),6)nums =[5,2,7 ]মুদ্রণ(সমাধান(সংখ্যা))ইনপুট
[5,2,7]
আউটপুট
6.0