状态机模型

  1. 首先了解何为状态机?
    状态机:它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。(百度搜的,反正我是看不懂。)
    换句人话来说就是不同状态可以通过某些方式进行转换。例如在游戏中,操作人物从走的状态变成跑的状态这种就可以称为状态机。(当然,这些都不重要,就是个名字而已。)

  2. 状态机模型:通过类似上述“状态变换”的角度分析动态规划问题,这类问题就是状态机模型。例如下面这道题就是状态机模型的简单应用:
    题目:大意:街道上有N家店铺,每家店铺有一个价值,现有一劫匪进行抢劫,但是不能抢劫连续两个相邻的店铺,每个店铺都有一个价值,求能抢劫到的最大价值。

思路:这是状态机模型最简单的应用,当然这题状态比较少,用背包也能做,注意对比二者的思维方式的不同。

背包(从物品角度出发):显然不考虑抢劫店铺的限制,就是简单的01背包问题。考虑限制也就是加上个限制罢了,思考角度还是一样的。f[i] 表示从前 i 个中选的方案,依据最后一步划分即 第i个 选或不选。不选 f[i]=f[i-1]。因为第 i 个是选的,那么第 i-1 个不能选,即f[i]=f[i-2]+w[i].

状态机(从状态角度出发):对于每个店铺只有抢和不抢两种状态,我们根据状态的转移进行求解。

f[i,j] 表示从前 i 家店铺中选,且第 i 家抢或不抢的方案。(j为0代表不抢,j为1代表抢)。

显然根据状态定义 对于f[i,0]=max(f[i-1,1],f[i-1,0]). f[i,1]=f[i-1,0]+w[i]。对于f[0,j]就相当于我们进入状态机的虚拟入口,根据定义 f[0,0]=0。 f[0,1]不存在,所以赋值为负无穷。
并且对于状态机模型要找好入口和出口,即开始的状态和结束的状态。

通过题目我们发现,状态机模型就是通过状态的角度,进行求解动态规划问题,尤其是在多个状态的时候,非常的清晰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值