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
,我认为这比问题中的代码要快(至少在矩阵维数不太大的情况下)。它使用
|
Y.C. · 以不同颜色打印x轴上方的y值 2 年前 |
dd24 · 在MATLAB中逐部分执行python程序 2 年前 |
fateme · MATLAB,神经网络 2 年前 |
Marta · 使用*时出错-内部尺寸矩阵必须一致 6 年前 |
Morpheus · x*x^T的Matlab符号计算 6 年前 |
Lawa · 如果列中的一个元素等于零,则将整列设为零 6 年前 |