Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ค้นหาอาร์เรย์โดยใช้องค์ประกอบ XOR ต่างๆ ในกลุ่มขนาด 4 ใน Java


เราได้รับอาร์เรย์จำนวนเต็มขนาด 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