avatar
请教一个算法# JobHunting - 待字闺中
e*r
1
一个Graph,求最短路径,一个路径如果经过几个特定点会有一个extra weight,比如说
,单独经过A点,单独经过B点都是用正常的weight,但是如果这个路径同时经过A,B,
那就给这个路径设定一个extra weight,这样一个Graph,请问有什么好的算法吗.
avatar
J*3
2
求最后权重最值?
avatar
p*3
3
Single point shortest path??看看这个行不行
原始最短路径算法有一个是:
res[N]放结果
for i = 0; i < N-1; i++
for each edge "e"
relaxation(e, res)
一般的relaxation只考虑
res[e.beg] + cost(e) < res[e.end]的情况
这里修改relaxation
res[e.beg] + cost(e) + extra_cost_introduced_by_passing_e.end < res[e.end]
avatar
t*t
4
这把蒂结私忒拉的最短路径改动一下就行了吧?
avatar
r*e
5
按原题的意思
extra cost不是针对某一个点或者某一条边,而是一条路径上的某几个点
相当于 set_extra_cost -through A -through B ... extra_cost
单纯检查某一个点是不能知道加或者不加extra cost的
必须要track整个路径

【在 p*****3 的大作中提到】
: Single point shortest path??看看这个行不行
: 原始最短路径算法有一个是:
: res[N]放结果
: for i = 0; i < N-1; i++
: for each edge "e"
: relaxation(e, res)
: 一般的relaxation只考虑
: res[e.beg] + cost(e) < res[e.end]的情况
: 这里修改relaxation
: res[e.beg] + cost(e) + extra_cost_introduced_by_passing_e.end < res[e.end]

avatar
p*3
6

是啊,不能用DP,好像没有什么更好的办法了

【在 r*******e 的大作中提到】
: 按原题的意思
: extra cost不是针对某一个点或者某一条边,而是一条路径上的某几个点
: 相当于 set_extra_cost -through A -through B ... extra_cost
: 单纯检查某一个点是不能知道加或者不加extra cost的
: 必须要track整个路径

avatar
J*3
7
觉得就是dijkstra 把新节点加入集合时候对权值进行判断的时候加上条件?
avatar
p*3
8

dijikastra这里不成立啊,最优子结构被破坏了
1 1 1 extra_cost(b,d) == 100000000
a ---> b --->c--->d
| ^
| |100
-------------e
100
dijkstra 不work啊

【在 J****3 的大作中提到】
: 觉得就是dijkstra 把新节点加入集合时候对权值进行判断的时候加上条件?
avatar
v*k
9
每走一步都需要backtrack重新算到当前为止的总weight和最优路径吧,除非这个
weight有什么规律可以压缩判断时间
avatar
p*3
10

是不是NP complex?

【在 v*****k 的大作中提到】
: 每走一步都需要backtrack重新算到当前为止的总weight和最优路径吧,除非这个
: weight有什么规律可以压缩判断时间

avatar
v*k
11
不清楚。这个算法有典型的语音识别或者手写识别的应用,假如状态量不是太多的话。

【在 p*****3 的大作中提到】
:
: 是不是NP complex?

avatar
e*r
12
谢谢各位回帖,现在的问题可以被看作一个寻路问题,从城市A到城市B,找最短路径,
但是如果途中同时经过城市C和城市D,那对路径会有一个Bonus,这样一个问题在实际
中应该会有不少,各位再费心帮俺想一下,俺去查一个有没有类似的文献.
avatar
e*r
13
应该是的.

【在 p*****3 的大作中提到】
:
: 是不是NP complex?

avatar
I*c
14
如果我没有记错的话,这种点对点求最短路径问题就时间效率而言等同于single-
source最短路径。后者可以用Dijkstra或者bellmen-ford来求解。不过我感觉直接修改
这两个算法来解题不容易。
我觉得可以不考虑extra weight的情况下先求最短路径。如果得到的最短路径没有
extra weight,那么这就是答案。不然的话,可以把原图里能够引起extra weight的点
去掉,来求最短路径(要分不同情况分别求。如点A,点B同时出现的话会造成extra
weight,那么就把点A去掉求一次,把点B去掉再求一次).并和最开始求的带有extra
weight的最短路径比较来决定最后的最短路径。
如果造成extra weight的条件很复杂,可能需要别的算法。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。