關於Bitonic旅行路線問題

2021-09-30 07:22:12 字數 1305 閱讀 3003

歐幾里德貨郎擔問題是對平面給定的n個點確定一條鏈結各點的、閉合的遊歷路線問題。bitonic旅行路線問題是歐幾里德貨郎擔問題的簡化,這種旅行路線先從最左邊開始,嚴格地由左至右到最右邊的點,然後再嚴格地由右至左到出發點,求路程最短的路徑長度。

注意到這個問題對線路上點的有乙個單調性要求(從左到右或從右到左),因此首先對這些點從左到右進行sorting,編號為1...n。根據動態規劃的常見思路,定義f(i)為從第1點到第i點的最短bitonic tsp,考慮f(i+1)和f(i)的關係。當加入第i+1點時,必然存在這樣一條線路從1點經過i點最後到達i+1 點:1...p,i,q,...i+1。根據旅行線路點的單調性質,i+1 >=q > i,因此q = i + 1,i+1點和i點必然有連線,f(i+1) = dist(i+1, i) + g(i+1, i),這裡引入g(i, j)表示從第i點到第一點然後返回第j點的最短bitonic線路長度。

現在關注新引入函式g(i, j)的性質,當j + 1 < i的時候,對於點j+1, j+2, ... i,這些點不可能出現在從1點到j點的路線上,否則就存在這樣一條路1...k...j (k > j),和botonic單調性質相悖。因此這些點都存在於從1點到i點的路線上,而根據點相連的單調性質,這些點肯定只能以這樣的順序相連j+1, j+2, ... i。因此,g(i, j) = g(j - 1, j) + dist(j-1, j+1) + dist(j+1, j+2) + ... + dist(i-1, i)。定義函式j(i) = g(i - 1, i),則g(i, j) = j(i) + sum(dist(from j-1, j+1, ... to i))

再來關注j(i)的性質,j(i)的意義是從點i出發由右至左直到1點後再由左至右到達點i-1的最短距離。這裡和i相連線的點存在多種可能,candidate set包括1, 2, ..., i-2。因此j(i) = min(g(i-1, k) + dist(k, i)), 1<=k<=i-2,這裡將g用j替換,我們得到

j(i) = min(g(k-1, k) + dist(from k + 1 to i) + dist(k, i)) = min(j(k) + dist(from k + 1 to i) + dist(k, i)), 1<=k<=i-2

於是我們得到函式j的遞推關係

for i > 2, j(i) = min(j(k) + dist(from k + 1 to i) + dist(k, i)), 1<=k<=i-2

for i = 2, j(2) = g(2, 1) = dist(2, 1)

for i = 1, j(1) = 0

最終,問題的解f(i) = j(i) + dist(i, i-1),時間複雜度為o(n^2)

Car的旅行路線

題目描述 description 又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為t...

Car的旅行路線

題d car的旅行路線 時間限制 1 記憶體限制 128 mb 提交 1 解決 0 標籤標籤已被遮蔽 提交狀態 討論版 題目描述 又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一 條筆直的高速鐵路,第i個...

Car的旅行路線

又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為t。那麼car應如何安排到城市b的路...