延迟计算: 关于 Python 的 yield

在 SICP 第 3 章中,有一段部分内容是以 stream 为核心而展开的。而 stream 的特点就是 lazy evaluation / delayed evaluation (惰性求值 / 延迟计算)。在接触 stream 之时,我便立即联想到 Python 具有类似的功能 — yield

对 SICP Chapter 2 的一些理解

SICP 第二章的标题为 “Building Abstractions with Data”。与第一章标题“Building Abstractions with Procedures” 相比,这一章明显注重于在数据上的抽象。因此,在本章中所采用的例子中,会有多种数据类型被抽象出来,而每种数据类型又会对应着多种操作,那么随着代码量的增多,如何在不减少需求的情况下正确的对数据的抽象将直接影响开发者编码时的难度以及后期维护的成本。

在阅读和练习完 Chapter 2 之后,我想谈一下对我思维冲击比较大的几个点。

创建了适用于 hexo 的一个主题 mls

之前用的主题是基于 landscape, 虽然这确实是一个不错的主题,使用上也没什么不便,但毕竟这是一个他人贡献的主题。我一直想试着自己做一个主题。之前也尝试在 landscape 上改,修改了一些颜色,对 CSS 做了一些简单修改,但布局没变,整体一眼还是能看出这是 landscape,并且因为我当时不熟悉 EJS 模板,对 Sass 及 CSS3 不是特别熟悉,所以有些功能的实现也完全不知道怎么做,比如一些透明效果的动画。

最近一段时间,相对以前来说稍微不忙了点,所以趁这个机会试着做一个主题了。

晴天 — TOEFL @ ZJU

考前

上一次考托福,考了 93。 这分数明显不够,上次出分立即报了一次。故意选择了跟上次一样的考场 — 浙大 E 考场,原因是不想去熟悉新考场了,找个已经去过的考场吧。

在酒店里发生了一件小插曲,隔壁间的客户发现他们的卡不能打开房门,于是用我房间里的电话向前台求助。关键是这两位,同时也是一对情侣,也是到浙大考托福的,而且是从上海交大来的。女生表现比较开朗,在过程中了解到女生已经考出来了,而男生的成绩不理想,所以她只是陪男生来考试的。短暂的聊天中,并没提到女生的具体分数,但我猜她的分数应该还是比较不错的,因为她说了一句:“TOEFL 分数不需要很高,105 就已经足够了”。

考 GRE @ Ningbo University

大约两个月前报名了在宁波大学的这场 GRE 考试。之所以选择宁波的这场考试,一是因为 8 月份杭州没有考位,只能另寻它处,二是相比与周围的考点(如苏州,南京等),宁波更近,方便我的来回。

写在 TFT 小组 第 35 期 之后

在同学的介绍下,我报名了 刘功勋 老师的 TFT 35 期口语小组。之所以报名这个小组,理由也很简单 —— 就是为了学习口语,为 TOEFL 做准备。在昨天,小组正式结束,感觉收获颇多。同时,这几天又有一些其它想法涌上心头。

Java 中 wait 与 notify 的简单操作

在我知道wait() 与 notify() 以前,我常常用一种看似很 low 的方式控制线程同步

1
2
3
while(condition) {
return ;
}

实际上这个线程是一直在运行的,并没有操作系统概念中的阻塞(Block)。而要实现阻塞(Block)则要借助 Java 线程中的 wait() 操作 与 notify() 操作。

UVa1395 - Slim Span

思路

首先有一点是可以确定的:对于任何一连通图,必有一生成树(简直废话)。
对于这一题,关键的问题是确定最大与最小。对于这种寻找两个相关变量的题,其实一般可以先试着确定一个,然后再去寻找另一个。
比如在这题中,可以迭代每一个边 L,同时把这条边 L 当做最小的边,用比它大的边去试着连同一幅图,知道找到边 R, 使得加上这条边 R 后刚好可以凑成一幅联通图。
因此,从上述思路可以看出,排序是必不可少了。所有排序是第一步。
排序好后进行遍历 L,建立 N (顶点数) 个并查集 S,每加入一条边就将该边的端点对应的并查集合并(前提是两个端点对应不同的并查集)。
直到刚好加入边 R 后,并查集只剩一个,且大小刚好与顶点数相等。此时对于 L 来说,R - L 极为其 “苗条度”。
因此对所有求得的“苗条度”求一个最小值即可。如果连一个“苗条度”都没有,那结果自然就是找不到合适的答案了。