如何通过向量排列在一个平行步循环,没有提前生成所有排列吗?
4视图(30天)
显示旧的评论
我需要一个paralleised循环遍历所有的排列1:N
虽然对于某些N的值在计算上是可行的,N可能太大预先执行所有排列,然后通过在一个简单的步骤
parfor
循环。它占用太多的内存。一个工人一个简单的解决方案是用类似
p = nextperm (p)
,下一个排列在lexigoraphic秩序。但并行执行它我需要一个互斥资源,类似
p = mutexNextPerm (),
返回下一个排列没有处理任何工人。只有一个副本的函数必须存在为所有员工;这个函数
mutexNextPerm ()
然后可以调用
p = nextperm (p)
和跟踪
p
服务。
这是在MATLAB完成吗?
接受的答案
布鲁诺陈德良
2022年10月15日
编辑:布鲁诺陈德良
2022年10月15日
函数
getenumperm
风箱列举的排列1:n
n = 4;
为k = 1:阶乘(n)%或parfor
p = getenumperm (k, n)
…做一些与p
结束
函数p = getenumperm (k, n)
%得到枚举数k的排列
p = 0 (1, n);
我= 1:n;
f =阶乘(n - 1);
为j = n: 1:1
r =装天花板(k / f);
k =国防部(k - 1 f) + 1;
p(我(r)) = n-j + 1;
我= ([1:r 1 r + 1: n r]);
f = f / (j - 1);
结束
结束