1

我有一个矩阵:

       1          2         3         4         5         6    
   1 0.7431    0.2769    0.0000    0.1869    0.2760    0.9597
   2 0.2769    0.0462    0.0344    0.4898    0.6797    0.3404
   3 0.0000    0.0344    0.4387    0.4456    0.6551    0.0000
   4 0.1869    0.4898    0.4456    0.6463    0.1626    0.2238
   5 0.2760    0.6797    0.6551    0.1626    0.1190    0.7513
   6 0.9597    0.3404    0.0000    0.2238    0.7513    0.2551

整数是索引。我有一个哈希表,其中每个索引都是一个人。小数是索引之间的交互。现在我想用索引列表(1、3、6)对这个矩阵进行子集化,这意味着我只关心 1、3 和 6 之间的交互。

Subset:

       1             3              6
    1 0.7431       0.0000          0.9579

    3 0.0000       0.4387          0.0000

    6 0.9579       0.0000          0.2551

一些人之间没有交互,例如人 1 和 3 或人 3 和 6。但是 1 与 2、4、5 和 6 交互,它们与 3 交互。所以 1 通过 2、4、5 或 6 交互 3。它可以是 1->2->4->3 或 1->4->3 类似的东西。我想为那些没有直接交互的 2 个节点找到最短路径。我想对原始矩阵进行子集化,然后找到没有交互的节点之间的最短路径。对不起各位,我没有说清楚。

4

1 回答 1

1

我想你想看看Dijkstra 的算法

这里有一个计算 Dijkstra 算法的 Mathworks 文件交换算法:

http://www.mathworks.com/matlabcentral/fileexchange/36140-dijkstra-algorithm

我以前用它来计算最短路径……它非常有效并且保证是最优的。真的没有必要对矩阵进行子集化......如果有你不想考虑的节点,只是不要把它们放在你的矩阵中。

于 2016-02-23T20:26:58.867 回答