Aurel Page on Tue, 06 Feb 2024 20:57:50 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Looping over ordered partitions


Hi,

On 06/02/2024 17:59, Bill Allombert wrote:
On Tue, Feb 06, 2024 at 11:46:55AM -0500, Charles Greathouse wrote:
The looping commands force and forpart are very convenient. I have a
problem I was working on which is looking for the smallest vector (in terms
of vecsum) with a certain property. What is the best way to perform such a
search in PARI/GP?

In my case I have dimension/vector length 11 and sum < 31. (I have an
instance with sum 31 but it's probably not optimal.)

I can do a forvec, but even forvec(v=vector(11,i,[1,7]), ...) takes a long
time (and spends a lot of time looking at values with sum > 30), and I miss
instances with numbers larger than 7. Or else I can use forpart but then I
need to permute the values (and in my case I definitely have duplicate
values, so naive 11! permutations are wasteful and slow).
Use forpart + forperm!

forpart(x=30,forperm(x,p,print(p)),,[11,11])
It does not quite solve your problem because of negative entries, but let me mention the existence of enumeration of vectors by increasing L1 norm:

? forvec(v=[0,0,0], if(normlp(v,1)>3,break); print(v))

Cheers,
Aurel