> 最近参加华为软件精英挑战赛,感觉编程、算法在目前做项目中非常重要,所以开始学习。我看的是《大话数据结构》和王卓老师的课,陈越老师的课程也很多人推荐,小破站都能搜到,欢迎大家一起学习交流,写的不对的地方烦请多多指正。
1. 绪论
1. 用计算机解决一个问题的步骤
2.基本概念
程序 = 数据结构 + 算法
数据结构:是相互之间存在的一种或多种特定关系的数据元素的集合。
意义:为编写一个“好”的程序,必须分析处理对象的特性及各处理对象之间的关系。
3. 抽象数据类型ADT
形式定义可以用D S P三元组表示,D:数据对象, S:D上的关系, P:对D的基本操作集
返回的数据前需要+ &,例如下图 Circle(&C, r,x,y)中&C:返回圆。
4.总结
2. 算法
1. 算法的描述
2. 基本概念
-
程序 = 数据结构 + 算法
-
数据结构通过算法操作
-
算法根据数据结构设计程序
-
-
算法
- 是解决问题的一种方法or 一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法
- 程序是某种设计语言对算法的具体实现
-
算法估算:一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于:
- 算法采用的策略、方法
- 编译产生的代码质量
- 问题的输入规模
- 机器执行指令的速度
-
算法运行时间 = 语句执行次数(语句频度) * 语句执行一次所需时间
- 每条语句执行一次所需时间,取决于机器的指令性能,速度及编译的代码质量,由机器本身软硬件环境决定,与算法无关
-
函数的渐近增长
- 给定两个函数f 和g ,如果存在一个整数N,使得对于所有的n>N,f 总比 g 大, 说f 的增长渐近快于g
- 判断一个算法效率时,只关注最高阶项的阶数
-
平均运行时间是所有情况种最有意义的,因为它是期望的运行时间
-
一般在没有特殊说明的而情况下,都是指最坏时间复杂度
3. 知识点逻辑图
4. 时间复杂度补充
- 常见时间复杂度
时间复杂度所耗费的时间越小,算法越优。
- 语句频度
- 主要看最深层的语句的频度
for(i = 1; i<=n; i++)
for(j=1; j<=i; j++)
for(k=1; k<=j; k++)
x = x+1;
- 对数阶时间复杂度计算