Here's a version of the same algorithm working on array elements instead of characters. (Messier, isn't it?)
With 10 elements (states) it takes 1.5 seconds on my machine, but I think most of the time is taken by the printing.
How many neighbors can you have? (for code testing purposes.)
#!/usr/bin/perl -l # http://perlmonks.org/?node_id=1198509 use strict; use warnings; my @elements = (0, 2, 3); @elements = 0..9; my ($first, $last) = @elements[0, -1]; my %next; @next{@elements} = @elements[1 .. $#elements]; for my $count (1,2,3,4,7,8) { print "count=$count"; my @set = ($first) x $count; local $, = ','; while(1) { print @set; my $i = $#set; $i-- while $i >= 0 and $set[$i] eq $last; $i < 0 and last; @set[$i .. $#set] = ($next{$set[$i]}) x ( @set - $i); } }
In reply to Re^3: Faster alternative to Math::Combinatorics
by tybalt89
in thread Faster alternative to Math::Combinatorics
by AppleFritter
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |