算法基础

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、归并排序

在这里插入图片描述

5、查找算法

5.1、二分查找

5.2、顺序查找

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值