常见算法(1)之动态规划 讲解

动态规划是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。
那么什么是动态规划呢,我们可以先来看一个例题
(1)背包问题
在这里插入图片描述
在这里插入图片描述
1、先看简单算法
在这里插入图片描述
在这里插入图片描述
注:这里用到公式Cn,0+Cn,1+…Cn,n=2^n
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面开始填充网格:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例1:
现在添加一个2000美元的手机,背包还是4磅,计算出最优解
基本题目如下:
有4样商品,分别是
(1)音响:4磅:3000美元
(2)笔记本电脑:3磅:2000美元
(3)iphone:1磅:2000 美元
(4)吉他:1磅:1500美元
只有一个4磅的背包,如何使商品价值最大
下面是代码行:

 #背包问题
    import numpy as np
    price=[3000,2000,2000,1500] #价格
    weight=[4,3,1,1] #对应的重量
    m=4 #背包重量
    n=4 #物品数
    x=np.zeros([n+1,m+1])
    for i in range(1,n+1):
        for j in range(1,m+1):
            if weight[i-1]<=j:
                x[i][j]=max(x[i-1][j],x[i-1][j-weight[i-1]]+price[i-1])
            else:
                x[i][j]=x[i-1][j]        
    print(x)    
    res=x
    
    def show(n,m,w,res):
    	print('最大价值为:',res[n][m])
    	item=[False for i in range(n)]
    	j=m
    	for i in range(n,0,-1):
    		if res[i][j]>res[i-1][j]: #代表取了这件物品
    			item[i]=True
    			j=j-weight[i]
    	for i in range(n):
    		if item[i]:
    			print('第',i,'个,',end='')
    show(n,m,weight,res)	

结果:
在这里插入图片描述
例2:假如你要去旅游,但是时间只有两天,这时你要列出了你将要旅游的单子,
在这里插入图片描述
为了使你的评分最大化,你这时应该怎么选择最佳。你能通过已经规划好的动态规划的表格去反推你的行程吗?
在这里插入图片描述
解析:设最优规划矩阵为a
最终的路程为24->24的上一行的元素为22(24>22),证明在第四行时选择了圣保罗大教堂(圣保罗大教堂)——>此时定位到a[4][4],减去圣保罗大教堂的需花费的天数(0.5),定位到a[4][3]:16,比较a[4][3]与a[3][3],并没有变化,没有游览大英博物馆,
——>定位a[3][3],比较a[3][3]与a[2][3],数值增加了,证明去过英国国家美术馆(英国国家美术馆,圣保罗大教堂)——>a[2][3]减去英国国家美术关的花费天数,定位到a[2][1],比较a[1][1]与a[2][1],值没有变化则排除环球剧场——>最后比较a[1][1]与0发现,值变大了,去过威斯敏特教堂。(英国国家美术馆,圣保罗大教堂,威斯敏特教堂)
整个回溯完成

动态规划练习题:
例1:走网格
在这里插入图片描述

    import numpy as np
    class Robot:
        def countWays(self, x, y):
            if x == 1 or y == 1:
                return 1
            else:
                dp = np.ones((x,y))
                for i in range(1,x):
                    for j in range(1,y):
                           dp[i][j]=dp[i][j-1]+dp[i-1][j]
            return int(dp[-1][-1])   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中的动态规划算法可以用于解决一些复杂的问题,例如路径规划、资源管理等。动态规划算法的关键在于解决冗余,通过存储产生过程中的各种状态来实现。\[1\]在Unity中,选择动态规划算法是因为它可以在空间上承受,而搜索算法在时间上无法承受。动态规划算法通过以空间换时间的方式,提高了算法的效率。\[1\] 在Unity中,可以使用动态规划算法来解决一些常见的问题,比如路径规划。通过存储中间状态,可以避免重复计算,提高路径规划的效率。另外,动态规划算法还可以用于资源管理,通过优化资源的分配和使用,提高游戏的性能和用户体验。\[1\] 如果你想学习更多关于动态规划算法在Unity中的应用,可以参考一些相关的教程和视频资源。比如,Unity3D教程手册网站提供了一些关于动态规划算法的教程和示例代码。\[1\]此外,还有一些B站上的视频教程,如AC自动机算法敏感词匹配算法讲解视频,可以帮助你更好地理解和掌握动态规划算法在Unity中的应用。\[2\] 总之,动态规划算法在Unity中是一种强大的工具,可以解决一些复杂的问题。通过合理地设计阶段、状态、决策和状态转移,可以实现高效的算法。在学习和应用动态规划算法时,理论设计是关键,一旦设计完成,实现部分就会相对简单。\[3\] #### 引用[.reference_title] - *1* *3* [Unity3D教程:游戏开发算法-动态规划](https://blog.csdn.net/weixin_55688630/article/details/128402260)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Unity游戏开发客户端面经——算法(初级)](https://blog.csdn.net/Sea3752/article/details/127554813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值