1 | Problem Solving with Algorithms and Data Structures Using Python - Second Edition |
https://www.bilibili.com/video/BV1n5411h7Ys?from=search&seid=15590717491486760043
[toc]
第 1 章 导论
1.4 Python 基础
- Python 列表提供的方法
* HINT:结合 list 和 range 来初始化列表
- Python 字符串提供的方法
split 在处理数据的时候非常有用。split 接受一个字符串,并且返回一个由分隔字符作为分割点的字符串列表。
1
'David'.split('v')
在本例中,v 就是分割点。如果没有提供分隔字符,那么 split 方法将会寻找如制表符、换行符和空格等空白字符。
集 (set)是由零个或多个不可修改的 Python 数据对象组成的无序集合。集不允许重复元素,并且写成由花括号包含、以逗号分隔的一系列值。空集由 set() 来表示。集是异构的,并且可以通过下面的方法赋给变量。
假设有两个Fraction 对象,f1 和 f2 。只有在它们是同一个对象的引用时, f1 == f2 才为 True 。这被称为浅相等。深相等 ——根据值来判断相等。
Python 字典提供的方法
- 格式化字符串
1 | print("%s is %d years old." % (aName, age)) |
- 格式化字符串可用的类型声明
- 列表可以通过使用迭代结构和分支结构来创建。这种方式被称为列表解析式
1 | sqlist = [x*x for x in range(1,11)] |
- try, except; raise也可以触发运行时的异常
1 | if anumber < 0: |
第 2 章 算法分析
2.2 何谓算法分析
2.2.1 大 O 记法
- O(log
2n)
2.2.2 异序词检测
- 清点法 O(n^2^)
1 | def reverse_word(str1, str2): |
- 计数法 O(n)
1 | lst1 = [0] * 26 |
- 该算法执行时间是线性的,它还是要用额外的空间来存储计数器。也就是说, 这个算法用空间换来了时间。
- 单词统计字符次数可以考虑用字典。
2.3 Python 数据结构的性能
2.3.1 列表
- 一般来说,创建列表的操作时间对比,列表表达式([i for i in range(xxx)]) < list(range(xxx)) < append(i) 追加 < 连接(l += [i])
- Python 列表操作的大 O 效率(以底层数组实现为例)
操作 | 大 O 效率 |
---|---|
索引 | O(1) |
索引赋值 | O(1) |
追加 | O(1) |
pop() | O(1) |
pop(i) | O(n) |
insert(i, item) | O(n) |
删除 | O(n) |
遍历 | O(n) |
包含 | O(n) |
切片 | O(k) |
删除切片 | O(n) |
设置切片 | O(n + k) |
反转 | O(n) |
连接 | O(k) |
排序 | O(nlogn) |
乘法 | O(nk) |
2.3.2 字典
- Python 字典操作的大 O 效率
操作 | 大 O 效率 |
---|---|
复制 | O(n) |
取值 | O(1) |
赋值 | O(1) |
删除 | O(1) |
包含 | O(1) |
遍历 | O(n) |
- 在某些特殊情况下,包含、取值、赋值等操作的时间复杂度可能变成O(n)。
第三章 基本数据结构
3.2 何谓线性数据结构
- 一旦某个元素被添加进来,它与前后元素的相对位置将保持不变。
3.3 栈
3.3.3 用 Python 实现栈
- 假设列表尾部是栈的顶端