in reply to Re^2: Faster alternative to Math::Combinatorics
in thread Faster alternative to Math::Combinatorics
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); } }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^4: Faster alternative to Math::Combinatorics
by AppleFritter (Vicar) on Sep 01, 2017 at 18:24 UTC |