Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >双权图Dijkstra算法的变分

双权图Dijkstra算法的变分
EN

Stack Overflow用户
提问于 2016-02-16 09:08:53
回答 1查看 2.3K关注 0票数 2

我试图找到一个问题的启发式,它被映射到一个有向图,比如非负权边。然而,每条边缘都与相关--两个权重属性,而不是一个权重(例如,一个是距离,另一个是显示道路4G LTE覆盖范围有多好!)。是否有任何特定的变异dijkstraBellman Ford,或任何其他算法追求这一目标?当然,简单的解决方法是手动将单个权重属性作为所有这些属性的组合,但这看起来并不好。

它能推广到多个性质的情况下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-16 09:39:08

假设你想同时优化两个标准:距离和吸引力(假设路径吸引力被定义为最吸引人的边缘的吸引力,尽管你可以想出不同的定义)。下面的Dijkstra的变化可以证明是有效的,但我认为它主要是有用的,当其中一个标准需要少量的值-例如吸引力为1,.,k对于一些小的固定k(较小的i更好)。

Dijsktra算法的标准伪码使用单个优先级队列。相反,使用k优先级队列。优先级队列i将在Dijkstra算法中对应于具有吸引力I的节点v∈V的最短路径。

首先初始化每个节点位于距离为∞的每个队列中(因为,最初,具有吸引力的v的最短路径是无限的)。

在主Dijkstra循环中,它说

代码语言:javascript
运行
AI代码解释
复制
 while Q is not empty

将其更改为

代码语言:javascript
运行
AI代码解释
复制
 while there is an i for which Q[i] is not empty
     Q = Q[i] for the lowest such i

然后从那里继续。

请注意,当您更新时,您将弹出队列Q[i],并为j≥i插入到Q[j]中。

可以修改Dijkstra的松弛性质的证明,以证明这是可行的。

请注意,您将获得最多k_个结果,作为每个节点和吸引度,你可以有最短的距离到具有给定吸引度的节点。

示例

以评论中的一个例子:

因此,基本上,如果一条路径有超过10英里的无覆盖里程,那么我们就选择另一条路径。

在这里,假设英里是整数(或者可以四舍五入为整数),我们可以创建11个队列:队列i对应于与i无覆盖英里的最短距离,除了10英里,后者对应于10或更高的无覆盖里程。

在算法的某个点,假设所有队列在队列3下面都是空的。我们弹出队列3,并更新顶点的邻居:如果从弹出节点到另一个节点的距离为1,这可能会更新队列4中的某个节点。

当算法运行时,它输出(节点,无覆盖距离)→最短距离的映射.在这里,您可以决定放弃对中的第二项为10的所有映射。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35438749

复制
相关文章
【(图) 旅游规划 (25 分)】【Dijkstra算法】
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 500; const int INF = 0x3f3f3f3f; struct Road { int _len; int _cost; }road[maxn][maxn]; int vis[maxn]; struct City { int _len; in
_DIY
2019/09/29
3020
【(图) 旅游规划 (25 分)】【Dijkstra算法】
【图】Dijkstra算法
正文之前 好久没弄C++了,上学期颓废了半学期,这学期开学就搞课程设计快疯了。待会要考试CSP,所以弄点代码储备,待会到了考场说不定能省点功夫! 正文 #include<iostream> usin
用户1687088
2018/07/24
1.1K0
【图】Dijkstra算法
图算法|Dijkstra算法python实现
01 — Dijkstra算法的理论部分 关于Dijkstra算法的原理部分,请参考之前的推送: 图算法|Dijkstra最短路径算法 Dijkstra算法总结如下: 1. 此算法是计算从入度为0的起始点开始的单源最短路径算法,它能计算从源点到图中任何一点的最短路径,假定起始点为A 2. 选取一个中心点center,是S集合中的最后一个元素,注意起始点到这个点的最短距离已经计算出来,并存储在dist字典中了。 3. 因为已经求出了从A->center的最短路径,所以每次迭代只需要找出center->{有关
double
2018/04/02
3.3K0
图算法|Dijkstra算法python实现
图算法|Dijkstra最短路径算法
01 — 单源最短路径 首先解释什么是单源最短路径,所谓单源最短路径就是指定一个出发顶点,计算从该源点出发到其他所有顶点的最短路径。如下图所示,如果源点设为A,那么单源最短路径问题,就是求解从A到B,
double
2018/04/02
6.4K0
图算法|Dijkstra最短路径算法
Dijkstra双栈表达式求值算法
以表达式"(1+((2+3)*(4*5)))"为例: 算法分四个步骤: 将操作数压入操作数栈 将运算符压入运算符栈 忽略左括号 在遇到右括号时,弹出一个运算符并弹出所需数量的操作数,运算结果并将结果压入操作数栈 处理完最后一个右括号后,操作数栈中只剩下一个数,就是表达式的值。 public class expression { public static void main(String[] args) { Stack<Character> ops = new Stack<Character>();/
SuperHeroes
2018/05/30
6470
图算法之bfs、dfs、prim、Dijkstra
概述 在图算法中经常要执行遍历每个顶点和每条边的操作,即图搜索。许多图算法都以图搜索为基础,如2-着色问题、连通性计算基于深度优先搜寻(depth-first search, DFS),而无权最短路径则基于广度优先搜索(breadth-first search, BFS)。基于搜索的算法还包括计算最小生成树的Prim算法以及计算最短路径的Dijkstra算法。图实现算法在现实的算法结构中占据重要的部分。 图 图的定义 图G是由顶点的有穷集合,以及顶点之间的关系组成,顶点的集合记为V,顶点之间的关系构成边的集
xiangzhihong
2018/02/06
2.9K0
图算法之bfs、dfs、prim、Dijkstra
Dijkstra算法
nx.info: [1, 2, 3, 4, 6, 7, 8, 9, 10, 11] 顶点 v1 到 顶点 v11 的最短加权路径: [1, 2, 3, 7, 10, 9, 11] 顶点 v1 到 顶点 v11 的最短加权路径长度: 9
裴来凡
2022/05/29
4150
Dijkstra算法
有趣的算法(五) ——Dijkstra双栈四则运算
有趣的算法(五)——Dijkstra双栈四则运算 (原创内容,转载请注明来源,谢谢) 一、概念 近期看到算法书上,提到dijkstra双栈的方法,实现输入一个四则运算的字符串,输出结果。 其实质上,就是利用两个栈,一个存储数字,一个存储运算符,再通过括号进行判定是否需要取出内容。 二、分析 为方便说明,现假设运算的字符串为(3*(8-2))。其中,为简化算法,假定每两个数的运算都要加上括号(对于不加括号的算法,后面会讨论到)。 运算的过程如下: 1)初始化两个栈,分别用于存放运算
用户1327360
2018/03/07
2K0
Dijkstra算法
Dijkstra算法使用了广度优先搜索解决赋权有向图(或无向图)的单源最短路径问题。
mwangblog
2019/05/16
1.1K0
Dijkstra算法
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其它全部节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但因为它遍历计算的节点非常多,所以效率低。
全栈程序员站长
2021/12/05
4600
dijkstra算法原理是什么?dijkstra算法的缺点是什么?
dijkstra算法也被称为狄克斯特拉算法,是由一个名为狄克斯特拉的荷兰科学家提出的,这种算法是计算从一个顶点到其他各个顶点的最短路径,虽然看上去很抽象,但是在实际生活中应用非常广泛,比如在网络中寻找路由器的最短路径就是通过该种算法实现的。那么dijkstra算法原理是什么?dijkstra算法的缺点是什么?
用户8739990
2021/06/25
8.7K0
Dijkstra 算法的 python 实现
离散课上图论的时候讲了理论知识,但是还没实践过,于是拿python写了一下,顺便做个笔记防止忘记。
赤道企鹅
2022/08/01
7510
漫画:Dijkstra 算法的优化
在上一篇漫画中,小灰介绍了单源最短路径算法 Dijkstra,没看过的小伙伴可以看下:
小灰
2020/04/22
5940
带权二分图最优匹配(KM)
KM算法是在匈牙利算法的基础上衍生,在二分图匹配的问题上增加权重,变成了一个带权二分图匹配问题,求最优的二分图匹配。
AngelNH
2020/04/16
4.2K0
dijkstra算法python实现
MAX_value = 999999 def dijkstra(graph, s): # 判断图是否为空,如果为空直接退出 if graph is None: return None dist = [MAX_value]*len(graph) dist[s] = 0 S = [] Q = [i for i in range(len(graph))] dist_init = [i for i in graph[s]] whil
py3study
2020/01/06
8150
dijkstra算法python实现
Dijkstra算法例子
%d 输出 向量 路径长度,若t==[],则返回从起点到所有节点的路径长度
mwangblog
2019/05/16
9270
图论--Dijkstra算法总结
1.BFS转换Dijkstra: 对于一些路径的的问题及一些特殊的搜索题目,如果数据量很多但是处理边的复杂程度可以接受,就是说我们可以通过操作将原来要搜索的问题转化为Dijkstra能做的问题,这样可以提高效率,虽然介于BFS与Dijkstra之间有着A*,但是A*的题目我目前就看到了一类,第K短路,常用的还是转换。举个例子:在一个城堡中,有机关陷阱并且告知了其坐标,设城堡为一个二维平面,若这个二维有10000点,BFS最坏的情况是O(V^2)那么可能会超时,那么我们考虑,将每个点的作为节点建图,若有机关则他与上下左右都不连通,其他的每个点建立四联通边,那么时间复杂度为O(4*V),再加上Dijkstra为O(4*V+VlogV)可以将其解出,这个例子可能不太恰当,但是在这里给出解题的思想,BFS与Dijkstra同是单源最短路是可以转化的。
风骨散人Chiam
2020/10/28
7130
加权有向图----单点最短路径问题(Dijkstra算法)
单点最短路径问题是求解从s到给定顶点v之间总权重最小的那条路径的问题。Dijkstra算法可以解决边的权重非负的最短路径问题。 Dijkstra算法无法判断含负权边的图的最短路径,但Bellman-Ford算法可以。 在实现Dijkstra算法之前,必须先了解边的松弛: 松弛边v->w意味着检查从s到w的最短路径是否是先从s到v,再从v到w。如果是,则根据这个情况更新数据。下面的代码实现了放松一个从给定顶点的指出的所有的边: private void relax(EdgeWeightedDigraph G,
SuperHeroes
2018/05/30
2.5K0
Dijkstra的最短路径算法
给定图中的图形和源顶点,找到给定图形中从源到所有顶点的最短路径。 Dijkstra的算法与最小生成树的Prim算法非常相似。与Prim的MST一样,我们以给定的源为根生成SPT(最短路径树)。我们维护两组,一组包含最短路径树中包含的顶点,另一组包括最短路径树中尚未包括的顶点。在算法的每个步骤中,我们找到一个顶点,该顶点位于另一个集合中(尚未包括的集合)并且与源具有最小距离。
全栈程序员站长
2022/08/28
1.2K0
Dijkstra的最短路径算法
会一会改变世界的图算法——Dijkstra(狄克斯特拉)算法
狄克斯特拉算法是非常著名的算法,是改变世界的十大算法之一,用于解决【赋权】【有向无环图】的【单源最短路径】问题。
掘金安东尼
2022/09/22
1.1K0
会一会改变世界的图算法——Dijkstra(狄克斯特拉)算法

相似问题

Dijkstra负权算法

43

全负权Dijkstra算法

20

dijkstra等权最短路径算法

11

边权有限的图上的Dijkstra算法

24

Dijkstra算法与负权与循环

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档