簡體   English   中英

使用動態編程時,要捕獲整個路徑的最小和?

[英]When using dynamic programming, capturing the entire path for a min-sum?

我正在嘗試使用維特比最小和算法,該算法嘗試通過一堆節點找到一條路徑,該路徑將針對某些固定輸入的總漢明距離(“漢字乘以2並計算所得位數”的總漢明距離)最小化。

我知道找到如何使用DP來計算整體的最小距離,但我用它來捕捉對應於最小距離對應的路徑有問題。

似乎記住每個節點的路徑確實會占用大量內存。 是否存在處理此類問題的標准方法?

編輯:

http://i.imgur.com/EugiEWG.jpg

這是我正在談論的示例網格。 一般的想法是找到通過網格的路徑,該路徑最接近於模擬輸入的位串,並且具有最小的誤差(通過最小化整個漢明距離或失配位數來測量)。

如您所見,輸入字符串的第一塊是01,我可以在網格的第1列中遍歷。 下一個塊是10,我可以在第2列中移動。下一個塊是11。到目前為止,還不錯。 下一個塊是10,這是一個問題,因為我無法從現在的位置到達該狀態,因此我必須轉到下一個最好的東西(00),其余的東西都可以填滿。

但這會變得更加復雜。 我需要能夠以某種方式獲得到最小漢明距離的相應路徑。

(此練習的目的是,網格表示實際上是有效的過渡,而輸入字符串是您通過telecoma接收到的,可能會出現亂碼,並且在此處和此處有不正確的位。該程序試圖找出輸入字符串應該是什么通過最小化誤差)。

有一種通常的“向后跟隨路徑”技術,僅需要值表(但需要整個值表,而無需作弊“只保留最近的部分”)。 算法很簡單:從頭開始,確定您來自哪種方式。 您可以做出決定,因為或者只有一種方法,如果您從中得出與存儲的值相匹配的值,或者有幾種方法得出的值相同,那么選擇哪一個都不重要。

同時存儲“后備指針”表不會占用太多空間(大約比權重表大,但是如果您這樣做,實際上可以忽略大多數權重表),這樣做可以使您倒退階段要簡單得多:只需按照指針操作即可。 那確實路徑,只是向后存儲。

您正確地認為,用於計算路徑的直接方法會占用大量空間。

這個問題經常出現在DNA測序中 ,這種方法的成本高昂。 有很多方法可以克服它(請參閱此處的更多信息 ):

  • 如果您希望執行時間加倍,則可以減少空間的平方根(請參閱上面的鏈接中的2.1.1)。

  • 使用壓縮樹,您可以對數減少一個維度(請參閱上面鏈接中的2.1.2)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM