Py算法与数据结构

01 什么是算法?

规格、步骤、正确性与资源取舍

对应本节 12 道题。点击题目展开答案和理由,保留此前生成的详细解析。
第 01 题 问题 1

算法与 Python 程序有什么区别?

参考答案

算法描述解题步骤;程序用 Python 等语言实现步骤。

解析

同一算法可以有不同语言、不同实现;语法正确也不能替代算法正确性。

第 02 题 问题 2

设计“返回最大值”接口前,至少说明哪些输入与输出约定?

参考答案

是否允许空输入、元素类型、返回最大值还是位置,以及错误处理。

解析

边界与返回规则属于规格,不应由实现细节偶然决定。

第 03 题 问题 3

把最大值初始设为 0,对 [-5,-2] 会发生什么?

参考答案

可能错误返回 0,正确最大值是 -2。

解析

偷偷假设数据非负;用第一项初始化并明确处理空输入。

第 04 题 问题 4

逐项求最大值处理完前 k 项后,应维护什么不变式?

参考答案

best 是前 k 项中的最大值。

解析

初始化成立,每次更新后保持,结束时 k=n 得到整体最大值。

第 05 题 问题 5

非空 n 项列表求最大值,键比较多少次?

参考答案

n−1 次。

解析

第一项用于初始化,后面每项与当前 best 比一次。

第 06 题 问题 6

教材 maximum 与 maximum_indexed 都是 O(n) 时间,额外空间一样吗?

参考答案

不一样:切片版本 O(n),下标版本 O(1)。

解析

values[1:] 创建新列表;分析 Python 代码需计入切片。

第 07 题 问题 7

“测试十个输入都正确,因此已证明全部输入正确”对吗?

参考答案

不对。

解析

有限测试可发现反例;完整证明需要基于规格和不变式等推理。

第 08 题 问题 8

反复按姓名搜索,何时建立字典索引可能值得?

参考答案

查询很多次且数据维护成本可接受时。

解析

要算建立 O(n) 时间、O(n) 空间和后续查询/更新,不能只看一次平均查询。

第 09 题 问题 9

建立姓名到记录的 dict 时,重复姓名有什么风险?

参考答案

后面的记录会覆盖同键旧记录。

解析

要约定唯一键、保留多条还是拒绝重复;这是业务规则。

第 10 题 问题 10

二分循环每次不缩小候选范围,可能有什么问题?

参考答案

可能无限循环。

解析

算法要取得进展;更新 low/high 时应排除已经比较的 mid。

第 11 题 问题 11

速度更快但内存超预算的算法一定更适合吗?

参考答案

不一定。

解析

正确性、时间和空间约束共同决定选择,不能只比最快秒数。

第 12 题 问题 12

已经有现成排序库,学习排序原理还有什么实际价值?

参考答案

理解前提、复杂度、稳定性、空间和适用边界。

解析

通常仍可使用可靠组件;懂原理帮助选择、调试和判断何时需要外部排序。