เราได้รับอาร์เรย์จำนวนเต็มขนาด N (ขนาดของหลาย ๆ 4) และเรามีการดำเนินการ Xclusive OR บนอาร์เรย์ที่อินพุต[1- 4] คล้ายกับsutility_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[] อินพุต ={ 5, 2, 3, 4 };
ออก − ผลลัพธ์หลังการดำเนินการ XOR 4 3 2 5
คำอธิบาย −เอาต์พุตของเกท Exclusive-OR จะ "สูง" เมื่อเทอร์มินัลอินพุตทั้งสองอยู่ที่ระดับลอจิก "ต่างกัน" จากกัน เอาต์พุตจะเป็น "0" หากอินพุตทั้งสองนี้ A และ B ทั้งคู่อยู่ที่ระดับตรรกะ "1" หรือ "0" ทำให้เกตเป็น "คี่ แต่ไม่ใช่เกตคู่" กล่าวอีกนัยหนึ่ง เมื่ออินพุตมีจำนวน 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[] อินพุต ={ 7, 6, 4, 4, 3, 8, 9, 5 };
ออก ผลลัพธ์หลังการดำเนินการ XOR 5 5 7 6 2 14 15 4
คำอธิบาย − เอาต์พุตของเกท Exclusive-OR จะ "สูง" เมื่อเทอร์มินัลอินพุตทั้งสองอยู่ที่ระดับลอจิก "ต่างกัน" จากกัน เอาต์พุตจะเป็น "0" หากอินพุตทั้งสองนี้ A และ B ทั้งคู่อยู่ที่ระดับตรรกะ "1" หรือ "0" ทำให้เกตเป็น "คี่ แต่ไม่ใช่เกตคู่" กล่าวอีกนัยหนึ่ง เมื่ออินพุตมีจำนวน 1 วินาที ผลลัพธ์จะเป็น "1" จะใช้ได้เฉพาะอินพุต[]ของขนาดทวีคูณของ 4 เท่านั้น อาร์เรย์อินพุตขนาดอื่นๆ จะแสดง 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 (As (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) =ง
-
กระบวนการนี้ทำซ้ำสำหรับทั้งสี่กลุ่ม
-
วนซ้ำด้วย 2 พอยน์เตอร์ i และ j จนถึงความยาวของอาร์เรย์หารด้วยสี่ และแนะนำค่า temp (ans) และอาร์เรย์ยูทิลิตี้ (ซึ่งเก็บคำตอบไว้)
-
ภายใน for วนซ้ำตามการดำเนินการ 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