数え上げた
言語のマニュアルを見るのは、たまにしかやらないので見逃していた。
Ruby の Array クラスには combination と permuation が定義されていた。
数え上げよう(組合せ編) - tkenichiの日記 は忘れてください。
[0,1,2,3,4].combination(2) do |c| p c end
の出力が
[0, 1] [0, 2] [0, 3] [0, 4] [1, 2] [1, 3] [1, 4] [2, 3] [2, 4] [3, 4]
こうなる。
十分速い。
n = Array.new(20){ |i| i } count = 0 t = Time.now n.combination(10){|c| count += 1 } p Time.now - t p count
を実行して Intel Core2 2.13GHz Linux ruby1.8.7 で
0.187 184756
使わない手はないですね。組み合わせ問題を解くのに使えそうです。