Dijkstra算法是计算图中节点之间最短路径的经典算法,网上关于Dijkstra算法原理介绍比较多,这里不再多讲。值得一提的是,当图中节点之间的权重都为1时,Dijkstra算法就变化为一般意义上的广度优先搜索算法(Breadth-first search algorithm)。

  Dijkstra算法流程如下:

Dijkstra算法流程

 

  在介绍Fast marching算法之前先提下Eikonal方程,Eikonal方程属于非线性偏微分方程,可以认为是一种近似波动方程,它的形式如下:

  Eikonal方程解u(x)的物理含义是从源点x0以速度f(x)到达计算域Ω内x点所需要消耗的最短时间。当f(x) = 1的特殊情况下,方程解就代表计算域Ω内的距离场。

  [Sethian et al. 1999]提出的Fast marching算法是一种求解Eikonal方程的数值方法。下面首先以二维正交栅格(栅格间距为h)为例,将方程左边的梯度项用一阶近似代替后可以得到:

max(U – UA, U – UB, 0)2 + max(U – UC, U – UD, 0)2 = h2/f(x)2

  假设UA = min(UA, UB),UC = min(UC, UD),那么:

(U – UA)2 + (U – UC)2 = h2/f(x)2

  当||UA – UC || ≤ h/f(x)时,

  当||UA – UC || > h/f(x)时,U = min(UA, UC) + h/f(x)。

Fast marching算法也可以用于计算三角网格上的测地距离。对于三角面片x1x2x,,因此,Eikonal方程可以近似变为如下二次方程:

(aTQa)U(x)2 + (2aTQb)U(x) + bTQb = 1/f(x)2

其中:a = [1;1],b = –[Ux1;Ux2],M = [x – x1; x – x2],Q = (MMT) –1。通过求解上式方程可以得到x点的测地距离。

  Fast marching算法流程如下:

Fast marching算法流程

 

  Dijkstra算法和Fast marching算法思想相似,不同之处在于Dijkstra算法利用节点之间的欧式距离进行更新,而Fast marching算法利用由Eikonal方程化简得到的近似偏微分方程进行更新。

本文为原创,转载请注明出处:http://www.cnblogs.com/shushen

参考文献:

[1] J. A. Sethian, A. Vladimirsky. Fast methods for the eikonal and related Hamilton-Jacobi equations on unstructured meshes. (1999). Proceedings of the National Academy of Sciences, 97(11), 5699-5703.

网格最短路径算法(Dijkstra & Fast Marching)的更多相关文章

  1. 最短路径算法Dijkstra和A*

    在设计基于地图的游戏,特别是isometric斜45度视角游戏时,几乎必须要用到最短路径算法.Dijkstra算法是寻找当前最优路径(距离原点最近),如果遇到更短的路径,则修改路径(边松弛). Ast ...

  2. 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)

    一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...

  3. 有向有权图的最短路径算法--Dijkstra算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  4. 网格最短路径算法(Dijkstra & Fast Marching)(转)

    Dijkstra算法是计算图中节点之间最短路径的经典算法,网上关于Dijkstra算法原理介绍比较多,这里不再多讲.值得一提的是,当图中节点之间的权重都为1时,Dijkstra算法就变化为一般意义上的 ...

  5. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  6. 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson

    根据DSqiu的blog整理出来 :http://dsqiu.iteye.com/blog/1689163 PS:模板是自己写的,如有错误欢迎指出~ 本文内容框架: §1 Dijkstra算法 §2 ...

  7. 最短路径算法——Dijkstra算法

    在路由选择算法中都要用到求最短路径算法.最出名的求最短路径算法有两个,即Bellman-Ford算法和Dijkstra算法.这两种算法的思路不同,但得出的结果是相同的. 下面只介绍Dijkstra算法 ...

  8. 最短路径算法——Dijkstra算法与Floyd算法

    转自:https://www.cnblogs.com/smile233/p/8303673.html 最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1    ADE:2  ...

  9. 最短路径算法-Dijkstra

    Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...

随机推荐

  1. 利用ARCHPR明文破解获取PDF

    我们经常下载一些rar或zip压缩文件,解压时有时发现要密码,而密码多是为了推广而设置的网址等,如果不知道密码,可 以去来源网站上寻找或在压缩文件的注释中查看. 而并非所有都是如此,例如,网上有些人, ...

  2. 数据连接到 Web 服务 InfoPath 2010 窗体中的 SharePoint 服务器上运行时的错误消息:"401-未经授权"解决方案

    症状: 请考虑以下情形: Web 窗体发布到 SharePoint 服务器. 您创建 Microsoft InfoPath 2010 表单所在的 SharePoint 服务器上使用到位于数据的数据连接 ...

  3. VirtualBox & Kaili Linux 环境搭建

    勾选启用PAE/NX 勾选固态驱动器 网卡设置 [添加源] 2016.1月版添加源 cat << EOF > /etc/apt/sources.list deb http://htt ...

  4. 【Leafletjs】5.L.Control 自定义一个Control

    L.Control 所有leaflet控制的基础类.继承自IControl接口. 你可以这样添加控件: control.addTo(map); // the same as map.addContro ...

  5. [Android]RapidFloatingActionButton框架正式出炉

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4474748.html RapidFloatingActionB ...

  6. Android的系统属性SystemProperties

    创建与修改android属性用Systemproperties.set(name, value) 获取android属性用Systemproperties.get(name) 注意:android属性 ...

  7. Android时区及语言代码

    1. 设置默认时区   PRODUCT_PROPERTY_OVERRIDES += \         persist.sys.timezone=Asia/Shanghai\ 注:搜索“persist ...

  8. 听云数据库管理平台NetopGO简介

    ➠更多技术干货请戳:听云博客 断断续续写了将近一个月,听云第一版数据库管理平台终于写完了,期间来来回回的改了好多次小毛病,现在已经部署到生产环境上去了. 在刚开始的时候,后端的数据库集群只有10多个节 ...

  9. Android无线开发的几种常用技术(阿里巴巴资深工程师原创分享)

    完整的开发一个android移动App需要经过从分解需求.架构设计到开发调试.测试.上线发布等多个阶段,在发布后还会有产品功能上的迭代演进,此外还会面对性能.安全.无线网络质量等多方面的问题. 移动A ...

  10. 设计模式 之 策略(Strategy)模式

    最近看了<head first 设计模式>一书,便总结了里面的一些内容,今天就简单介绍一下策略模式. 策略模式:定义了算法族,分别封装起来,让他们能够相互替换,此模式让算法的变化独立于使用 ...