- 999 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 22:51:00.48 ID:xypOJPnn.net]
- 集合Aと整数mを引数に取り、Aの可能なm分割全体から成る集合Mを返す関数を作りたいです。
(m分割とは集合論的にm個の集合に分割することとする) 例: 集合 A = {a, b, c, d} と m=2 を引数に取ると、下記の集合Mを返す。 M = {{{a}, {b,c,d}}, {{b}, {a,c,d}}, {{c}, {a,b,d}}, {{d}, {a,b,c}} , {{a,b}, {c,d}}, {{a,c}, {b,d}}, {{a,d}, {b,c}} } 集合を表す型は何でも良いです。 Data.List でも Data.Set でも、その他の型でも。 Haskell で効率よく書けるでしょうか。 ここでいう効率とは、空間よりも時間を優先します。 空間も小さければ尚良いですし、ソースが綺麗ならいっそう良いです。 かれこれ一週間ほど考えていますが (と言っても四六時中ではありませんが)、 なかなか良いアイデアが浮かびません。 前もって言っておきますが、実際の集合Aのサイズはせいぜい20程度で、分割数も2に固定です。 質問のきっかけとなった問題は愚直に実装して解決しました。 なので、この質問は純粋に頭の体操、ゲームです。
|

|