ধরুন আমাদের দুটি সংখ্যা a এবং b আছে, আমাদের পরিসরে [1, a] মান ধারণকারী একটি বিন্যাস খুঁজে বের করতে হবে এবং রিকার্সিভ মার্জ সর্ট ফাংশনের কলের ঠিক b নম্বর প্রয়োজন।
সুতরাং, যদি ইনপুটটি a =10, b =15 এর মত হয়, তাহলে আউটপুট হবে [3,1,4,6,2,8,5,9,10,7]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন সংজ্ঞায়িত করুন solve()। এটি বাম, ডান, অ্যারে, বি নেবে
- যদি b <1 বা বাম + 1 ডানের মত হয়, তাহলে
- প্রত্যাবর্তন
- b :=b - 2
- মাঝে :=(বাম + ডান) / 2
- temp :=অ্যারে[মধ্য - 1]
- অ্যারে[মিড-১] :=অ্যারে[মিড]
- অ্যারে[মিড] :=টেম্প
- সমাধান করুন(বাম, মধ্য, অ্যারে, বি)
- সমাধান (মিড, ডান, অ্যারে, বি)
- প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
- যদি b mod 2 0 এর মত হয়, তাহলে
- "কোনটিই" প্রদর্শন করুন
- প্রত্যাবর্তন
- অ্যারে :=n + 1 আকারের একটি অ্যারে, এবং 0 দিয়ে পূরণ করুন
- অ্যারে[0] :=1
- আমি 1 থেকে a রেঞ্জের জন্য, কর
- অ্যারে[i] :=i + 1
- b :=b - 1
- সমাধান (0, a, অ্যারে, b)
- রিটার্ন অ্যারে, a
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(left,right,array,b):
if (b < 1 or left + 1 == right):
return
b -= 2
mid = (left + right) // 2
temp = array[mid - 1]
array[mid-1] = array[mid]
array[mid] = temp
solve(left, mid, array, b)
solve(mid, right, array, b)
def find_arr(a,b):
if (b % 2 == 0):
print("None")
return
array = [0 for i in range(a + 2)]
array[0] = 1
for i in range(1, a):
array[i] = i + 1
b -=1
solve(0, a, array, b)
return array, a
a = 10
b = 15
array, size = find_arr(a, b)
print(array[:size]) ইনপুট
10,15
আউটপুট
[3, 1, 4, 6, 2, 8, 5, 9, 10, 7]