アルアカ - Arcadia Academia

Arcadia Academiaは「エンジニアリングを楽しむ」を合言葉に日本のデジタル競争力を高めることをミッションとするテックコミュニティです。

TypeScriptで学ぶ離散数学 : 集合の操作

Featured image of the post

離散数学はコンピューターサイエンスの基盤を形成する重要な分野であり、その中でも「集合」は基礎的な概念です。本記事では、TypeScriptを活用して集合の基本的な操作を学びます。プログラミングの実例を通じて離散数学を学ぶことで、理論を実践的に理解しやすくなります。


[目次を開く]

集合とは?

集合とは、異なる要素の集まりを指します。数学的には {a, b, c} のように表現されますが、プログラミングでは通常、配列やセット(Set型)を使用します。TypeScriptでは、Set クラスが集合の操作に適しています。


集合の基本操作をTypeScriptで実装する

以下では、TypeScriptで実際にコードを書きながら、集合の基本操作である和集合積集合差集合を学びます。

💡
前提知識

この章ではジェネリクスを使います。
おさらいしたい方は以下の記事を参照してください。

📄Arrow icon of a page linkTypeScriptにおけるジェネリクスの使い方


1. 和集合(Union)

和集合とは、二つの集合のすべての要素を含む集合のことです。

TypeScriptの実装例:

function union<T>(setA: Set<T>, setB: Set<T>): Set<T> {
    return new Set([...setA, ...setB]);
}

// 使用例
const setA = new Set([1, 2, 3]);
const setB = new Set([3, 4, 5]);
console.log(union(setA, setB)); // 出力: Set { 1, 2, 3, 4, 5 }

2. 積集合(Intersection)

積集合とは、二つの集合に共通する要素を含む集合のことです。

TypeScriptの実装例:

function intersection<T>(setA: Set<T>, setB: Set<T>): Set<T> {
    return new Set([...setA].filter(item => setB.has(item)));
}

// 使用例
console.log(intersection(setA, setB)); // 出力: Set { 3 }

3. 差集合(Difference)

差集合とは、片方の集合に含まれるが、もう片方には含まれない要素を含む集合のことです。

TypeScriptの実装例:

function difference<T>(setA: Set<T>, setB: Set<T>): Set<T> {
    return new Set([...setA].filter(item => !setB.has(item)));
}

// 使用例
console.log(difference(setA, setB)); // 出力: Set { 1, 2 }

4. 対称差集合(Symmetric Difference)

対称差集合とは、二つの集合のうち片方にのみ存在する要素を含む集合です。

TypeScriptの実装例:

function symmetricDifference<T>(setA: Set<T>, setB: Set<T>): Set<T> {
    const diffA = difference(setA, setB);
    const diffB = difference(setB, setA);
    return union(diffA, diffB);
}

// 使用例
console.log(symmetricDifference(setA, setB)); // 出力: Set { 1, 2, 4, 5 }

集合の応用例

集合操作は、日常のプログラミングで多くの場面に応用できます。たとえば以下のようなケースです:

  1. タグの管理: ユーザーが選択したタグとおすすめタグを和集合・積集合で操作。
  2. 重複データの削除: 配列をSetに変換して一意性を確保。
  3. データベースのクエリ: 結果のフィルタリングや交差部分の抽出。

なぜTypeScriptを使うのか?

TypeScriptを使うと、以下のようなメリットがあります:

  1. 型安全性: 間違った型のデータを防ぎ、コードの信頼性を高める。
  2. コード補完: 集合操作を実装する際の補完機能が開発効率を向上させる。
  3. 読みやすさ: ジェネリクスを使うことで、集合操作がどんなデータ型にも対応可能。

まとめ

離散数学の基本概念である集合は、コンピュータサイエンスやプログラミングにおいて幅広く利用されます。本記事では、TypeScriptを使って和集合、積集合、差集合、対称差集合を実装し、基礎から応用までを学びました。TypeScriptを活用することで、数学的な概念をより実践的に学ぶことができます。

あなたを爆速で成長させるメンタリングプログラムはこちらから↓↓

RUNTEQ(ランテック) - 実践型Webエンジニア養成プログラミングスクールの入会