20分钟写出一生经典:Dijkstra算法的奇幻旅程

80 阅读3分钟

每天, 从路径依赖到有点不确定性环境下“选择路径”:从搜索结果中找到最相关的答案,从复杂系统中找到最优方案,从数据中找到价值。而这一切背后,隐藏着一位荷兰科学家在20分钟内写下的灵感:Dijkstra算法

☕ 起源:20分钟的灵感

1956年的某天,计算机科学家 Edsger Dijkstra 坐在阿姆斯特丹一家咖啡馆。他的任务是为城市间的路线编排写程序。为了找到两地之间的最短路径,他在纸上画下了城市与路线的网络,想到了一个逐步更新最短路径的方法。

就这样,一个图算法的传奇诞生了。

“这个算法太简单,不值得写论文。”——这是他后来听到的评语。

但谁能想到,这段被低估的“简单思维”,竟成为后世数不尽的导航、调度、搜索系统的基础。

💻 Java代码:让路径可见

Dijkstra算法本质上是:从一个起点开始,逐步找到所有点的最短路径

以下是Java实现的核心代码:

public class Dijkstra {
static class Edge {
    int to, weight;
    Edge(int to, int weight) {
        this.to = to;
        this.weight = weight;
    }
}

static class Node implements Comparable<Node> {
    int id, dist;
    Node(int id, int dist) {
        this.id = id;
        this.dist = dist;
    }
    public int compareTo(Node other) {
        return Integer.compare(this.dist, other.dist);
    }
}

public static int[] dijkstra(List<List<Edge>> graph, int start) {
    int n = graph.size();
    int[] dist = new int[n];
    Arrays.fill(dist, Integer.MAX_VALUE);
    dist[start] = 0;

    PriorityQueue<Node> pq = new PriorityQueue<>();
    pq.offer(new Node(start, 0));

    while (!pq.isEmpty()) {
        Node node = pq.poll();
        int u = node.id;

        for (Edge edge : graph.get(u)) {
            int v = edge.to;
            int newDist = dist[u] + edge.weight;
            if (newDist < dist[v]) {
                dist[v] = newDist;
                pq.offer(new Node(v, newDist));
            }
        }
    }
    return dist;
}


它可以快速计算从某个起点出发,到其他所有节点的最短距离——无论是城市导航、网络路径,还是AI决策。

🚀 应用场景:从地图到AI

应用领域作用说明
地图导航如 Google Maps 中计算路线
网络路由如 OSPF 协议中用于自动计算网络路径
游戏角色路径规划控制角色移动到目标位置
操作系统调度资源调度与任务安排的最短耗时路径
AI决策系统提供“最优策略路径”,用于模拟、导航和资源规划

🤖 在AI中的价值:不只是“路径”,更是“思考”

虽然今天的AI靠的是大模型、神经网络和算力,但Dijkstra的价值远未过时。

在这些场景中,它依然闪耀:

  1. 强化学习中的路径价值评估
  2. 图神经网络中的结构特征提取
  3. 机器人与自动驾驶中的实时路径导航
  4. 搜索引擎或推荐系统中的关联关系挖掘

它甚至可以用作启发式策略的一部分,帮AI做出“更聪明”的选择。

🧠 人生的Dijkstra

如果把人生看作一张复杂的图——每一个选择、每一条路、每一段努力,都指向未知的未来。

Dijkstra算法告诉我们:

只要一步步更新,不贪心,不回头,总有一天,我们会找到那条通往最远梦想的最短路径。

在这个追求“复杂智能”的时代,我们更应铭记Dijkstra算法的本质——

简单而精准,稳定而高效。

它是一种思维方式,一种计算的哲学,一种AI世界里不可忽视的“古典智慧”。