迪杰斯特拉算法問題記錄
問題1:為什么該列路徑長(zhǎng)度的最小的項(xiàng)就代表這兩點(diǎn)之間的最短路徑?
因?yàn)槟壳八?span id="s0sssss00s" class="color-pink-03">可到達(dá)的節(jié)點(diǎn)都在一列中列出,其他的未到達(dá)的節(jié)點(diǎn)一定要通過目前已經(jīng)可到達(dá)的節(jié)點(diǎn)才能到達(dá),所以其他的還未到達(dá)的節(jié)點(diǎn)的路徑一定比現(xiàn)在可到達(dá)的節(jié)點(diǎn)中最小的路徑長(zhǎng),所以即使存在另外一條路徑可到達(dá)目前已經(jīng)是最短路徑的節(jié)點(diǎn),那它也一定比現(xiàn)在這個(gè)最小的路徑長(zhǎng)。
問題2:為什么每次找到最短路徑后下一次要用這個(gè)最短路徑的節(jié)點(diǎn)找下一個(gè)節(jié)點(diǎn)?
這個(gè)本質(zhì)上是一個(gè)貪心算法,就是按最有利的方式計(jì)算,假如說通過上一個(gè)已獲得最短路徑的節(jié)點(diǎn)v2往外走,如果v2可到達(dá)v3且比之前到達(dá)v3的路徑小,那就替換掉原來的到達(dá)v3的路徑,否則就跳過不替換保持原來的信息。再加上本來我們就是求最短路徑,肯定是按目前知道的最小的節(jié)點(diǎn)走,總不能再挑個(gè)路徑大的,得不償失。
標(biāo)簽: