ধরুন আমাদের একটি অ্যারে A আছে, আমাদের একটি সংখ্যা X খুঁজে বের করতে হবে যেমন (A[0] XOR X) + (A[1] XOR X) + … + A[n – 1] XOR X যতটা সম্ভব সর্বনিম্ন।
সুতরাং, যদি ইনপুটটি [3, 4, 5, 6, 7] এর মত হয়, তাহলে আউটপুট হবে X =7 , যোগফল =10
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন সংজ্ঞায়িত করুন search_res()। এটি arr, n লাগবে
- উপাদান :=arr[0]
- আমি রেঞ্জ 0 থেকে arr এর আকারের জন্য, কর
- যদি arr[i]> উপাদান, তাহলে
- উপাদান :=arr[i]
- যদি arr[i]> উপাদান, তাহলে
- p :=পূর্ণসংখ্যা (এলিমেন্ট বেস 2 এর লগ) + 1
- X :=0
- আমি 0 থেকে p রেঞ্জের জন্য, কর
- cnt :=0 0 থেকে n রেঞ্জের মধ্যে j-এর জন্য
- করুন
- যদি arr[j] AND (2^i) অ-শূন্য হয়, তাহলে
- cnt :=cnt + 1
- যদি arr[j] AND (2^i) অ-শূন্য হয়, তাহলে
- যদি cnt> (n / 2) এর পূর্ণসংখ্যার অংশ অ-শূন্য হয়, তাহলে
- X :=X + (2^i)
- সমষ্টি :=0
- আমি 0 থেকে n রেঞ্জের জন্য, কর
- সমষ্টি :=যোগফল +(X XOR arr[i])
- X এবং যোগফল ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from math import log2 def search_res(arr, n): element = arr[0] for i in range(len(arr)): if(arr[i] > element): element = arr[i] p = int(log2(element)) + 1 X = 0 for i in range(p): cnt = 0 for j in range(n): if (arr[j] & (1 << i)): cnt += 1 if (cnt > int(n / 2)): X += 1 << i sum = 0 for i in range(n): sum += (X ^ arr[i]) print("X =", X, ", Sum =", sum) arr = [3, 4, 5, 6, 7] n = len(arr) search_res(arr, n)
ইনপুট
[3, 4, 5, 6, 7]
আউটপুট
X = 7 , Sum = 10