我在开始和结束时有N
个节点数,可以将它们配对为N
个集合数(1 to 1, .., n to n, .., N to N
)。但是,我在开始和结束之间有M
个阶段(可以假设为并行阶段),并且每个阶段都有R
个节点R>=N
。
如果我考虑开始n
节点结束n
节点(即n to n
对),我必须通过(M+1)
跳到达终点节点,并且R^M
可能的路径。因此,所有对的所有可能路径都是N*R^M
。
我将每个链接加权为:第i
阶段的节点m
与阶段j
的节点m+1
之间的链接为w_{i,j}^{m,m+1}
。
我想写一个MATLAB代码来生成每对可能的所有路径,即N对。有人可以帮助我吗?
我只尝试使用穷举搜索,只有2个开始和结束节点,其中2个阶段有3个节点。但我不知道如何以有效的方式为一般网络写这个。请帮帮我!!!
已添加:例如:N = M = 2, R = 3
我每对都有R^M=2^3=9
个可能的路径。对于这两对,我有18
。对于1 to 1
对,可能的路径设置为:
{1-1-1-1, 1-1-2-1,1-1-3-1
1-2-1-1, 1-2-2-1,1-2-3-1
1-3-1-1, 1-3-2-1,1-3-3-1}
和相应的权重集是(0
表示开始):
{w_{1,1}^{0,1}-w_{1,1}^{1,2}-w_{1,1}^{2,3}; w_{1,1}^{0,1}-w_{1,2}^{1,2}-w_{2,1}^{2,3}; w_{1,1}^{0,1}-w_{1,3}^{1,2}-w_{3,1}^{2,3}, ........., w_{1,3}^{0,1}-w_{3,3}^{1,2}-w_{3,1}^{2,3}}
2 to 2
对也是如此。
实际上,我的穷举搜索我生成每一跳作为矩阵与随机生成的权重。从开始到第一跳:A=rand(2,3)
,然后第一跳到第二跳:B=rand(3,3)
,第二跳到结束:C=rand(3,2)
答案 0 :(得分:0)
好的,根据您的更新,您只想生成笛卡尔积
{i} X {1,2,...,R} ^ M X {j}
快速而肮脏的方法是做这样的事情:
paths = zeros(R ^ M, M + 2); # initialize array
paths(:, 1) = i; # start all paths at node i
paths(:, M+2) = j; # end all paths at node j
for c = 1:M
for r = 1:(R ^ M)
paths(r, c+1) = mod(idivide(r-1, R ^ (c-1)), R)+1 ;
end
end
然后,您可以遍历paths
并计算权重。