最近几天工作比较忙,却尝到一次扩展性的甜头。就是去年的一块我当时经过思想斗争,留下一个扩展的可能。并且在当时没用上的地方粗略的填了代码,整体也一直维护着这个扩展性。其实我一直很烦莫名其妙没有需求的过度扩展,所以当时心理还有点打鼓。后来仔细分析觉得还是有必要。结果这几天发现这个扩展非常有用,如果要加这个新的需求,可能重构很多地方并且有大的梳理。所以比较顺利。 设计的时候,能考虑到哪些是需要扩展的,那些是过度的设计是很难的,一方面是设计人员的经验,另外现在软件经常受到需求不明确的干扰。需求似乎一直是变化的。虽然重构等手法能拥抱这种变化,但是简洁不应该成为设计不作为的借口,那就是过度的简洁。至少在设计的时候,能预料到不明确的地方,即便不实现,如果将来有重构的可能,重构的成本也应该在设计时候考虑进去,而不是一句:没事,到时候再重构。
2009年2月21日星期六
[+/-] |
尝到一次扩展性的甜头 |
2009年2月7日星期六
[+/-] |
我为什么写Blog |
貌似每个写Blog的人都有经常问自己为什么写Blog.如网上这篇我为什么要Blog。以前我也经常问自己写blog干嘛。回头看看历史,竟然5年了。2004年开始写Blog,那时候有一个小圈子,现在这个小圈子还在,只是我不再使用Blog和这个圈子交流了。从2006年左右搬到Blogger,或者说Blogspot, 就基本上很少去公开现在的这个Blog,除非和人交流时候互相交换。如今这个Blog的读者是非常少的,目前我知道的只有两个,哈哈。也就是说,2006年之后,我的Blog就是相当于主要只是写给自己看了。
2009年2月5日星期四
[+/-] |
中国环难题和格雷码(二) |
继续笔记,上次提到的格雷码的一个迭代规则,在实际编程中,这个算法在计算后置0的时候带有一个循环,因此效率并非最好。TAOCP上提到计算后置0的算法是可以不循环的,这个在TAOCP的前册有提到,不过我没有。但是有一本书,《Hacker's Delight》,上面应该有。不过这些算法可能依赖机器字长,书上提到一个通用的算法,速度很快。
算法的本质和上次提到的一样,快得原因是是找到k的进位不需要循环,而是维护一个长度一致的数组f,其中f[i]表示:
1 如果找到一个块 a[j + 1] = 0, a[j] = a[j - 1] ... = a[i] = 1, a[i - 1] = 0. 那么a[i] = j + 1 2 否则 f[i] = i;显然,对于一个原始码的一次进位,那个进位的位置就是f[0]指向的位置。(f[-1] = 0)
算法每次都拿f[0]的位置,确定需要修改的g(k)中的变化的位,上次说过了,这个进位的位置和格雷码的变化位是对应的。另j = f[0],进位发生后, 需要修改一些f,保持f的含义:
j | v ..011..11011...11 | ..011..11100...00首先f[0] = 0,然后上面可以看出刚刚取出的变化的j,则
f[j] = f[j + 1] /*这是为了把f[j + 1]指向的块向右扩展一个,因为当前的块变成了 f[j + 1] ~ j */ f[j + 1] = j + 1 /*把以前的f[j + 1]清为指向j,规则2*/书上说这个算法是“眼花缭乱”的快。而且这种算法是很有启发性的,他的意义不仅仅在于这个问题上面,通用性可能应用到其他类似的地方。
标签:
编程
2009年2月1日星期日
[+/-] |
过年归来 |
初五来到合肥,又要开始枯燥的上班生活了。 年过得很开心,虽然现在年味是很淡了。还了了一个大事情,就是父母和LP的父母见面,之前和LP都很害怕,不知道会不会尴尬,结果他们4个人一见如故,相谈甚欢。我的恋爱之路终于步过新的里程碑了。 在家看到五舅,小舅的小孩已经长很大了,还有表姐的小孩也长大了。 === 华丽分界线 ================================ 回家看了些电影,把一直没完整看的教父1 和 2都补全了。另外看了大烟枪等喜剧,然后看了悲情城市,不少人觉得悲情城市里面有亲日和悲伤的结局,但是我觉得这是一部充满希望和美好的电影,政治的苦难只是背景,并不是表现的主题,主题还是台湾的人,无论是日统,国统,228,族人相残这些政治之难之后,他们仍然吸收和保有自己的文化,孕育自己的家庭。所以看完挺感动的,这才是一种真正的坚强。如果只有悲伤,怎么会有最后的一家吃饭的长镜头,几个小孩已经长大,香火不断,坚强不息。
订阅:
博文 (Atom)