From: Shin-ichiro HARA Date: 2003-02-18T11:36:07+09:00 Subject: [ruby-list:37122] Re: 配列とべき集合 原です。 >佐藤と申します。 > >配列からべき集合をつくるメソッドがないかと検索したら、 短いのでは、、、 class Array def power a = [[]] each do |x| a.concat a.map{|y| y + [x]} end a end end ですかね。 >あとall_subsetsのようなのはよく使うと思うので >標準のメソッドでもいいのではないかと思います。 いや、やっぱり Array のメソッドとしては、めったに使わないんじゃ ないかなあ。(^^; (私は使うけど。) でも、新しい Ruby では Set クラスが標準添付されるみたい (http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=Set) なんで、ここには入っていてもいいと思います。 ところで、この Set を知らないで作った FiniteSet というライブラリ があります。 http://blade.nagaokaut.ac.jp/~sinara/ruby/math/finite-set-0.95/doc-ja/index-ja.html ここでは、 Set#power_set というメソッドがあります。あと、Map クラ スも作ったので、X の部分集合は Set[0, 1] ** X とも書けます。 それから、何度も同じコードを書くので、順列組み合わせ系のコードだけ でも集めようとして、 http://blade.nagaokaut.ac.jp/~sinara/ruby/math/combinatorics/index.html というページを作り始めたんですが、始めたとたん飽きて止めました。(^^; 本当は、児玉さんの言うようなストリーム系とかイテレータ系とか、微妙に 違うアルゴリズムを網羅するつもりだったんですが。 こんなふうにメーリングリストに投稿してもらって、メーリングリストの 番号を収集した方がずっと楽ですね。