警告:這個問題,需要一些初步的努力來理解城市遍歷 - 這個案例在解決方案中缺失了嗎?
這個問題是不完全的dynamic programming : traversal of cities重複。讓我們假設我有4個城市[0-3]如下圖:
d[0][1] = 1;
d[0][2] = 2;
d[0][3] = 5;
d[1][2] = 3;
d[1][3] = 6;
d[2][3] = 4;
中的鏈接提出的解決方案是
C[i,j] = {
C[i,j-1] + d[j-1,j] (if i < j-1)
min C[k,i] + d[k,j] for 0 <= k < i (if i = j-1)
}
但讓我們計算C [1] [2]:
c[1][2] = min between {
k = 0 => C[0,1] + d[0][2]
}
這是有道理的,但它不是在這一步,以評估的唯一路徑,因爲我可以分爲城市[0,1]爲第一組,不得不[2]單獨爲第二組。在這種情況下,它應該是
c[1][2] = min between {
k = 0 => C[0,1] + d[0][2]
d[0][1]
}
在這一點上,我想問我的反對意見是否有意義。如果它確實存在,並且上面的鏈接中提出的算法是錯誤的,我應該如何在解決方案中包含此事件?我試圖遞歸表達它,但不能拿出任何簡單的東西。
'K = 0 => C時[0,1] + d [0] [2]'是正確的一個,對不起,這是一個錯字。但問題仍然存在:在C [0,1]中,假設一個以0結尾,一個以1結尾。如果一個從0到1,另一個**開始並保持2的**,該怎麼辦?文字說'假設A人和B人首先在他們各自的子序列中的第一個城市開始,他們可以從0開始,但他們也可以**不在**開始於同一城市 – Dean
是的,我誤解了問題聲明,我認爲他們必須從'0'開始。那麼你是對的,提出的解決方案沒有考慮到其中一個旅行者可以從'j'開始的情況。我會在一秒鐘內更新我的答案。 – Ishamael
我再次更新了答案。我以前的更新不正確,所以如果您開始閱讀它,請務必刷新答案。 – Ishamael