Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでサイズ4のグループの要素の異なるXORを使用して配列を検索します


サイズN(4の倍数のサイズ)の整数配列が与えられ、input [1-4]がutility_arr[1-4]に似ており、計算条件がIf arr [1]になるように、配列に対してXclusiveOR演算を実行する必要があります。 – 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演算後の結果43 2 5

説明 −排他的論理和ゲートの出力は、その両方の入力端子が互いに「異なる」論理レベルにある場合にのみ「高」になります。これらの2つの入力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

− int [] input ={7、6、4、4、3、8、9、5};

アウト −XOR演算後の結果55 7 6 2 14 15 4

説明 −排他的論理和ゲートの出力は、その両方の入力端子が互いに「異なる」論理レベルにある場合にのみ「高」になります。これらの2つの入力AとBが両方とも論理レベル「1」または「0」の場合、出力は「0」になり、ゲートは「奇数ゲートになりますが、偶数ゲートにはなりません」。つまり、入力の1が奇数の場合、出力は「1」になります。サイズが4の倍数のinput[]でのみ機能します。他のサイズの入力配列では、奇数の代わりに0が表示されます。

XOR演算後の結果557 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)=d

  • このプロセスは、4つのグループすべてに対して繰り返されます

  • ループは、配列の長さが4で除算され、一時値(ans)とユーティリティ配列(回答を格納する)が導入されるまで、2つのポインターiとjで繰り返されます。

  • 次のxor演算が実装されているforループ内

    ans =inputarray[i]⊕inputarray[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

  1. Javaで配列の要素を不変にする方法は?

    いいえ、配列の要素を不変にすることはできません。 ただし、 unmodizableList() java.util.Collectionsのメソッド classは、Listインターフェイスのオブジェクト(そのクラスを実装するオブジェクト)を受け入れ、指定されたオブジェクトの変更不可能な形式を返します。ユーザーは、取得したリストへの読み取り専用アクセスのみが可能です。 そしてasList() ArrayListのメソッド クラスは配列を受け入れ、Listオブジェクトを返します。 したがって、不変の配列を変換するには- 目的のアレイを取得します。 asList()を使用して

  2. Javaを使用してJSON配列を作成/作成する方法は?

    Json配列は、角かっこで囲まれた順序付けられた値のコレクションです。つまり、「[」で始まり、「]」で終わります。配列の値は「、」(コンマ)で区切られます。 サンプルJSON配列 {    "books": [ Java, JavaFX, Hbase, Cassandra, WebGL, JOGL] } json-simpleは、JSONオブジェクトを処理するために使用される軽量ライブラリです。これを使用すると、Javaプログラムを使用してJSONドキュメントのコンテンツを読み書きできます。 JSON-単純なMaven依存関係 以下は、JSON-si