查找N组节点

时间:2016-09-27 05:35:30

标签: algorithm matlab graph

我在开始和结束时有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)

1 个答案:

答案 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并计算权重。