图神经网络--Dijkstra算法原理及其实现(附代码)

ce6cc47e68b1c4a4607d82a8036495f3.png

来源:调度与优化算法的集结地
本文约1000字,建议阅读5分钟
本文为你介绍Dijkstra算法的实现。

Dijkstra算法是一种用于解决带权有向图的单源最短路径问题的贪心算法。其基本思想是从起点开始,逐步扩展到离起点更远的节点,直到扩展到终点为止。在这个过程中,每次选择当前距离起点最短的节点,并尝试通过这个节点更新其他节点的距离。

Dijkstra算法的实现步骤如下:

  1. 初始化:将起点到每个节点的距离设为无穷大,将起点到自己的距离设为0。

  2. 选择起点:选择起点并标记为已访问。

  3. 扩展节点:遍历所有与起点相邻的节点,计算经过起点到达这些节点的距离,并更新距离。

  4. 选择下一个节点:从未访问过的节点中选择距离起点最近的节点,并标记为已访问。

  5. 重复步骤3和4,直到到达终点或所有节点都被访问。

  6. 回溯路径:从终点出发,沿着距离逐渐缩小的路径回溯到起点。

Dijkstra算法的时间复杂度为O(n^2),其中n为节点数。如果使用优先队列(例如二叉堆)来选择下一个节点,则时间复杂度可以降为O(mlogn),其中m为边数。

matlab实现

function [dist, prev] = dijkstra(graph, start)
    n = size(graph, 1);


    % 初始化距离和前驱
    dist = Inf(1, n);
    prev = zeros(1, n);
    dist(start) = 0;


    % 标记已访问的节点
    visited = zeros(1, n);


    for i = 1:n-1
        % 选择距离起点最近的节点
        [~, u] = min(dist .* (1 - visited));


        % 标记节点为已访问
        visited(u) = 1;


        % 更新距离和前驱
        for v = 1:n
            if graph(u,v) ~= 0 && dist(u) + graph(u,v) < dist(v)
                dist(v) = dist(u) + graph(u,v);
                prev(v) = u;
            end
        end
    end
end

49d95622411d6bd38f347f078a2301f7.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值