How to step through vector permutations in a parallel loop, without generating all permutations in advance?
3 次查看(过去 30 天)
显示 更早的评论
I need a paralleised loop to step through all permutations of 1:N
Even though for some values of N it is computationally feasible, N may be too large to precompute all permutations and then step through in a simple parfor loop. It takes up too much memory. A simple solution for one worker is to just use something like p = nextperm(p), to get the next permutation in, say, lexigoraphic order. But to execute it in parallel I need a mutually exclusive resource, something like p = mutexNextPerm(), which returns the next permutation not yet processed by any worker. Only a single copy of the function must exist to serve all workers; the function mutexNextPerm() can then call p = nextperm(p) and keep track of the last p served.
Can this be done in MATLAB?
2 个评论
David Goodmanson
2022-10-15
Hi Shlomo,
I take it that the nextperm function is considered to be a given. Perhaps in mutexnextperm you could declare the most recent permutation p to be a persistent variable, and then each time that mutexnextperm is called, output nextperm(p) and update p with nextperm(p).
采纳的回答
Bruno Luong
2022-10-15
编辑:Bruno Luong
2022-10-15
function getenumperm bellow enumerates the permutation of 1:n
n = 4;
for k=1:factorial(n) % or parfor
p = getenumperm(k, n)
... do something with p
end
function p = getenumperm(k, n)
% Get a permutation from enumerate number k
p = zeros(1,n);
i = 1:n;
f = factorial(n-1);
for j=n:-1:1
r = ceil(k/f);
k = mod(k-1, f)+1;
p(i(r)) = n-j+1;
i = i([1:r-1 r+1:n r]);
f = f/(j-1);
end
end
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!