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

Python-এ অ্যারে সর্ট করতে র‍্যান্ডম শাফলের প্রত্যাশিত সংখ্যা বের করার প্রোগ্রাম


মান লেট nums একটি উপাদান সেট। আমাদের এগুলো নন-ডিক্রিজিং সিকোয়েন্সে সর্ট করতে হবে। কিন্তু সর্টিং টেকনিকটি র‍্যান্ডোমাইজড। আমরা চেক করব অ্যারেটি সর্টেড কিনা, যদি না হয় তবে র‍্যান্ডম শাফল করব এবং আবার চেক করব। যতক্ষণ না সব উপাদান সর্টেড হয় এই প্রসেস চালিয়ে যাব। এই কেসে আমাদের প্রত্যাশিত শাফল সংখ্যা বের করতে হবে। উত্তর ৬ দশমিকlocalOrd পর্যন্ত দেখান।

তাহলে, যদি ইনপুট হয় nums = [5,2,7], তবে আউটপুট হবে 6 কারণ ৩টি পারমুটেশন সম্ভব, তাই প্রোবাবিলিটি 1/3

  • যদি i = 1 ইটারেশনে সর্টেড অ্যারে পাই, তবে लगेगा 1/3
  • যদি i = 2 ইটারেশনে সর্টেড অ্যারে পাই, তবে लगेगा (2/3)*(1/3)

যদি i-তম ইটারেশনে সর্টেড অ্যারে পাই, তবে लगेगा (2/3)^(i-1) * (1/3)

এটি সমাধান করতে, আমরা নিচের পদক্ষেপগুলো অনুসরণ করব −

  • যদি nums সর্টেড হয়, তবে
    • 0 রিটার্ন করুন
  • অন্যথায়,
    • m:= একটি খালি ডিকশনারি
    • nums-র প্রতিটি i-এর জন্য, করুন
      • যদি i m-এ থাকে, তবে
        • m[i] := m[i] + 1
      • অন্যথায়,
        • m[i]:= 1
    • num:= 1
    • m-র প্রতিটি কী i-এর জন্য, করুন
      • num := num * factorial(m[i])
    • den:= factorial(size of nums)
    • den/num রিটার্ন করুন এবং ৬ দশমিক পর্যন্ত রাউন্ড অফ করুন

উদাহরণ

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন −

from math import factorial def solve(nums): if nums == sorted(nums): return 0 else: m={} for i in nums: if i in m: m[i]+=1 else: m[i]=1 num=1 for i in m: num *= factorial(m[i]) den=factorial(len(nums)) return round((den/num),6) nums = [5,2,7] print(solve(nums))

ইনপুট

[5,2,7] 

আউটপুট

6.0

  1. পাইথন প্রোগ্রামে অ্যারের যোগফল বের করা

  2. পাইথন প্রোগ্রাম লিস্টে সবচেয়ে ছোট সংখ্যা বের করা

  3. পাইথন প্রোগ্রাম অ্যারেতে সবচেয়ে বড় এলিমেন্ট বের করা

  4. পাইথনে অ্যারের যোগফল বের করা