हमें आकार N (4 के गुणक का आकार) का एक पूर्णांक सरणी दिया गया है और हमें सरणी पर XOR ऑपरेशन करना है जैसे कि input[1-4] utility_arr[1-4] जैसा दिखता है और गणना की शर्तें हैं: यदि arr[1-4] = {a1, a2, a3, a4} तो q[1-4] = {a1 ⊕ a2 ⊕ a3, a1 ⊕ a2 ⊕ a4, a1 ⊕ a3 ⊕ a4, a2 ⊕ a3 ⊕ a4}
आइए इसके लिए विभिन्न इनपुट आउटपुट परिदृश्य देखें -
इनपुट - int[] input = { 5, 2, 3, 4 };
आउटपुट - XOR ऑपरेशन के बाद परिणाम 4 3 2 5
व्याख्या - एक एक्सक्लूसिव-OR गेट का आउटपुट केवल "HIGH" होता है जब इसके दोनों इनपुट टर्मिनल एक दूसरे से "DIFFERENT" लॉजिक स्तर पर होते हैं। आउटपुट "0" होता है यदि ये दो इनपुट, A और B, दोनों लॉजिक स्तर "1" या "0" पर हैं, जिससे गेट "odd but not the even gate" बन जाता है। दूसरे शब्दों में, जब इनपुट में 1 की विषम संख्या होती है, तो आउटपुट "1" होता है।
a1 ⊕ a2 ⊕ a3 = 5 ⊕ 2 ⊕ 3 = 4
a1 ⊕ a2 ⊕ a4 = 5 ⊕ 2 ⊕ 4 = 3
a1 ⊕ a3 ⊕ a4 = 5 ⊕ 3 ⊕ 4 = 2
a2 ⊕ a3 ⊕ a4 = 2 ⊕ 3 ⊕ 4 = 5
इनपुट - int[] input = { 7, 6, 4, 4, 3, 8, 9, 5 };
आउटपुट - XOR ऑपरेशन के बाद परिणाम 5 5 7 6 2 14 15 4
व्याख्या - एक एक्सक्लूसिव-OR गेट का आउटपुट केवल "HIGH" होता है जब इसके दोनों इनपुट टर्मिनल एक दूसरे से "DIFFERENT" लॉजिक स्तर पर होते हैं। आउटपुट "0" होता है यदि ये दो इनपुट, A और B, दोनों लॉजिक स्तर "1" या "0" पर हैं, जिससे गेट "odd but not the even gate" बन जाता है। दूसरे शब्दों में, जब इनपुट में 1 की विषम संख्या होती है, तो आउटपुट "1" होता है। यह केवल 4 के गुणकों के आकार के input[] के लिए काम करेगा, अन्य आकार के इनपुट सरणी विषम स्थान वाले नंबरों के स्थान पर 0 दिखाएंगे।
XOR ऑपरेशन के बाद परिणाम 5 5 7 6 2 14 15 4
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण इस प्रकार है -
XOR के गुणों के अनुसार a ⊕ a = 0 और a ⊕ 0 = a। (a ⊕ b ⊕ c) ⊕ (b ⊕ c ⊕ d) = a ⊕ d (क्योंकि (b ⊕ c) ⊕ (b ⊕ c) = 0)
गणना के लिए सरणी को 4 के समूहों में विभाजित किया जाता है और हम प्रत्येक समूह के परिणामों की गणना के लिए XOR के गुणों का पालन करेंगे।
उपरोक्त गुण का उपयोग करके (a ⊕ d) का उपयोग करके हम b और c की गणना कर सकते हैं (a ⊕ b ⊕ d) ⊕ (a ⊕ d) = b (a ⊕ c ⊕ d) ⊕ (a ⊕ d) = c
और b और c का उपयोग करके हम निम्न दृष्टिकोण का उपयोग करके a और d प्राप्त कर सकते हैं (a ⊕ b ⊕ c) ⊕ (b) ⊕ (c) = a (b ⊕ c ⊕ d) ⊕ (b) ⊕ (c) = d
यह प्रक्रिया सभी चार समूहों के लिए दोहराई जाती है
दो पॉइंटर्स i और j के साथ एक लूप को सरणी की लंबाई को चार से विभाजित करने तक दोहराया जाता है और एक अस्थायी मान (ans) और एक उपयोगिता सरणी (जो उत्तर संग्रहीत करती है) पेश की जाती है।
फॉर लूप के अंदर निम्नलिखित XOR ऑपरेशन लागू किए जाते हैं
ans = इनपुट सरणी[i] ⊕ इनपुट सरणी[i+3]
उपयोगिता सरणी[i+1] (b की गणना) = इनपुट सरणी[i+1] ⊕ ans
उपयोगिता सरणी[i+2] (c की गणना) = इनपुट सरणी[i+2] ⊕ ans
उपयोगिता सरणी[i] (a की गणना) = इनपुट सरणी[i] ⊕ ((उपयोगिता सरणी[i + 1]) ^ (उपयोगिता सरणी[i + 2]))
उपयोगिता सरणी[i] (d की गणना) = इनपुट सरणी[i+3] ⊕ ((उपयोगिता सरणी[i + 1]) ^ (उपयोगिता सरणी[i + 2]))
और अगले चार वर्णों के सेट के लिए पॉइंटर अपडेट किया जाता है
अंत में, सरणी प्रिंट की जाती है और परिणाम उपयोगकर्ता को वापस कर दिया जाता है।
उदाहरण
import java.util.Arrays; import java.util.List; public class Tutorials{ static int ans = 0; public static void main(String args[]){ int[] input = {7, 1, 2, 3}; int[] arr = new int[input.length]; for (int i = 0, j = 0; j < input.length / 4; j++){ ans = input[i] ^ input[i + 3]; arr[i + 1] = input[i + 1] ^ ans; arr[i + 2] = input[i + 2] ^ ans; arr[i] = input[i] ^ ((arr[i + 1]) ^ (arr[i + 2])); arr[i + 3] = input[i + 3] ^ (arr[i + 1] ^ arr[i + 2]); i += 4; } System.out.println("Different XORs of elements in groups of size 4 is: "); for (int i = 0; i < arr.length; i++){ System.out.println(arr[i]); } } }आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा
Different XORs of elements in groups of size 4 is : 4 5 6 0