演算法導論 第15章 動態規劃之鋼條切割

2021-06-20 19:03:22 字數 862 閱讀 1074

python**

#coding: utf-8
import numpy

import copy

import time
a = [0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30] #不同長度鋼條的**表,a[k]對應於長度為k的剛條的**

assert len(a) == 11

cost = numpy.zeros(shape=101, dtype=int)

n = 100 #待求長度

k = 10 #**表長度

pattern_dict =

t0 = time.clock()

for n in xrange(1, n+1):

temp = 0

max_num = min(n, k)

for k in xrange(1, max_num+1):

cur = a[k] + cost[n-k]

if cur > temp:

temp = cur

pattern = copy.copy(pattern_dict[n-k])

cost[n] = temp

pattern_dict[n] = pattern

print '長度為%d的鋼條的最優切分方案為:' % n

print ' ', pattern_dict[n]

print '最**格為:%d' % cost[-1]

print '時間消耗:%f' % time.clock() - t0

《演算法導論》讀書筆記之第15章 動態規劃 總結

前言 書中列舉四個常見問題,分析如何採用動態規劃方法進行解決。今天把動態規劃演算法總結一下。關於四個問題的動態規範分析過程可以參考前面的幾篇日誌,鏈結如下 裝配線排程問題 矩陣鏈乘問題 最長公共子串行問題 最優二叉查詢樹問題 1 基本概念 動態規劃是通過組合子問題的解而解決整個問題的,通過將問題分解...

演算法導論15章 動態規劃之矩陣鏈乘法問題

陣鏈乘法問題 給定乙個n個矩陣的序列 矩陣鏈 矩陣ai的規模為pi 1 pi,求完全括號話方案,使得計算成績a1 a2 an所需標量乘法次數最少。注意 求解矩陣鏈乘法問題並不是要真正進行矩陣相乘運算,只是確定代價最低的計算順序,確定最優計算書序所花費的時間通常要比隨後真正進行矩陣相乘所節省的時間要少...

演算法導論 動態規劃之鋼條切割

動態規劃和分治策略相似,不同的是,它針對的問題所分解出的小問題數量很多且很多是重複的。動態規劃就是使得這些重複的小問題只需要計算一次,避免重複計算。鋼條切割問題 給定一段長度為n英吋的鋼條和乙個 表pi i 1,2,n 求切割鋼條方案,使得銷售收益rn最大。注意,如果長度為n英吋的鋼條的 pn足夠大...