数据结构与算法
算法定义
算法(algorithm)是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性。
1.问题是明确的,包含清晰的输入和输出定义。
2.具有可行性,能够在有限步骤、时间和内存空间下完成。
3.各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。
数据结构定义
数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具有以下设计目标。
1.空间占用尽量少,以节省计算机内存。
2.数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。
3.提供简洁的数据表示和逻辑信息,以便算法高效运行
大 O 复杂度表示法
算法的执行效率,粗略地讲,就是算法代码执行的时间。。尽管每行代码对应的 CPU 执行的个数、执行的时间都不一样,但是,我们这里只是粗略估计,所以可以假设每行代码执行的时间都一样,为 单位时间。
int cat(int){
int sum=0;
int i=0;
for(;i<=n;++1){
sum-=sum+1;
}
return sum;
}
这段代码总的执行时间就是 (2n+2)
int cal(int n) {
int sum = 0; //1
int i = 1;//1
int j = 1;//1
for (; i <= n; ++i) {
j = 1;
for (; j <= n; ++j) {
sum = sum + i * j;
}
}
}
上面代码时间复杂度为:
2
n
2
+
2
n
+
3
2n^2 +2n+3
2n2+2n+3
所有代码的执行时间 T(n) 与每行代码的执行次数 n成正比。
T
(
n
)
=
O
(
f
(
n
)
)
T(n)=O(f(n))
T(n)=O(f(n))
如果用大 O表示法表示刚讲的那两段代码的时间复杂度,就可以记为
T
(
n
)
=
O
(
n
)
,
T
(
n
)
=
O
(
n
2
)
T(n)=O(n),T(n)=O(n^2)
T(n)=O(n),T(n)=O(n2)
时间复杂度分析
- 只关注循环执行次数最多的一段代码
- 加法法则:总复杂度等于量级最大的那段代码的复杂度
- 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
常用类型
空间复杂度分析
表示算法的存储空间与数据规模之间的增长关系。
总结
这里暂时不纠结其他类型,随着深入学习慢慢了解