(木曜日の続きなのです)
あいだがあくと文字通り“間が抜ける”のだけど、
- [雑記/備忘]データ構造の基本としてのコレクション
- [雑記/備忘]演算「・」と定数「I」をオーバーロード定義する
の次の話です。リスト、バッグ、セットのパワーを作ります。って、パワーって何?
えーとですね、"power"の訳語は「べき」で、パワーを作るってのは:
集合Xから、Xの部分集合全体の集合を構成すること
です。が、実例を出したほうが分かりやすいでしょう。
Xのパワーセット(訳語はベキ集合)をPow(X)と書くことにして:
- Pow({}) = {{}}
- Pow({1}) = {{}, {1}}
- Pow({1, 2}) = {{}, {1}, {2}, {1, 2}}
我々が扱っていた集合は、(ジェネリックスの記法で書けば)List
X上で定義されていた演算や定数(の対応物)をPow(X)上でも考えることを、「…をPow(X)に持ち上げる(リフトする)」と表現することがあります。パワーセットに持ち上げるのでパワーリフティングってことになります。
2項演算・と定数Iのパワーセットへの持ち上げは次のとおり:
- A・B = {x・y | x∈A, y∈B}
- 持ち上げたI = {I} (シングルトンセットとして持ち上げる)
これじゃ分かりにくいので、A・Bを作る擬似コードを書いておきましょう。
Result = I; // まず空コレクションを準備
foreach (x in A) {
foreach (y in B) {
Result.add(x・y); // あらゆる組み合わせを寄せ集めて、
}
}
return Result; // それを返す。
(続く)