python?動態(tài)規(guī)劃問題解析(背包問題和最長公共子串)
背包問題
現(xiàn)在要往一個可以裝4個單位重量的背包里怎么裝價值最高:A重量1個單位,價值15;B重量3個單位,價值20;C重量4個重量,價值30
使用動態(tài)規(guī)劃填充空格
class SolutionBag: def valuableBag(self,optionalList,sizeBig): #創(chuàng)建網(wǎng)格 grid = [[0 for i in range(sizeBig+1)] for j in range(len(optionalList)+1)] #從行列序號1開始計數(shù) column = 1 for v in optionalList.values(): optionalWeight,optionalPrice = v for row in range(sizeBig): if optionalWeight > row+1: grid[column][row+1] = grid[column-1][row+1] else: grid[column][row+1] = max(grid[column-1][row+1],optionalPrice+grid[column-1][row+1-optionalWeight]) column += 1 return grid#SolutionBag().valuableBag({"A":(1,15),"B":(3,20),"C":(4,30)},4)
最長公共子串
在動態(tài)規(guī)劃中,你要將某個指標(biāo)最大化。在這個例子中,你要找出兩個單詞的最長公共子串。fish和fosh都包含的最長子串是什么呢
如何將這個問題劃分為子問題呢?你可能需要比較子串:不是比較hish和fish,而是先比較his和fis
我們網(wǎng)格填充的方法來實現(xiàn)
#偽代碼 #字母相同則左上方+1 if word1[i] == word2[j] : cell[i][j] = cell[i-1][j-1] +1 else: cell[i][j] = max(cell[i][j-1],cell[i-1][j])
python實現(xiàn)網(wǎng)格
class SolutionLengthS: def longestLength(self,str1,str2): grid = [[0 for j in range(len(str2)+1)] for i in range(len(str1)+1)] for i in range(len(str2)): for j in range(len(str1)): if str1[j] == str2[i] : grid[i+1][j+1] = grid[i][j] + 1 else: grid[i+1][j+1] = max(grid[i+1][j],grid[i][j+1]) return grid
到此這篇關(guān)于python 動態(tài)規(guī)劃(背包問題和最長公共子串)的文章就介紹到這了,更多相關(guān)python 動態(tài)規(guī)劃內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
小議Python中自定義函數(shù)的可變參數(shù)的使用及注意點(diǎn)
Python函數(shù)的默認(rèn)值參數(shù)只會在函數(shù)定義處被解析一次,以后再使用時這個默認(rèn)值還是一樣,這在與可變參數(shù)共同使用時便會產(chǎn)生困惑,下面就來小議Python中自定義函數(shù)的可變參數(shù)的使用及注意點(diǎn)2016-06-06python matplotlib實現(xiàn)將圖例放在圖外
這篇文章主要介紹了python matplotlib實現(xiàn)將圖例放在圖外,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04pyecharts如何旋轉(zhuǎn)折線圖的X軸標(biāo)簽
這篇文章主要介紹了pyecharts如何旋轉(zhuǎn)折線圖的X軸標(biāo)簽,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11