今回は,
問題:集合Aに対して, 集合Bが真部分集合か, 部分集合か, 一致する要素がないか
を確認するプログラムを完成してください。
配列とArrayListでそれぞれ作成してみましょう。以下に判定部分のコードを除いたものを掲載します。目的の処理を行うコードを書き足してください。
ソースコード:HairetsuDeBubunShugoHantei.
01: //サンプルコード
02: //部分集合・真部分集合の判定
03: //filename : HairetsuDeBubunShugoHantei.java
04:
05: class HairetsuDeBubunShugoHantei {
06: public static void main(String[] args) {
07: char a[] = {’a’,’b’,’c’,’d’,’e’};
08: // char b[] = {’b’,’d’,’a’,’c’,’e’}; //部分集合,かつ等価な集合
09: char b[] = {’a’,’b’,’c’}; //真部分集合
10: // char b[] = {’a’,’b’,’c’,’f’}; //重複部分のある集合
11: // char b[] = {’x’,’y’,’z’}; //一致する部分のない集合
12:
13: //-------------------------------------------------
14: //判定し,結果を表示するコードをここに書きましょう。
15: //-------------------------------------------------
16:
17: }// end of main
18: }// end of class HairetsuDeBubunShugoHantei
ソースコード:ArrayListDeBubunShugoHantei.
01: //サンプルコード
02: //部分集合・真部分集合の判定
03: //filename : ArrayListDeBubunShugoHantei.java
04: import java.util.ArrayList;
05:
06: class ArrayListDeBubunShugoHantei {
07: public static void main(String[] args) {
08:
09: //初期化
10: ArrayList A = new ArrayList(); //集合A
11: char a[] = {’a’,’b’,’c’,’d’,’e’};
12: for (int i = 0 ; i < a.length ; ++i )
13: A.add( Character.toString(a[i]) );
14: ArrayList B = new ArrayList();//集合B
15: // char b[] = {’b’,’d’,’a’,’c’,’e’}; //部分集合,かつ等価な集合
16: char b[] = {’a’,’b’,’c’}; //真部分集合
17: // char b[] = {’a’,’b’,’c’,’f’}; //重複部分のある集合
18: // char b[] = {’x’,’y’,’z’}; //一致する部分のない集合
19: for (int i = 0 ; i < b.length ; ++i )
20: B.add( Character.toString(b[i]) );
21:
22: //---------------------------------------------
23: //A に対してB が部分集合か,真部分集合かを判定し,
24: //結果を表示するコードをここに書きましょう。
25: //---------------------------------------------
26:
27: }// end of main
28: }// end of class ArrayListDeBubunShugoHantei
解説
それぞれのプログラムの完成版を紹介します。この他により効果的なアルゴリズムが考えられるでしょうから,
配列版もArrayList版もソースコードでは,
次の図34.
この図34.
真部分集合であるときの条件式は次の通り。
XOR