设为首页 加入收藏

TOP

动态规划思想详解及示例实现(一)
2017-10-09 17:26:33 】 浏览:5597
Tags:动态 规划 思想 详解 示例 实现

本文以两个具体例子详细剖析动态规划算法设计思想,主要参考圣经《算法导论》,加上自己的一些理解,主要是附上了一些具体实现过程,所以希望能对大家有所帮助。

#_*_ coding:utf-8 _*_

import numpy as np

def MemoizedCutRodAux(p,n,r,s):

    if r[n]>=0:

        return r[n]

    if n==0:

        q=0

        c=0

    else:

        q=-1

        c=-1

        for i in range(1,n+1):

            if q<(p[i]+MemoizedCutRodAux(p,n-i,r,s)):

                q=p[i]+MemoizedCutRodAux(p,n-i,r,s)

                c=i

    r[n]=q

    s[n]=c

    return q

def MemoizedCutRod(p,n):

    r=-np.ones(n+1)

    s = -np.ones(n + 1)

    MemoizedCutRodAux(p,n,r,s)

    return r,s

if __name__=='__main__':

    p=np.array([0,1,5,8,9,10,17,17,20,24,30])

    r,s=MemoizedCutRod(p, 10)

    print r

    print s

 

结果输出:

r=[  0.   1.   5.   8.  10.  13.  17.  18.  22.  25.  30.]

s=[  0.   1.   2.   3.   2.   2.   6.   1.   2.   3.  10.]

import numpy as np

def BottomUpCutRod(p,n):

    r = -np.ones(n + 1)

    s = -np.ones(n + 1)

    r[0]=0

    s[0]=0

    q=-1

    for j in range(1,n+1):

        for i in range(1,j+1):

            if q<(p[i]+r[j-i]):

                q=p[i]+r[j-i]

                s[j]=i

        r[j]=q

    return r,s

if __name__=='__main__':

    p = np.array([0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30])

    r,s= BottomUpCutRod(p,10)

    print r

    print s

步骤三:采用自底向上迭代法计算最优解的值

import numpy as np

def MatrixChain(p):

    n=p.size-1

    m=np.ones((n+1,n+1))*np.inf

    s = np.zeros((n+1, n+1))

    for i in range(n+1):

        m[i,i]=0

    for lenth in range(2,n+1):

      

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python爬虫实战(四)--------豆.. 下一篇python css概述

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目