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.