Math problem giving me a headache, please advise!

giorgioesse's icon

Hello math folks
I need your help to help me solve a math trick, any advice is very appreciated

I have these numbers: 4 3 2 1.5 1 0.75 0.5 0.25
I need to create a coll that contains ALL the permutations of these numbers which the sum is always equal to 4
any idea for a quick patch or suggestion?

many thanks

giorgioesse's icon

For permutations I mean
4
3 1
1 3
2 2
2 1 1
1 2 1
1 1 2
1 1 1 1
0.5 1 1 1
1 0.5 1 1
1 1 0.5 1
1 1 1 0.5
and so on...

ark's icon

You used the word "permutation," but the example you gave is not a collection of permutations. A permutation is a reordering, so if your original sequence contains 8 elements, as yours does, every permutation will also contain 8 elements.

So I haven't a clue about what problem you're trying to solve. Before anyone can help you, you'll have to explain the problem accurately and completely.

giorgioesse's icon

you're right, I'll try to explain better.

I need to create a coll that contains all the possible lists (from 1 to 16 numbers) using (4 3 2 1.5 1 0.75 0.5 0.25)
in which total sum is 4
for example:

4
---
2 2
---

2 1 1
1 2 1
1 1 2

--

1.5 1 1.5
1 1.5 1.5
1.5 1.5 1.5

---

0.5 0.5 1 2
2 1 0.5 0.5
0.5 1 0.5 2
2 1 0.5 0.5
0.5 2 0.5 1

and so on

as you can see as the list grows I need also all the permutations

sorry for my english, not easy to talk of math in a foreign language

giorgioesse's icon

1.5 1 1.5
1 1.5 1.5
1.5 1.5 1

SORRY

Pedro Santos's icon

I would concentrate my efforts on 2 individual problems:

1- Getting the different combinations of numbers, independently of the order of the elements in the list.
To that extent, you could use a high to low generation methodology. Here's an example to get to the number "3":
3
2 1
2 0.75 0.25
2 0.5 0.5
2 0.5 0.25 0.25
2 0.25 0.25 0.25 0.25
1.5 1.5
1.5 1 0.5
1.5 1 0.25 0.25
1.5 0.75 0.75
1.5 0.75 0.5 0.25
1.5 0.75 0.25 0.25 0.25
1.5 0.5 0.5 0.5
1.5 0.5 0.5 0.25 0.25
.......

2- Generate all possible permutations for each list created, maybe with the help of the [permute] object from http://www.essl.at/works/rtc.html

Disclaimer: I've never tried any of this... ;-)

giorgioesse's icon

Hi Pedro
yes that's what I'm doing.. I just hoped there was a faster method..
For permutations I'm using zl.permute

it is coming like this

4

3 1
3 0.75 0.25
3 0.5 0.5
3 0.5 0.25 0.25
3 0.25 0.25 0.25 0.25

2 2
2 1 1
2 1 0.75 0.25
2 1 0.5 0.5
2 1 0.5 0.25 0.25
2 1 0.25 0.25 0.25 0.25
2 1.5 0.5
2 1.5 0.25 0.25
2 0.75 0.25 0.75 0.25
2 0.5 0.5 0.5 0.5
2 0.5 0.25 0.25 0.5 0.25 0.25
2 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25

1.5 1.5 1 0.75 0.25
1.5 1.5 0.5 0.5
1.5 1.5 0.5 0.25 0.25
1.5 1.5 0.25 0.25 0.25 0.25

and so on...

giorgioesse's icon

sorry zl.scramble

Pedro Santos's icon

Great patch, nicolas! Simple and efficient.