本站首页 返回顶部 关于博主

有感PMI Exam Dev Workshop

有幸参加了PMI协会在上海举办的PMI Exam Development Workshop活动。这是PMI协会第二次在中国举办此活动,上一次是2009年北京。
我第一次参加,感觉收获很多。

我们知道,PMI考试题库中的考题一直在不断地完善中,这就需要不断地淘汰旧题目,引入新题目,这次活动的目的就是补充新考题。整个活动分2个主题:评审已存在的题目和添加新的题目。

第一天下午主要是PMI协会高管的演讲。
第二天工作内容是评审以往的考题。部分考题来自题库中不计入考试分数的题目,部分来自其他PMI Exam Dev Workshop提交的题目。每个题目都会对应到项目开发周期中相应的领域(Domain)和任务(Task),无论是题干,还是选项都有很严格的要求。这种出题的方式对其他行业出考题还是很有借鉴意义的。因为签过协议,在此不方便提及更多题目相关的内容。
第三天工作内容是自己写题目。由于头一天评审过题目,所以基本上已经驾轻就熟了。大家可以参考自己以往的工作经验,项目中碰到的问题或经验,然后写出来。题目完成之后,与其他组相互评审,最后成题。

总结一下:
1.在项目管理方面有些新的感触。一方面来源于第一天PMI协会高管的演讲,另一方面,接下来两天评审题目、写题目,参考资料,讨论问题,相互交流。
2.认识了不少朋友。毕竟,扩展社交圈对个人的发展是很重要的。

Problem B. Cookie Clicker Alpha解答

这题的小数据8分,大数据11分,共19分。
 
在分析解题思路之前,我们先看一下题目中的例子。
假设方案一从来都不买form,那就意味着产生cookie的速率一直都是2个/秒;按照方案二,当买了第一个form之后,速率由2个/秒增加到了6个/秒,买了第n个form之后,速率变成(2+4n)个/秒。
如果以时间为横轴,cookie的数目为纵轴,那么时间和cookie的关系如下图。

Cookie数目和时间关系图

从上图中,我们可以看出,第一种方案需要1000秒,第二种方案需要500多秒。
从折现的斜率来看,买的form数目越多,产生cookie的速度越快。但每当买一个form之后,虽然速率增加了,但是cookie的数目马上就减少了。同不买form的那种方案相比,需要一定的时间才能赶上它。
也就是说,我们应当尽量地多买form才能保证多产cookie,但form的数目存在一个临界值,当form的数目多余这个数字时,我们不必买form就能更快地达到要求的cookie数目X。
 
那这个form数目的临界值是多少呢?
 
当第一次达到500个cookie时,假设此时的时刻为0,如果不买form,那么再过t秒,cookie数目为 500 + 2t。如买一个form,那么在t时刻的form数目为(2+4)t,也就是6t,那么方案二追上方案一随需的时间是多少呢? 500 + 2t >= 6t,得出t>=125,也就是说,在125秒之前,方案二中cookie的数目小于方案一的数目,这个临界数目是500 + 2t = 750。当产生cookie的数目小于750时,方案一更快,大于750时,方案二更快。
在当前例子中,X的数目为2000,大于750,所以应该采取方案二。
 
继续产生cookie,当cookie数达到500时,假设我们目前已经有了n个form,如果不买form,再过t秒的cookie数目为500 + (4n+2)t,如果买form,那么再过t秒,cookie数为 (4n+2)t + 4t。我们可以算出,t恒为125,也就是说如果500 + (4n + 2) * 125>=2000,那么应该采用方案一,否则采用方案二。
我们算出n>= 2.5,取整之后form的数目n>=3。
把C,F,X放到公式里,那就是  ( 2 + nF) * C/F  >=  X – C,然后得到 n的值是 X / C – 1 – 2 / F。那么算上买n次form的时间,加上最后一次的时间 X / ( 2 + n * F ),就是我们所需的结果了。
时间复杂度o(1)。
 
源代码:CookieClicker.java

Problem A. Magic Trick解答

原题链接:Problem A. Magic Trick

这一题6分,题目要求可简化如下:
前提条件:
1. 给定A和B两个4 x 4 的矩阵,两个矩阵中都填充了1 ~ 16这16个数字(每个矩阵中的数字都唯一)。
2. 取出矩阵A中指定某一行的4个数字;
3 .取出矩阵B中指定某一行(可能与第2步中行数相同)的4个数字。
要求:
判断步骤2中的数字与步骤3中的数字是否包含相同的数字。如果有且只有一个相同数字,那么输出这个相同的数字;如果没有相同的数字,则输出“Volunteer cheated!“;如果相同的数字个数大于或等于2,则输出“Bad magician!”。

解答:
把两组数字分别放到两个数组中,逐个比较这两个数组,然后把相同的数字放到一个list中,最后判断list.size()即可。函数实现如下
	private List<String> processTrickPair( String[] values1, String[] values2)
	{
		List<String> ret = new ArrayList<String>();
		for( int i = 0; i < values1.length; i ++ )
		{
			for( int j = 0; j < values2.length; j ++ )
			{
				if( values1[i].equals( values2[j]))
				{
					ret.add( values1[i] );
				}
			}
		}
		return ret;
	}
源代码下载:MagicTrick.java

Google Code Jam 2014资格赛题目解答

周六闲来无事,正好碰上Google Code Jam 2014的资格赛,于是就尝试着做了做比赛的题目,权当练习一下好久没有动过的脑子。
这两天准备陆续地把自己的答案整理出来。

1.Problem A. Magic Trick
2.Problem B. Cookie Clicker Alpha
3.Problem C. Minesweeper Master
4.Problem D. Deceitful War

余额宝和股市有关系吗?

关注余额宝也有一段时间了。
前段时间A股一路下跌,而余额宝的利率一路上行。我就开始胡思乱想,年底银行缺钱,只好提高利率吸引储蓄。同样的理由导致余额宝这类货币基金的利率也高高在上。难道是这个缘故致使股市大量资金流出,从而导致股市一路走低?那月初开始余额宝的利率不断下降,是否有资金流向股市呢,这预示着A股即将见底反弹?
余额宝这类货币基金和股市是否存在这样的关系:余额宝利率涨,则股市跌;利率跌,则股市涨。

大胆假设,小心求证。
要印证我的想法,先从余额宝和股市的数据着手吧。
于是从网上找最近半年来余额宝的收益走势图和沪深两市的股指数据,数据来源如下:

把数据整理好,然后生成line chart,相信应该能从chart的走势看出点名堂。
生成chart之前,我猜,沪深股市是联动的,所以它们的走势应该大致差不多吧。呵呵,生成的line chart印证了我的想法,这哥俩指数的队形保持得相当好。

上证指数与深证成指

那余额宝和股市的关系呢,二者的涨跌关系如我所料的相反吗?在生成chart时,我准备把chart的primary axis设为余额宝的万份收益,从小到大;把chart的secondary axis设为上证指数,从大到小。如果猜测正确的话,那它们在line chart中的走势即使没有上证指数和深圳成指那么一致,应该大致上不会相差太远吧?
于是,根据数据我生成了如下line chart。

余额宝与上证指数

从6月30日到9月30日的数据感觉有些杂乱无章,9月30日之后的数据好像走势有点类似。它们到底是有关系呢,还是有关系呢?如果没有一定的标准,仅仅用肉眼来判别人走势是否一致,是不是太牵强?肿么办捏?值得庆幸的是,一个同事告诉我,有现成的算法来计算两组数据之间的关联程度,在Wikipedia上,可以找到Pearson product-moment correlation coefficient算法:

cor公式

这种算法用来计算两组数据之间的线性相关程度。计算结果是-1到1之间。如果结果越接近0,那它们的相关性就越小;越接近-1或1,相关性就越大。
同事还告诉我,在自然科学的统计中,如果超过0.7,那就认为相关性很大;对于社会科学,因为参杂了太多的认为因素在内,如果超过0.6,就认为相关性比较大了。
让人振奋的是,有一种称之为R的统计工具,内嵌了很多统计算法,只需要调用cor()函数就能得到我要的结果。实在太好了,我不必重新发明轮子。

到官方网站http://www.r-project.org/下载R,安装。
分别把余额宝、上证指数、深圳成指的数据输出到3个文件中,然后通过scan()导入到三个变量中。
调用cor函数,把上证指数和深证成指代进去,得到结果0.945。嗯,意料之中,相关性非常大。
把上证指数和余额宝的万份收益代进去试试看吧。汗,结果让我大吃一惊,竟然是-0.135。这个结果实在太令人沮丧了!

从图形上来看,9月30日之后的数据似乎走势差不多,它们还是有关系的吧?要不要代进去试试看?可这是一组我刻意选择的样本,即使相关性大,似乎也不能说明它们有关系吧?别想那么多,还是先试试看。
如我所料,上证指数和深证成指的相关性是0.975。
上证指数和余额宝的相关性仍旧是很低的-0.136。汗,看走眼了,看来它们本就是貌合神离的两个,没法凑成一对的!

好吧,是我想多了。令人失望的-0.135和-0.136,基本上证明了我的猜想纯粹是扯淡,二者没有线性相关。

自我安慰一下吧,说不定二者之间存在着某种我不知道的曲线相关性;或许二者的相关性在时间上有一定的滞后;也或许二者有一定程度的联系,只是并不占主导因素,被其他的因素给湮没,从而导致让他们看起来关系不那么大;也或许是样本太少,很难体现他们的相关性;也或许是余额宝在成立之初,各种因素太多,它的走势并不是货币基金走势的真实体现;也或许… 算了,不必找太多借口。总之,在个人能力范围之内,从现有的数据来看,我只能得出二者没有关系的结论。
以后学点经济学的知识再进一步研究,至于今天,还是洗洗睡吧。:(

以上部分完成于2014.01.24,以下部分为2014.01.27新增。
多谢Jerry的提醒,在处理数据之前,应该先剔除干扰点。
在R中,通过plot()函数,我得到了余额宝的数据分布图,如下:

余额宝数据范围

很显然,绝大部分数据都集中在0.8到2之间,唯一有个数据达到了3.6037。查看了下历史数据,在3.6037这个数据之前,连续2天没有数据更新。严重怀疑这个3.6037是3天数据的总和。于是,剔除这个干扰数据之后重新计算。
上证和余额宝的相关性为-0.315,从余额宝成立至今到现在,看起来应该没有相关性。
2013.09.30到2014.01.21的上证指数和余额宝的相关性为-0.749,应该是有相关性。
当然,由于后者是我刻意选择的数据,加之样本数目太小,很难断定它们就是相关的。继续观察吧。