第四章 图书馆的“偶遇”与数据结构的答案 (1/5)
午后的阳光透过图书馆高大的落地窗,在光滑的木质地板上投下菱形的光斑。空气里弥漫着旧书纸张特有的干燥气息,混合着淡淡的油墨味。沈幼薇抱着几本厚重的专业书,脚步放得很轻,目光却像雷达一样扫过阅览区一排排桌椅。
第三排,靠窗,第二个位置。
顾凛果然在那里。
他穿着浅灰色的棉质衬衫,袖子挽到手肘,露出线条流畅的小臂。面前摊开着一本比砖头还厚的《算法导论》,旁边叠放着几本笔记和草稿纸。他微微低着头,额前的碎发垂落,遮住部分眉眼,只能看见高挺的鼻梁和抿成一条直线的薄唇。笔尖在纸上划过,发出极轻的沙沙声,专注得仿佛与周遭隔绝。
沈幼薇在原地站了几秒,深吸一口气,在心里又默念了一遍准备好的说辞,才抬脚走过去。
脚步声在安静的阅览室里显得有些突兀。顾凛似乎没有察觉,直到沈幼薇拉开他对面的椅子坐下,他才笔尖一顿,抬起眼。
那双黑沉的眼睛看过来,没什么情绪,像平静的深潭。
沈幼薇的心脏不争气地快跳了两拍,脸上却努力挤出一个自然的微笑,压低声音:“好巧啊,顾凛同学。你也来复习数据结构?”
顾凛的目光在她脸上停顿了大约一秒,然后垂下,重新落回书页上,淡淡地“嗯”了一声,算是回应。
沈幼薇准备好的开场白被这一个音节堵了回去。她暗自咬了咬牙,把怀里的书放在桌上,发出轻微的“咚”声。最上面一本,正是《数据结构与算法(C语言版)》。
她翻开书,找到折角的一页,又拿出自己的笔记本,上面密密麻麻写满了推导过程和疑问。她故意把笔记本往桌子中间推了推,确保顾凛只要抬眼就能看到上面画满问号的一题。
“那个……”她清了清嗓子,声音依旧压得很低,带着恰到好处的困扰,“第三章的作业,链表的反转算法,递归和非递归的实现,时间复杂度分析那里……我推了几遍总觉得有点问题。教材上的证明跳了一步,你看这里……”
她用手指点着笔记本上的一行公式,身体微微前倾,目光“期待”地看着顾凛。
顾凛终于又抬起了头。他没有看沈幼薇,目光直接落在她的笔记本上。扫了几眼,他伸手拿过旁边一张空白的草稿纸,抽出笔。
“这里,”他的笔尖点在沈幼薇画问号的地方,声音平稳无波,语速却很快,“你混淆了平均情况和最坏情况。递归深度是n,每层递归操作是O(1),所以递归总时间复杂度是O(n)。非迭代的while循环,遍历次数也是n,每次操作O(1),所以也是O(n)。教材省略的是对栈空间的分析,递归需要O(n)的栈空间,非递归只需要O(1)的额外空间。”
他一边说,一边在草稿纸上写下简洁的公式和箭头示意。字迹凌厉清晰,逻辑严密得可怕。
沈幼薇其实早就弄懂了这道题。她期末考试数据结构拿了A。但此刻,她必须让自己显得困惑而好学。她微微蹙着眉,盯着顾凛写下的步骤,适时地提出几个“笨问题”:
“那为什么递归的栈空间开销一定是O(n)呢?如果编译器优化尾递归……”
“C语言标准不保证尾递归优化。”顾凛打断她,笔尖在纸上点了点,“而且你的递归写法不是尾递归形式。”
“……哦。”沈幼薇适时地露出恍然又有点不好意思的表情,“那……还有这道,关于B树和B+树在数据库索引中应用的选择,教材只说了一个大概,我查了些资料,还是有点模糊……”
&nbs
本章未完,请点击下一页继续阅读