string[] x = new[] { "A", "B", "C" };
string[] y = new[] { "A", "B", "D"};
としたとき,この積集合を X.Intersect(Y) から求めると,
"A", "B"
となる.それぞれの積集合は空集合(AB = φというわけ)になり,数学的にはまったく使えない(和集合も同様).これを集合演算というのかは怪しいけど,SQL的なLINQだから仕方ないのかね.Maximaの数式処理を噛ましてやろうかと思っても見あたらない.他に数学的なものがあるかもしれないけど,コーディング熱が上がってきたので,数学的な集合演算コードを自作した.
C#の(数学的・集合論的な)集合演算コード(簡易版)
(興味ある人はどうぞ,C#を始めて2週間なのでコードは汚い)
演算子のオーバーロードをすれば良かったんだけど,ぺーペーなので,メソッドでお腹いっぱい.calcProductSet(x, y) のようにメソッドを呼べば,その積x*yが戻り値になります.和集合も同じ感じて,吸収則がバシバシ動いているので,きれいな集合になると思います.
ただ,このバーションは,何も考えずに作ってしまったから,集合は一文字しか対応してないという問題作.集合"abc"はa*b*cのように積集合に扱われます.まぁ,後からちゃんと文字列を集合名(例えば,"A_is_1"とか"B_is_0"とかがそれぞれ一つの集合として扱われる)にした修正ヴァージョンを作り直したんだけど,コードがゴチャゴチャになったので公開は未定.コードは汚くなったけど,ちゃんと他のプログラムに埋め込んでちゃんと動きましたよ!
0 コメント:
コメントを投稿