Re: Simple n-tuple problem - with no simple solution
- To: mathgroup at smc.vnet.net
- Subject: [mg115825] Re: Simple n-tuple problem - with no simple solution
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Fri, 21 Jan 2011 04:35:46 -0500 (EST)
Load Combinatorica then use 0.05 * Compositions[20, n]
Needs["Combinatorica`"] // Quiet
n = 5;
Timing[c1 = Select[Tuples[Table[Range[0, 1.0, .05], {n}]], Total[#] == 1 &];]
{14.4972, Null}
Timing[c2 = 0.05 Compositions[20, n];]
{0.044528, Null}
c1 == c2
True
Bob Hanlon
---- Don <donabc at comcast.net> wrote:
=============
Problem: Given an n-tuple (n >= 1). with each element able to take
on the values in
Range[0, 1.0, .05] , produce all the n-tuples that sum to 1.0.
The most direct way to solve this problem is to generaate all possible
n-tuples and Select out all those that sum to 1.0.
For example, when n = 2 :
n = 2;
Select[Tuples[Table[Range[0, 1.0, .05], {n}]], Total[#] == 1 &]
The problem with this solution is that the number of n-tuples that are
generated before the Select is used grows exponentially fast as a
function
of n - causing the system to run out of memory (RAM) very quickly.
Is there a more memory efficient way to solve this problem that
doesn't
use so much memory but still is not too slow in terms of processor
time?
Thank you.