「集合」をプログラムに落とし込む

2017年11月9日


最近数学にとてつもなくハマり、勉強をするようになりました。今まで黙々と勉強をしていたのですが、「せっかくなら勉強した内容をプログラムに落とし込んだらいいのでは?」という考えにいたりました。その方が、定着度も上がるだろうし、普段行なっているプログラミングにも数学の知識が活きやすくなると思ったのです。

というわけで、吸収した数学知識を徐々にプログラムに落とし込んでいきます。今回は「集合」。言語はPythonです。

集合

対象としているものの集まりのうち、対象物が属しているか属していないかが、明確に判定できる集まりを集合という。
集合を構成しているものを要素、またはという。明示方法としては、列挙と条件が挙げられる。

  • 列挙
    A={1,2,3,4,5}

  • 条件
    A={n|1<=n<=5、nは自然数}

といった感じ。
要素数が少なければ列挙で明示できますが、多くなると条件式で表されることが多いです。

Pythonで集合を表現

Pythonには、集合を扱うためのデータ構造があります。
{}set()を使用します。

対象としているもの全体を全体集合といいます。また、要素を一つも持たない集合を空集合といいます。
そして、ある集合に含まれる集合のことを部分集合と言います。
例えば、集合Aの要素が集合Bの要素でもある時、AはBの部分集合といえる。

$$A \subset B$$

Pythonで集合演算

次はPythonで集合演算をしてみる。
集合サンプルとして、アニメ好きなAくん、Bくん、Cさんの3人を用意する。3人にはあるアニメリストからオススメのアニメを5個ずつ答えてもらったとする。

<アニメリスト>

  • シュタインズゲート
  • ソードアートオンライン
  • 銀魂
  • PSYCHO-PASS
  • NEW GAME!
  • SHIROBAKO
  • 化物語
  • 魔法少女まどか☆マギカ
  • メイドインアビス
  • 涼宮ハルヒ憂鬱
  • 四月は君の嘘
  • 幼女戦記

<全体集合と3人の回答(集合)>

このサンプルを使用して集合演算をしていきます。

ベン図

ベン図で表すと以下の通り。

和集合

$$A \cup B$$

$$B \cup C$$

$$C \cup A$$

積集合

$$A \cap B$$

$$B \cap C$$

$$C \cap A$$

$$A \cap B \cap C$$

差集合

$$A \setminus B$$

$$B \setminus C$$

$$C \setminus A$$

対称差集合

補集合

$$\overline{ A }$$

$$\overline{ B }$$

$$\overline{ C }$$

番外編

ド・モルガンの法則

ついでにド・モルガンの法則が本当に成り立っているのかどうかをプログラムで確認してみましょう。
$$\overline{ A \cap B } = \overline{ A } \cup \overline{ B }$$

上記の出力結果はTrue

$$\overline{ A \cup B } = \overline{ A } \cap \overline{ B }$$

上記の出力結果もTrue

したがって、ド・モルガンの法則は成り立っていることが確認できる。

Python, 数学

Posted by tanatyu


PAGE TOP