“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情”
一.算法的基本概述
1.算法概述
对于特定问题求解步骤的一种描述,是指令的有限序列,每条指令表示一个或者多个操作。
2.算法的五大特性(只是算法的必要条件但并不是算法的定义)
- 有穷性:算法必须在有穷的步骤之后结束,并且每一步在有穷的时间内完成。
- 确定性:每条指令必须有确定的含义,对于相同的输入只能得出相同的输出。
- 可行性:算法中操作都可以通过已经实现的基本运算执行有限次来实现。
- 输入:一个算法有零个或者多个输入,输入取决于某个特定对象的集合。
- 输出:一个算法有零个或者多个输出,输出是和输入有着某种特定关系的量。
3.设计一个好的算法需要考虑的因素以及目标
- 正确性:正确的解决问题。
- 可读性:好的算法需要有良好的可读性,帮助理解。
- 健壮性:输入非法数据可以自动识别,做出相应的反应以及处理,不会产生非法的结果。
- 高效率以及低存储量:效率(时间复杂度或者空间复杂度)其实就是整个算法执行的时间。而存储量需求其实就是算法执行过程中所需要的最大存储的空间。
4.算法效率的度量
1.时间复杂度:
- 频度:语句被执行的次数。
- 算法中所有语句的频度记作
例如:在数组a,0到n-1之间,查找指定的值k的算法大致如下
i=n-1;
while(i>=0&&(a[i]!=k)
i--;
return i;
一个算法的时间复杂度有以下两个规则:
- 加法准则:
- 乘法准则:
常见的算法时间复杂度排序:(必须要熟记!!!)
2.空间复杂度
练习以下相关算法时间复杂度以及空间复杂度的问题
1.分析下面程序的时间复杂度:
void fun(int n){
int i=1;
while(i<n)
i=i*2;//基本运算
}
该程序的基本运算是i=i*2,假设执行的次数为t那么,,可以知道
2.分析下面程序的时间复杂度:
void fun(){
int i=0;
while(i*i*i<n)
i++;//基本运算
}
基本运算:i++,执行次数是t,。
“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情”