 
Maxが小さければ,0,1, 2, …,Max−1を
符号なし整数のビット位置で示すことで
ビットの0,1で集合を表現することができます。
たとえば,16個の集合を表現するには,
以下のような16ビット長の整数1個で表現できます。
集合演算も,
整数同士のビット演算AND,ORで代替することができます。
差集合は,
A−B = A And ( Not B)
とすることができます。
CやC++では,ビットのセットは
先頭ビットまたは末尾ビットをオンにして,
シフト演算を行うことで目的とするビットのみをオンにし,
OR演算することでビットをセットできます。
しかし,C#では,BitArrayクラスを使うと,
まるで配列と同じような感覚でビットをセットしたり,
取り出すことができます。
演算もBitArrayのOr,And,Notを使って実装することができます。
[プログラム例] フォーム定義

// データ宣言
BitArray myBA1 = new BitArray(10,false);
BitArray myBA2 = new BitArray(10,false);
BitArray myBA3 = new BitArray(10,false);
// 表示
private string Bit列(BitArray A)
{
string S="";
for(int i=0;i<A.Length;i++)
{
if(A[i]) S += "1";
else S +="0";
}
return S;
}
private void 表示()
{
lblDsp1.Text=Bit列(myBA1);
lblDsp2.Text=Bit列(myBA2);
lblDsp3.Text=Bit列(myBA3);
}
// 初期表示
private void Form1_Load(object sender, System.EventArgs
e)
{ 表示(); }
// 要素設定
private BitArray AddMember(BitArray BA,int
Member)
{
BitArray B=BA;
if(Member < BA.Length) B[Member]=true;
return B;
}
// 要素の削除
private BitArray DeleteMember(BitArray BA,int
Member)
{
BitArray B=BA;
if(Member < BA.Length) B[Member]=false;
return B;
}
// BA1に要素を追加
private void button1_Click(object sender,
System.EventArgs e)
{ myBA1=AddMember(myBA1,int.Parse(textBox1.Text));
表示(); }
// BA2に要素を追加
private void button2_Click(object sender,
System.EventArgs e)
{ myBA2=AddMember(myBA2,int.Parse(textBox2.Text));
表示(); }
// BA1に要素があるかどうか?
private void button3_Click(object sender,
System.EventArgs e)
{ MessageBox.Show(myBA1[int.Parse(textBox1.Text)].ToString());
}
// BA2に要素があるかどうか?
private void button4_Click(object sender,
System.EventArgs e)
{ MessageBox.Show(myBA2[int.Parse(textBox2.Text)].ToString());
}
// BA1 Or BA2 private void button5_Click(object
sender, System.EventArgs e)
{ BitArray A=(BitArray)myBA1.Clone();
myBA3=A.Or(myBA2);表示();
}
// BA3 = BA1 And BA2
private void button6_Click(object sender,
System.EventArgs e)
{ BitArray A=(BitArray)myBA1.Clone(); myBA3=A.And(myBA2);表示();
}
// BA3 = BA1 - BA2
private void button7_Click(object sender,
System.EventArgs e)
{
BitArray A=(BitArray)myBA1.Clone();
BitArray B=(BitArray)myBA2.Clone();
myBA3=A.And(B.Not());表示();
}
// BA1から要素の削除
private void button8_Click(object sender,
System.EventArgs e)
{ myBA1=DeleteMember(myBA1,int.Parse(textBox1.Text));
表示(); }
// BA2から要素の削除
private void button9_Click(object sender,
System.EventArgs e)
{ myBA2=DeleteMember(myBA2,int.Parse(textBox2.Text));
表示(); }
|
  
1. 基本的なアルゴリズム
2. 基本的なデータ構造
3. 操作を伴うデータ構造
4. 探索
5. 再帰的アルゴリズム
6. ソート
7. 集合
8. 文字列処理
9. 色々なアルゴリズム

上のタイトルをクリックします
|