全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1278 1
2016-01-24
参考:求连续子数组最大乘积
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转变。

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

二维码

扫码加我 拉你入群

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

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

全部回复
2016-1-30 17:44:57
a应当为a[i],发的时候被吞掉了?
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群