算法基础
1、算法概念:
解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作
一个算法具有以下五个特征
- 有穷性(算法要能计算完)
- 确切性(每一步都要有意义)
- 输入项()
- 输出项
- 可行性(算法是正确的,可以执行)
2、时间复杂度:
算法评定:算法分析的目的在于选择合适算法和改进算法,一个算法的优劣主要从时间复杂度和空间复杂度来考虑时间复杂度:执行算法所需要的计算工作量,一般来说,计算机算法是问题规模n的函数f(n)。算法的时间复杂度也因此记作T(n)=O(f(n))
问题的规模n越大,算法执行的时间的增长率与f(n)的增长率为正相关,称作渐进时间复杂度
时间复杂度效率排行:
O(1) > O(log2n) > O(n) > O(nlog2n) > O(n^2) > O(n^3) > O(2^n) > O(n!) > O(n^n)
2.1、时间复杂度其他概念
最坏情况:
最坏情况时的运行时间,如果没有特别说明,说的时间复杂度即为最坏情况下的时间复杂度
平均情况:
期望运行的时间
2.2、时间复杂度计算方式
常见时间复杂度:
平方阶O(n^2)、常数阶O(1)、线性阶O(n)、 立方阶O(n^3)、 对数阶、nlog2n阶、指数阶
2.2.1、时间复杂度计算方式
得出算法的计算次数公式
用常数1来取代所有时间中的所有加法常数
在修改后的运行次数函数中,只保留最高阶项
如果最高阶存在且不是1,则去除与这个项相乘的常数(比如O(n^2+3n+1) 那么只取最高阶n^2,所以时间复杂度为 O(n^2) )
1、线性阶O(n):
2、常数阶O(1):
3、平(立)方阶O(n^2) / O(n^3):
4、特殊平(立)方阶O(n^2+n+1) --》 O(n^2) :
5、对数阶 O(log2n):
3、空间复杂度
算法需要消耗的内存空间,记作S(n)=O(f(n))
包括程序代码所占用的空间,输入数据所占用的空间,辅助变量所占用的空间这三个方面
计算和表示方法与时间复杂度类似,一般用复杂度的渐进性来表示
冒泡排序的空间复杂度:O(1)
4、排序算法
4.1、冒泡排序
原理:两两相邻的数进行比较,如果反序就交换,否则不交换
时间复杂度:最坏O(n^2)、平均 O(n^2)
空间复杂度:O(1)
$arr = [3,2,1,4,9,11,10,100,300,200,333,5,7,8];
$arr_len = count($arr);
for($i=0;$i<$arr_len;$i++){
$arr[$i]
}
4.2、直接插入排序
4.3、希尔排序
4.4、选择排序
4.5、快速排序
4.6、堆排序
4.7、归并排序
在这里插入图片描述