常见路径规划算法介绍

        本文介绍了算法书上常见的路径规划算法和工业界目前比较流行的高效分层路径规划算法。

目录

目录

1. 经典路径规划算法

1.1 Dijkstra

1.2 Bellman-Ford

1.3 SPFA 

 1.4 A*

1.5 Bidirectional Search(双向搜索)

 2. 分层规划算法

 2.1 CH算法 (Contraction Hierarchies)

2.1.1 CH预处理

2.1.2 CH查询

 2.2 CCH算法 (Customizable Contraction Hierarchies)

 2.3 CRP算法(Customizable Route Planning)

2.3.1 Overlay Graph(覆盖图)

2.3.2 覆盖图剪枝

2.3.3 预处理阶段

2.3.4 定制化阶段 

2.3.5 查询阶段

3.参考文献:


1. 经典路径规划算法

1.1 Dijkstra

1956 dijkstra 提出
用于计算带权有向图中单源最短路径
未使用优先队列版本,时间复杂度O(𝑉² )

        堆优化的实现版本,时间复杂度为O(E+VlogV)

1.2 Bellman-Ford

Richard Bellman Lester Ford 发表于 1958 年和 1956
用于计算带负权图的单源最短路径
使用动态规划进行算法设计
时间复杂度为 O(V * E)
实现简单 , 使用范围广 , 易于优化

     算法伪代码如下:

bool Bellman-Ford(G,w,s)        //图G 
  for each vertex v ∈ V(G):     //初始化
    d[v] ←+∞
  d[s] ←0                       	//源点距离自身为0
  for i = 1 → |V|:              
    for each edge (u,v) ∈ E(G):
      if d[v] > d[u] + w(u,v):
        d[v] = d[u] + w(u,v)
  for each edge(u,v) ∈ E(G):    //判断负权环路
    if d[v] > d[u] + w(u,v):
      return false
  return true

1.3 SPFA 

SPFA Shortest Path Faster Algorithm
•它是 Bellman-Ford 算法的队列优化版本
最坏情况时间复杂度也是 O(V * E)
两个优化策略: SLF(Small Label First )  和 LLL(Large Label Last)

 

 算法伪代码如下:

ProcedureSPFA;
Begin
    initialize-single-source(G,s);
    initialize-queue(Q);
    enqueue(Q,s);
    while not empty(Q) do begin
        u:=dequeue(Q);
        for each v∈adj[u] do begin
            tmp:=d[v];
            relax(u,v);
            if(tmp<>d[v])and(not v in Q)then enqueue(Q,v);
        end;
    end;
End; 

 1.4 A*

综合了 Best-First Search Dijkstra 算法的优点
启发式搜索提高效率,且可以保证找到一条最优路径
可扩展为ALT D* 等算法

A*算法的估算函数为:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值