通過leetcode學演算法——動態規劃(dp)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

先貼問題:

  1. Delete Operation for Two Strings
    Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 the same, where in each step you can delete one character in either string.
    說白了就是找到兩個字串非連續最大公用字串。如果對dp演算法很熟悉的很快就能想到這個問題的解法,然而我並不是很熟悉,所以用了一個很挫很慢的方法,個人理解應該是分治法,很多步驟被重複算了很多次。


寫的很搓,輕噴。
下面就要介紹一下簡單易懂的dp演算法啦,先上代碼(leetcode裡大神寫的,我只是用golang重寫一遍)



思路很簡單,比如 word1=abcd,word2=obdce。
用一個二維數組儲存計算的值(代碼裡多加了一行和一列置0方便計算)




比如比較word1的c和word2的c的時候,因為ab和obd的最大相同是1,所以這個位置上只需要dp[i-1][j-1]+1

動態規劃和分治區別:
動態規劃:它通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每一個解都對應於一個值,我們希望找到具有最優值的解。動態規划算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然後從這些子問題的解得到原問題的解。與分治法不同的是,適合於用動態規劃求解的問題,經分解得到子問題往往不是互相獨立的。
分治法:若用分治法來解這類問題,則分解得到的子問題數目太多,有些子問題被重複計算了很多次。如果我們能夠儲存已解決的子問題的答案,而在需要時再找出已求得的答案,這樣就可以避免大量的重複計算,節省時間。我們可以用一個表來記錄所有已解的子問題的答案。
註:不管該子問題以後是否被用到,只要它被計算過,就將其結果填入表中。這就是動態規劃法的基本思路。

這一題算是讓我對動態規劃有一個更深的印象,故記錄一下。以前雖然會寫,但是每次遇到問題都不會想不到去用,還是自己疏於練習。
紙上得來終覺淺,絕知此事要躬行呀。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.