日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Dijkstra和动态规划

發(fā)布時(shí)間:2024/9/15 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dijkstra和动态规划 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有人說(shuō)Dijkstra也是動(dòng)態(tài)規(guī)劃。

它不是貪心嗎?怎么變成動(dòng)態(tài)規(guī)劃了,是動(dòng)態(tài)規(guī)劃的話(huà),那么就有狀態(tài),有狀態(tài)方程。

將圖中的頂點(diǎn)分成2個(gè)部分,已知最短路徑的頂點(diǎn)集合U,不知最短路徑的集合V-U

問(wèn)題規(guī)模:就是U里面頂點(diǎn)個(gè)數(shù)

狀態(tài):已知最短路徑長(zhǎng)度:

狀態(tài)方程如下:

如果v 在 U中:cdis[v] = dis[v] 如果v和U中某點(diǎn)u直連:cdis[v] =min(dis(u) + w(u,v)) 其他情況:cdis[v] = inf

但是這個(gè)狀態(tài)方程怎么去實(shí)現(xiàn)了,我們知道需要維護(hù)這個(gè)表cdis[v] ,這個(gè)就是備忘數(shù)組,遍歷的i就是U里面的頂點(diǎn)個(gè)數(shù),i++就是U里面的頂點(diǎn)增長(zhǎng),U里面的頂點(diǎn)怎么得來(lái)了?

貪心算法來(lái)了,每次取cdis[v]里面最小的點(diǎn)

為了取最小的點(diǎn)我們引入了優(yōu)先級(jí)隊(duì)列,不用優(yōu)先級(jí)也可以,處理起來(lái)復(fù)雜一點(diǎn),我們只把優(yōu)于cdis里的結(jié)果放入優(yōu)先級(jí)隊(duì)列

優(yōu)先級(jí)隊(duì)列彈出的過(guò)程也就是U里面的頂點(diǎn)增長(zhǎng)過(guò)程,于是i++就有了

貪心+動(dòng)態(tài)規(guī)劃,應(yīng)該都是這個(gè)框架,沒(méi)有直接的for循環(huán)了

代碼實(shí)現(xiàn)如下,仔細(xì)體會(huì):

import heapq import numpy as npdef dijkstra(graph,start):pqueue = []heapq.heappush(pqueue,(0.0,start))#U:已知最短距離的集合visit = set()# 追蹤解parent = {start:None}# DP數(shù)組distance = {vertex:np.Inf for vertex in graph}distance[start] = 0.0while pqueue:pair = heapq.heappop(pqueue) dist = pair[0]vertex = pair[1]# 相當(dāng)于以前的for循環(huán)visit.add(vertex)# 這里我們只考慮直連的邊,非直連的邊為inf肯定進(jìn)不了候選集edges = graph[vertex]for v in edges:if v not in visit:if dist + graph[vertex][v] < distance[v]:heapq.heappush(pqueue,(dist + graph[vertex][v],v))# 更新DP數(shù)組distance[v] = dist + graph[vertex][v]parent[v] = vertex return parent,distance #%%g = {'A':{'B':1,'C':2},'B':{'A':1,'C':3,'D':4},'C':{'A':2,'B':3,'D':5,'E':6},'D':{'B':4,'C':5,'E':7,'F':8},'E':{'C':6,'D':7,'G':9},'F':{'D':8},'G':{'E':9}}i,j=dijkstra(g,'A')print iprint j{'A': None, 'C': 'A', 'B': 'A', 'E': 'C', 'D': 'B', 'G': 'E', 'F': 'D'} {'A': 0.0, 'C': 2.0, 'B': 1.0, 'E': 8.0, 'D': 5.0, 'G': 17.0, 'F': 13.0}

總結(jié)

以上是生活随笔為你收集整理的Dijkstra和动态规划的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。