কিছু ক্রিয়াকলাপ সম্পাদন করে একটি প্রদত্ত অ্যারের সাবয়ারের প্রত্যাশিত যোগফল খুঁজে পাওয়ার জন্য প্রোগ্রাম
ধরুন আমাদের একটি অ্যারে A আছে যার আকার n এবং দুটি মান p এবং q। আমরা A.
তে এই অপারেশনগুলি সম্পাদন করতে পারি- এলোমেলোভাবে দুটি সূচী (l, r) নির্বাচন করুন যেখানে l
- এলোমেলোভাবে দুটি সূচক (l, r) নির্বাচন করুন যেখানে l
- এলোমেলোভাবে দুটি সূচক (l, r) নির্বাচন করুন যেখানে l
প্রথম অপারেশন p সংখ্যা বার এবং দ্বিতীয় অপারেশন q বার করার পরে, আমরা এলোমেলোভাবে দুটি সূচক l &r যেখানে l
সুতরাং, যদি ইনপুট A =[1,2,3] p =1 q =1 এর মত হয়, তাহলে আউটপুট হবে 4.667 কারণ
ধাপ 1:আমাদের তিনটি পছন্দ আছে −
swap(0, 1) তাই অ্যারে হবে 2 1 3
swap(0, 2) তাই অ্যারে হবে 3 2 1
swap(1, 2) তাই অ্যারে হবে 1 3 2
ধাপ 2:প্রতিটি ফলাফলের জন্য আমাদের কাছে আবার তিনটি পছন্দ আছে −
[2 1 3] থেকে [1 2 3], [3 1 2], [2 3 1]
[3 2 1] থেকে [2 3 1], [1 2 3], [3 1 2]
[1 3 2] থেকে [3 1 2], [2 3 1], [1 2 3]
9টি সম্ভাব্য অ্যারে আছে তাই সম্ভাব্যতা 1/9। সুতরাং 9টি অ্যারের প্রতিটিতে সমান সম্ভাবনা সহ 3টি সম্ভাব্য যোগফল থাকবে। উদাহরণস্বরূপ, [1 2 3], আমরা 1+2, 2+3 এবং 1+2+3 পেতে পারি। এবং এই ইনপুটের জন্য মোট 27টি ফলাফল রয়েছে, প্রত্যাশিত মানটি সমস্ত 27S এর যোগফল খুঁজে বের করে এবং 27 দ্বারা ভাগ করে গণনা করা যেতে পারে৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
0 থেকে n - 1 রেঞ্জে j-এর জন্য
উদাহরণ
def matmul(a, v, n):
toret = [0]*n
for i in range(n):
for j in range(n):
toret[i] += a[i][j]*v[j]
return toret
def solve(A, p, q):
n = len(A)
temp = []
swp = (n - 3)/(n - 1)
swapvalp = (pow(swp, p)*(n - 1) + 1)/n
swapvalm = (1 - pow(swp, p))/n
rev = []
dotv = []
for i in range(n):
swaprow = []
revrow = []
for j in range(n):
swaprow.append(swapvalm)
revrow.append(2*(min(i, j, n - i - 1, n - j - 1) + 1)/(n*(n - 1)))
swaprow[i] = swapvalp
revrow[i] = 1.0 - 2*((i + 1)*(n - i) - min(i + 1, n - i))/(n*(n - 1))
temp.append(swaprow)
rev.append(revrow)
dotv.append(2*((i + 1)*(n - i) - 1)/(n*(n - 1)))
A = matmul(temp, A, n)
for _ in range(q):
A = matmul(rev, A, n)
tot = 0.0
for i in range(n):
tot += dotv[i]*A[i]
return tot
A = [1,2,3]
p = 1
q = 1
print(solve(A, p, q))
ইনপুট
[1,2,3], 1, 1
আউটপুট
0.0