一.算法基础
1.程序
算法:
- 确定性:有确定步骤
- 有限性:在规定时间内结束
- 可行性:每个步骤都是可以操作的
- 输入:一个程序可以有0个或多个输入
- 输出:必须有1个或多个输出
数据结构:数据如何储存
优秀的文档
2.时间复杂度
- 找出算法的基本语句
- 计算基本语句的执行次数
- 用大O记号表示算法的性能
- 时间函数就是把时间规模函数简化为一个数量级
3.枚举 (暴力)
- 列出有穷序列集的所有元素
4.贪心
- 总是选当前看起来最好的原则
- 贪心的证明
5.二分
在解的域 有一半合法 一半不合法
6.冒泡排序 o(n^2)
def bubble_sort(array):
for i in range(1, len(array)):
for j in range(0, len(array)-i):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
return array
7.快速排序 o(nlogn)
- 首先设定一个分界值,通过该分界值将数组分成左右两部分。
- 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。
- 对左边和右边分别排序
二.动态规划
1.性质
- 最优子结构:一个问题的最优解包含其子问题的最优解
- 无后效性:在某个阶段上过程的状态已知,则从此阶段以后过程的发展变化仅与此阶段的状态有关,而与过程在此阶段以前的阶段所经历过的状态无关。
- 大量重复子问题
2.步骤
- 定义状态
- 寻找决策
- 确定初值