第六天
状态机解决股票问题 <>状态机,将每一天看做一个整体,有四种可能(即状态),分别是第一次买入股票,第二次买入股票,第一次卖掉股票,第二次卖掉股票,买股票时,要在价钱最低的情况下购买,卖股票时,要在价钱最高的时候卖掉股票,这样利润才能达到最大。 1)s1:记录第一次买入股票后剩余的余额 2)s2:记录第一次卖出股票后剩余的余额 3)s3:记录第二次买入股票后剩余的余额 4)s4:记录第二次卖出股票后剩余的余额 代码讲解 <>为什么可以这样做呢? <>因为第一次的买入会对第一次卖出的利润造成影响,s2又会对第二次买入获得的利润有影响,s3又会对第二次卖出后的利润有影响,所以这是一个层层影响动态变化,而我们要的是利润的总的最大值,所以我们可以采用利润叠加的方式来进行求解。 <>在代码中,我们是否要进行买入要根据前一次的状态进行,如果可以让利润升高,那我们就买入股票,反之则看卖出股票是否会使利润升高;买入股票后s1发生变化,进而导致后续的利润发生连锁的变化,而每一种利润都有其固定的计算方式,会按照其固定的方式进行利润的更新。 <>一些个人的看法:动态规划更像是一种面向过程的方式,通过遍历数组来得到想要的数据;状态机更像是一种面向对象的方式,具体的一天有属于它的买入和卖出的状态,这些状态的更新与前一个‘对象’的输入息息相关(类似于神经网络的反向梯度传播优化权重)。 class