ধরুন আমাদের দুটি সংখ্যা 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]