前一篇文章最后的代码效率很差。由于使用 list 保存临时的计算结果,所有文件内容会同时读入内存,其构建的管道类似下图所示:
list 中的元素是先通过一个过滤器,存起来,再通过下一个过滤器。这样做的坏处是
浪费内存
浪费时间,来回的在临时 list 中进行存取需要时间,另外临时 list 的内存分配,垃圾收集都会增加时间开销
我们希望的管道其实如下:
list 中的每个元素应该一次性通过所有的 filter,只在最后存在一个 list 中。更理想的情况下,一开始的 list 也不应该出现。对于像 Haskell 这样默认使用 lazy evaluation 的语言来说,前面的函数连续调用默认行为就是如此。只有当管道末端需要一个元素时才会从管道头读取一个元素,经过所有过滤器处理以后得到结果,如果没有读取第二个元素,则管道头的其他元素根本不会被处理。
CLRS 上对 Red-Black Tree (RBT) 的介绍简直是一团乱麻,代码又乱,解释又罗嗦,我完全没有实现它的兴趣……
不得不佩服 Robert Sedgewick 啊,他在 Algorithms in C 里先介绍 2-3-4 Tree,把 RBT 作为 2-3-4 Tree 的一种表示方式来介绍 RBT,这样就清楚多了。当然,Sedgewick 本来就是 Red-Black Tree 的发明者之一,他能够讲清楚也就不奇怪了。除了解释清楚以外,Sedgewick 使用递归实现,因此代码很简洁,看起来很舒服。
这次就偷个懒,发一份去年在 Linux 程序设计课上做演讲时所做的幻灯片吧,点这里下载。内容是关于 Unicode 和国际化的。制作这份幻灯片时参考了 Tim Bray 的几篇文章,UTF-8/UTF-16 的 RFC 文档,还有 Arnold Robbins 的 “Linux Programming by Exmaple“。主要内容有:
国际化的相关概念
字符集、字符集编码、语言等概念的澄清
使用标准 C 的 wchar_t 和 locale 来解决国际化问题
Unicode 的历史,一些基本概念。如 Unicode 和 ISO 10646 的关系,Unicode 的划分。
同时答辩的同学全部答辩结束以后老师讨论结果。等待的时候有那么一点点担心因为答辩时失败的表现而出岔子,不过公布结果时论文被刘嘉老师表扬为是这两年里本科一辩论文中他看到的最好的,听到这个称赞还是很开心的,不过也有点心虚。刘老师欠我的一件 IBM 的纪念 T 恤就此也不打算去追着要了,说不定他也记得这事,所以就故意表扬我一下,让我不再追究。
这个弦乐独奏家乐团一共 11 人,六个小提琴演奏家,两个中提琴和大提琴,还有一个低音提琴。(查了一下,低音提琴又叫大贝司,贝司指的是低音吉他。)宣传说这个乐团的主要成员来自维也纳爱乐乐团,去听的时候发现海报上的音乐家们比实际的看起来要年轻,估计海报上是很早以前的照片,而且其中有几个(大概是 3 个,都是小提琴手)比较年轻的面孔是海报上没有的。演奏曲目和宣传海报上的一样,莫扎特的 D 大调弦乐嬉游曲,罗西尼的弦乐协奏曲,巴赫的 D 小调双小提琴协奏曲还有柴可夫斯基的小夜曲。巴赫和莫扎特的都曾经听过,也是很喜欢的曲子,其他的两首都是陌生的。
上半场最后一首巴赫的双小提琴协奏曲演奏完三个乐章以后马上加演了一个乐章,不知道是哪首曲子(听不懂首席说的话),非常忧伤的一首曲子。同去的 Ann 第一次听巴赫的双小提琴协奏曲,很有感觉,而对加演的这首曲子更是感动。最后加演的三首中两首是施特劳斯的(施特劳斯跟维也纳爱乐乐团的关系果然不一般啊),一首是完全拨弦的(可惜我不知道名字),另外是一首波尔卡舞曲。拨弦的那首演奏时很有意思,演奏低音提琴的大爷原来站在舞台右侧,演奏时拿了一个声音像碰铃的乐器漫步走到乐队前面,随着节奏敲出了几声银铃一般的声音,而最后一下敲到了自己的手指,然后便回到原位,拿着提琴到舞台后面去了。乐曲快要结束的时候,老大爷又从舞台左侧出来了,在最后一个音的时候做了个很夸张的像是要摔倒的动作,实在是很可爱。加演的最后一首是闪闪的红星,听到如此熟悉的曲子全场都跟着一起用掌声来打拍子了。(这个好像也是维也纳爱乐乐团在新年音乐会演奏结束曲拉德斯基进行曲时候的惯例。)
听音乐会礼仪上还是有点讲究的,Ann 在这方面就比我在行,正装出席,而我连正装都没有一套,结果只能穿着休闲衬衫、牛仔裤和运动鞋去,好在周围的人多数也没有穿得太正式,不然就太突兀了。另外每一首曲子的乐章间隔时不该鼓掌,昨天虽然在开场前和第一首曲子结束后在广播中有告知听众,但还是有人在乐章之间鼓掌,只有到了最后一首小夜曲的乐章间隔,可能是由于曲子本身的原因,大家都不好意思去打破宁静的氛围而没有在乐章间隔鼓掌。而谢幕时怎样鼓掌表示请求加演,什么时候应该站起来 Ann 也不是很清楚,以后要找个行家扫盲。到了上海听音乐会的机会会比较多,到时候不能在这种事情上面丢人。