Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 크기가 4인 그룹의 요소에 대해 서로 다른 XOR을 사용하여 배열 찾기

<시간/>

크기가 N(4배의 크기)인 정수 배열이 주어지고 input[1-4]가 유틸리티_arr[1-4]와 유사하고 계산 조건이 If arr[1이 되도록 배열에 대해 Xclusive OR 연산을 수행해야 합니다. – 4] ={a1, a2, a3, a4} 그러면 q[1 – 4] ={a1 ⊕ a2 ⊕ a3, a1 ⊕ a2 ⊕ a4, a1 ⊕ a3 ⊕ a4, a2 ⊕ a3 ⊕ a4}

이에 대한 다양한 입력 출력 시나리오를 살펴보겠습니다. -

에서 - 정수[] 입력 ={ 5, 2, 3, 4 };

밖으로 − XOR 연산 후 결과 4 3 2 5

설명 −Exclusive-OR 게이트의 출력은 두 입력 단자가 서로 "DIFFERENT" 논리 레벨에 있을 때만 "HIGH"가 됩니다. 이 두 입력 A와 B가 모두 논리 레벨 "1" 또는 "0"인 경우 출력은 "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

에서 - 정수[] 입력 ={ 7, 6, 4, 4, 3, 8, 9, 5 };

밖으로 − XOR 연산 후 결과 5 5 7 6 2 14 15 4

설명 − 배타적 논리합 게이트의 출력은 두 입력 단자가 서로 "DIFFERENT" 논리 레벨에 있을 때만 "HIGH"가 됩니다. 이 두 입력 A와 B가 모두 논리 레벨 "1" 또는 "0"인 경우 출력은 "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 ((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를 얻을 수 있습니다. ㄹ

  • 이 과정은 4개 그룹 모두에 대해 반복됩니다.

  • 루프는 배열의 길이를 4로 나누고 임시 값(ans)과 유틸리티 배열(답을 저장하는)이 도입될 때까지 2개의 포인터 i와 j로 반복됩니다.

  • 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]))

  • 그리고 포인터는 다음 4자 세트에 대해 업데이트됩니다.

  • 마지막으로 배열이 인쇄되고 결과가 사용자에게 반환됩니다.

예시

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