[英]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接收到的,可能會出現亂碼,並且在此處和此處有不正確的位。該程序試圖找出輸入字符串應該是什么通過最小化誤差)。
有一種通常的“向后跟隨路徑”技術,僅需要值表(但需要整個值表,而無需作弊“只保留最近的部分”)。 算法很簡單:從頭開始,確定您來自哪種方式。 您可以做出決定,因為或者只有一種方法,如果您從中得出與存儲的值相匹配的值,或者有幾種方法得出的值相同,那么選擇哪一個都不重要。
同時存儲“后備指針”表不會占用太多空間(大約比權重表大,但是如果您這樣做,實際上可以忽略大多數權重表),這樣做可以使您倒退階段要簡單得多:只需按照指針操作即可。 那確實是路徑,只是向后存儲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.