我正在嘗試通過完整的DP表做回溯。假設表格正確填寫了正確的值..如果需要,我可以發佈表格的片段。 但這裏是我的代碼片段從回溯生成字符串通過Needleman Wunsch表追溯
def stringBuilder(array, xLine, yLine):
StringA, StringB = "", ""
i, j = len(xLine), len(yLine)
minCost = array[i][j]
while (i != 0 and j != 0):
minCost = min(array[i - 1][j], array[i][j - 1], array[i - 1][j- 1])
if (minCost == array[i - 1][j - 1]):
StringA += xLine[i - 1]
StringB += yLine[j - 1]
array[i - 1][j - 1] = 0
i -= 1
j -= 1
elif (minCost == array[i][j - 1]):
StringA += '-'
StringB += yLine[j - 1]
array[i][j - 1] = 0
j -= 1
elif (minCost == array[i - 1][j]):
StringA += xLine[i - 1]
StringB += '-'
array[i - 1][j]= 0
i -= 1
我的邏輯是,它總是期待通過此表並找到最小值試圖要回的0部分的成本表。 j應該是0並且循環退出。 NW算法的特別之處在於缺口,刪除,交換的值可以是他們想要的任何數字,而不僅僅是-1,0等。
根據檢查回溯的腳本,我錯了。儘管我知道我正在填寫表格,因爲另一個測試腳本證實了這一點。
嗨,可能這個問題是有多個相鄰的廣場與同'minCost'?如果是這種情況,您的最終排列方式將會有所不同,具體取決於您通過if語句檢查的順序 – nbryans
問題僅僅是您正在反向生成字符串?如果是這樣,然後添加StringA = StringA [:: - 1]和StringB = StringB [:: - 1] –
再次感謝你nbryans,我擺弄順序和循環如何終止,並找出我自己的。但是對於它的價值,我沒有包括它,但我最終倒過了弦。我發佈解決方案下面 – Dringo