From: Dan Zwell Date: 2007-07-23T15:36:24+09:00 Subject: Re: array permutations Alex Ciarlillo wrote: > The other day I ran into a problem where I needed all the permutations > of a given array. I knew I had covered this in some of my CS classes but > couldn't come up with the algorithm at first. I figured it out on the > drive home from work and decided to rubify it and add it as a method to > the array class. This is what I came up with and was just wondering if > anyone else had a cleaner or more effecient way of accomplishing this. > > class Array > def each_perm > if self.size == 1 > yield self > else > self.each_index do |i| > tmp, e = self.dup, self[i] > tmp.delete_at(i) > tmp.each_perm do |x| > yield e.to_a + x > end > end > end > end > end > > > --AC Have a look at this thread: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/247669 . It's a port of the GCC library version to ruby. As for efficiency, you'll have to run them both (I haven't read either version carefully). One factor that might make his slower is that it should avoids yielding duplicates. Have fun, Dan