![]() |
1
4
这里有一个有趣的小函数,它在图上执行非递归宽度优先搜索。
在倍频程中,它的运行速度大约是100x100邻接矩阵上递归版本的50倍。你必须在MATLAB上对其进行基准测试,看看你得到了什么。 |
![]() |
2
2
在具有n个节点的图中,最长路径不能长于n-1,因此可以将所有功率相加以进行可达性分析:
根据您的定义,您可能需要更改结果中的列和行(即,取ans(:,v))。 为了提高性能,您可以使用较低的功率来制作较高的功率。例如,可以有效地计算A+A^2+A^3+A^4+A^5:
注: 这样可以最大限度地减少矩阵乘法的次数,而且MATLAB执行矩阵平方运算的速度可能会快于常规乘法。 根据我的经验,矩阵乘法在MATLAB中相对较快,这将一次生成图中所有节点的结果(可达性)向量。如果您只对大型图的一个子集感兴趣,那么这可能不是最佳解决方案。 |
![]() |
3
1
也就是说,如果没有循环或递归调用,通常不可能找到所有可到达的节点。例如,您可以检查 (有效或无效)路径。但是,这与您的功能有很大不同,并且根据节点的数量,可能会由于要检查的路径数量惊人而导致性能损失。您当前的功能还不错,可以很好地适应大型网络。
有点离题,但由于Matlab 2016a,您可以使用
如果这是一个学生的项目,你可以争辩说,当你的函数工作时,出于性能原因,你使用了内置函数。 |
![]() |
4
1
初始化变量:
结果保存到
|
![]() |
5
0
如果你想从图中的一个点转到另一个点,从资源角度来看,最有效的方法是Dijkstra算法。Floyd-Warshall算法计算所有点之间的所有距离,并且可以并行(从多个点开始)。
|
![]() |
6
0
这个答案只是给出了来自
DasKrümelmonster's answer
,我认为这比问题中的代码要快(至少在矩阵维数不太大的情况下)。它使用
|
![]() |
user3152377 · Python:矢量化/广播会提高速度吗? 6 年前 |
![]() |
Remy · 如何在MATLAB中有效地求出阵列所选指标的最大值? 6 年前 |
![]() |
Omry Atia · 在R中,对数据帧的行应用函数并返回数据帧 6 年前 |
![]() |
Kapa11 · MATLAB:复制数组中的零项 6 年前 |
![]() |
bumblebee · 回归“累积”期望值的矢量化 6 年前 |
![]() |
fales · Python中的许多对的相同操作 6 年前 |
![]() |
user5054 · 有没有办法从矩阵中矢量化列的选择(重复)? 6 年前 |
![]() |
Fnord · 具有屏蔽索引的numpy数组上的向量化和运算 6 年前 |
![]() |
Rochak Agrawal · 以下八度音阶代码段的矢量化代码是什么 6 年前 |