第七章 程序设计基础
1 算法与程序
1.1 算法
1.1.1 算法的基本特征
- 有穷性
- 确定性:含义明确无二义性
- 有效性:每一步都能被执行
- 零个或多个输入:
- 一个或多个输出:
1.1.2 算法的常用表现方式
- 自然语言
- 流程图
- 椭圆形:开始和结束
- 平行四边形:输入输出
- 矩形:处理
- 菱形:判断
- 伪代码
- 计算机语言
1.1.3 常用算法
- 枚举法
- 归纳法
- 迭代/递推法
- 递归法:直接递归、间接递归(A、B算法互相调用)
- 回溯法:先走路径,不通回退;eg:机器人下棋
- 解析法:找到问题的解析表达式
1.1.4 排序算法
稳定:计基插归冒
https://blog.youkuaiyun.com/weixin_50886514/article/details/119045154
排序算法 | 平均时间复杂度 | 最坏时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|---|
冒泡排序 | O(n2) | O(n2) | O(1) | 稳定 |
选择排序 | O(n2) | O(n2) | O(1) | 不稳定 |
插入排序 | O(n2) | O(n2) | O(1) | 稳定 |
希尔排序 | O(n log n) | O(n2) | O(1) | 不稳定 |
归并排序 | O(n log n) | O(n log n) | O(n) | 稳定 |
快速排序 | O(n log n) | O(n2) | O(log n) | 不稳定 |
堆排序 | O(n log n) | O(n log n) | O(1) | 不稳定 |
计数排序 | O(n+k) | O(n+k) | O(k) | 稳定 |
桶排序 | O(n+k) | O(n2) | O(n+k) | 稳定 |
基数排序 | O(n*k) | O(n*k) | O(n+k) | 稳定 |
其中,n表示数据规模,k表示数据的取值范围。
- 如果排序算法能够保证相等的元素在排序前后的顺序不变,则称该算法是稳定的;反之,称该算法是不稳定的。
2 数据结构
线性结构
- 线性表:
- 顺序表——数组
- 链表:单链表、双链表、循环链表
- 栈:表位进行插入和删除;后进先出
- 队列:一端插入、另一端删除;先进先出
非线性结构
-
树
-
二叉树的性质
(1)第i层有至多2^(i-1)个结点
(2)深度为k的二叉树至多有2^k-1个结点
(3)具有n个结点的完全二叉树深度为logn + 1
-
-
图
- 有向图、无向图
- 连通图
-
堆
3 Python
- 单行备注:#
- 多行备注:’’’
- 严格缩进
数据类型转换
repr(x):将x转换成表达式字符串
eval(x):计算字符串中的表达式,返回结果(浮点型)
tuple(x):强制类型转换为元组
3.2 序列
索引:
可以为负数,表示从右往左遍历,即倒序
切片:
sname=[start🔚step]
列表方法:
list.append():列表末位插入
list.extend():列表插入其他序列全部元素
list.remove():删除列表中指定值的对象
3.3 元组
- 不可变,元素可重复
创建:tuplename=(1,2,3)
3.4 集合
- 元素不可重复
创建:setname={}
方法:
删除元素:setname.remove()
清除全部元素:setname.clear()
添加元素:setname.add()
3.5 字典
- 键不可重复,值可重复
创建:dictname={’key’:’value’,’key’:’value’;}
方法:
获取值:dictname.get(key)
遍历:dictname.items()