楼主: yukai08008
1333 1

[学习分享] 动态规划2_优化解sas代码_Andy的原创帖5 [推广有奖]

  • 2关注
  • 17粉丝

已卖:19份资源

讲师

2%

还不是VIP/贵宾

-

威望
0
论坛币
2176 个
通用积分
3.0600
学术水平
10 点
热心指数
7 点
信用等级
7 点
经验
5915 点
帖子
120
精华
0
在线时间
556 小时
注册时间
2012-11-28
最后登录
2022-4-11

楼主
yukai08008 在职认证  发表于 2016-1-24 10:47:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
参考:求连续子数组最大乘积
http://blog.csdn.net/martin_liang/article/details/40273547
********************************************************************************************
上面帖子关于最大乘积点的公式更清楚一些。例子还是用上一篇的,我在原序列前加了两个0,比较方便用公式。
实现代码:

proc iml;
a={0 0 -2.5  4 0  3  0.5  8 -1};
max=j(1,9,0);
min=j(1,9,0);

do i=3 to ncol(a);
max=max(a,a*max[i-1],a*min[i-1]);
min=min(a,a*max[i-1],a*min[i-1]);
end;
print a;
print max;
print min;
quit;

*******************************************************************************************
结果:

a
00-2.54030.58-1



max
0004031.5120



min
00-2.5-100000-12




*******************************************************************************************
心得:
1 空间换时间。动态规划在求解过程中保留了中间结果,所以用额外的存储空间换来了计算时间的节约(需要时不用再算)
ex:
攀岩:动态规划是顺着锚点一步步向上爬,普通人就可以轻易做到。蛮力解(穷举)则需要武林高手,不能借助锚点,只能一步到顶。所以如果攀岩的高度比较高,蛮力的方法很快就会变得不可行。
2 完全的考虑。动态规划之所以可以实行源于每一步都能找到最好的锚点,而这取决于对问题的解析。比如这串数字问题,其实本质上应当理解为每一步存在三种可能:
i.正负变换(正数和负数)
ii.放大缩小(abs(乘数) > 1 或 <1)
iii.归零
要保存max和min序列是因为存在正负号变向的可能,保留“振幅”的极端情况(i条件)。
ex:
客户行为:假设一串数字记录某用户对产品的使用情况,正数代表用户的感觉是好的,负数则相反。归零表示新用户或者用户的行为在经历了一系列后相当于新用户。求最大子串的问题就等价成为用户某段时间内对产品最满意的问题。
连续的正数表示用户的感觉持续为正(但是可能放大或缩小),反转有可能是因为某件时间,用户的态度发生180转变。

因此这个例子如果泛化可以用来理解用户行为。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:sas代码 动态规划 Andy 连续子数组最大乘积 Article 动态规划 sas 连续子数组最大乘积

沙发
yukai08008 在职认证  发表于 2016-1-30 17:44:57
a应当为a[i],发的时候被吞掉了?

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 15:39