離散数学2~集合と論理演算の考え方~

snack
snack

今回の内容は論理的な思考が要求されるっすから、そういうのが苦手な人は苦労するかもっすね。

ボキタロー
ボキタロー

じゃあ僕は苦手だ。動物みたいに論理的思考できないねってよく言われる。ぼくは人間なのに。

snack
snack

プログラミングやアルゴリズムなどの分野にもつながる内容っすから頑張るっすよ。

集合とは

ある条件に基づいてグループ化されたデータの集まりのことを集合といいます。

積集合集合Aと集合Bを掛け合わせた共通の部分のこと。
和集合集合Aと集合Bを足し合わせた集合のこと。
ボキタロー
ボキタロー

う~ん。ちょっと何言ってるかわかりません。

集合は言葉で説明してもわかりづらく相手に伝わりにくいため、集合の関係を視覚的にわかりやすく表現するためにベン図が用いられます。

積集合のベン図
積集合のベン図
和集合のベン図
和集合のベン図

部分集合

集合Aの要素が、集合Bの全部または一部となっているとき、「集合Aは集合Bの部分集合である」といいます。

部分集合

論理演算

前回にも書きましたが、コンピューターは「0」か「1」の2通りしか判断できません。そのため、この2種類の数字を使って様々な条件や結果を表す必要があります。この時に用いられる演算方式が論理演算です。

参考

これに対して、私たちが一般に行っている「足し算」「引き算」「掛け算」「割り算」のことを四則演算といいます。

論理演算では、条件に沿う結果となる場合を「1」(真)、そうではない場合を「0」(偽)で表します。また、この結果を一覧表にしたものを真理値表といいます。

AND(論理積)

2つの条件が両方とも「1」(真)のときのみ、結果が「1」(真)になる演算です。

ABA AND B
0(偽)0(偽)0(偽)
0(偽)1(真)0(偽)
1(真)0(偽)0(偽)
1(真)1(真)1(真)
真理値表
AND(論理積)
ベン図

具体例で考えてみよう

例えば「日本人のうち、65歳以上でかつ男性の人」といった条件を表す場合に用いられます。

OR(論理和)

2つの条件のどちらか一方または両方とも「1」(真)のときに、結果が「1」(真)になる演算です。

ABA OR B
0(偽)0(偽)0(偽)
0(偽)1(真)1(真)
1(真)0(偽)1(真)
1(真)1(真)1(真)
真理値表
OR(論理和)
ベン図

具体例で考えてみよう

例えば「日本人のうち、65歳以上または男性の人」といった条件を表す場合に用いられます。

XOR・EOR(排他的論理和)

2つの条件のどちらか一方だけが「1」(真)のとき、結果が「1」(真)になり、両方とも「1」(真)あるいは「0」(偽)のとき、結果が「0」(偽)になる演算です。

ABA XOR B
0(偽)0(偽)0(偽)
0(偽)1(真)1(真)
1(真)0(偽)1(真)
1(真)1(真)0(偽)
真理値表
XOR・EOR(排他的論理和)
ベン図

具体例で考えてみよう

例えば「日本人のうち、65歳以上または男性の人。ただし、65歳以上の男性は除く」といった条件を表す場合に用いられます。

snack
snack

つまり、「65歳以上の日本人女性」または「65歳未満の日本人男性」という意味っすね。

NOT(否定)

条件が「1」(真)のとき、結果は「0」(偽)になり、条件が「0」(偽)のとき、結果は「1」(真)になる演算です。

ANOT A
0(偽)1(真)
1(真)0(偽)
真理値表
NOT(否定)
ベン図

具体例で考えてみよう

例えば「日本人のうち、65歳以上でない人(つまり65歳未満の人)」といった条件を表す場合に用いられます。

確認○×問題

問1

以下の1~4の記述中、二つの集合AとBについて、常に成立する関係を記述したものは2つある。ここで、(X∩Y)は、XとYの両方に属する部分(積集合)、(X∪Y)は、XまたはYの少なくとも一方に属する部分(和集合)を表す。

  1. (A∩B)は、Aでない集合の部分集合である。
  2. (A∩B)は、Aの部分集合である。
  3. (A∪B)は、(A∩B)の部分集合である。
  4. (A∪B)は、Aの部分集合である。

答え:×

まずベン図を描いて、積集合(A∩B)と和集合(A∪B)の関係を把握しましょう。

積集合(A∩B)
積集合(A∩B)
和集合(A∪B)
和集合(A∪B)
参考

∩は「キャップ」、∪は「カップ」と読みます。

1.の記述:(A∩B)は、「Aでない集合」の部分集合とはなっていないため誤りです。

2.の記述:(A∩B)は、Aの部分集合となっているため、正しい記述です。

3.の記述:集合の関係が逆になっているため誤りです。「(A∩B)は、(A∪B)の部分集合である。」であれば正しい記述となります。

4.の記述:(A∪B)は、Aよりも広い集合であるため、Aの部分集合とはいえません。よって誤りです。

問2

次の真理値表に対応する論理演算は AND である。

入力A入力B出力
000
010
100
111

答え:〇

入力A入力B出力
000
010
100
111
AND(論理積)
入力A入力B出力
000
011
101
111
OR(論理和)
入力A入力B出力
000
011
101
110
XOR・EOR(排他的論理和)
入力A出力
01
10
NOT(否定)

問3

次の真理値表で示される入力x、yに対する出力zが得られる論理演算式は NOT(x AND y)である。

xyz
001
010
100
110

答え:×

NOT(否定)は入力値の逆を出力する演算なので、 NOT(x AND y)はANDの出力結果を反転したもの(0と1を逆にしたもの)となります。

xyz
000
010
100
111
AND(論理積)
xyz
001
011
101
110
NOT(x AND y)

よって、誤りとなります。ちなみに、 NOT(x OR y)だと正しい記述となります。

xyz
000
011
101
111
OR(論理和)
xyz
001
010
100
110
NOT(x OR y)

問4

次のベン図の網掛けした部分の検索条件は(not A)and(B or C)である。

答え:〇

問5

8ビットの2進データXと00001111について、ビットごとの論理積をとった結果は「上位4ビットが全て0になり、Xの下位4ビットがそのまま残る」。ここでデータの左方を上位、右方を下位とする。

答え:〇

論理積は、2つの条件が両方とも「1」のときのみ、結果が「1」になる演算です。設問で与えられている「00001111」は上位4ビットがすべて「0」であるため、相手が「0」でも「1」でも、結果は必ず「0」となります。

また、下位4ビットはすべて「1」であるため、相手が「0」の時は結果が「0」、相手が「1」の時は結果が「1」となります。すなわち、相手の下位4ビットがそのまま残ることになります。

問6

図1のように二つの入力に対し、一つの出力を行うボックスがある。このボックスへの入力は”賛成”か”反対”のいずれかであり、入力が二つとも”賛成”のときだけ”賛成”と出力し、その他のときは”反対”と出力する。図2のように、三つの入力を二つのボックスに入力した場合を考えたとき、「入力が三つとも”賛成”のときだけ、”賛成”と出力する。」

答え:〇

最終的な出力が”賛成”となるためには、「入力1と入力2の出力結果」および「入力3」が”賛成”となる必要があります。また、入力1と入力2の出力結果が”賛成”となるためには、入力1と入力2の両方が”賛成”である必要があります。

よって、3つの入力がすべて”賛成”のときだけ、最終的な出力が”賛成”となります。逆に言うと、入力に1つでも”反対”があれば、最終的な出力結果は”反対”となります。