From: UENO Katsuhiro Date: 2003-02-17T21:19:02+09:00 Subject: [ruby-list:37116] Re: 配列とべき集合 うえのです。 On Mon, 17 Feb 2003 20:20:34 +0900 Masahiro Sato wrote: > 配列からべき集合をつくるメソッドがないかと検索したら、 > ruby-talkにはあったのですが日本語のほうには > なかったのでこちらに投稿(?)しておこうと思います。 snip.. > いちおう正しく動くと思いますが、 > もっといいアルゴリズムがあるのではないかと思います。 > そういうのがあったら、もしくは既存のメソッドがあれば > 教えてください。 べき集合しか求められませんが、こんなのは如何でしょう。 class Array def power ret = [] 0.upto(2**size - 1) { |n| a = [] each { |i| a.push i if n & 1 == 1 n >>= 1 } ret.push a } ret end end p [].power # => [[]] p [1].power # => [[],[1]] p [1,2].power # => [[], [1], [2], [1, 2]] p [1,2,3].power # => [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]] -- ---- - - - -- - うえの かつひろ