算法介绍及时间复杂度和空间复杂度

算法

  • 是指令的集合,是为解决特定问题而规定的一系列操作。
  • 他明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出。
  • 五个特征:
    • 输入:一个算法应以待解决的问题的信息作为输入
    • 输出:输出对应指令集处理后得到的信息。
    • 可行性:算法是可行的,即算法阿忠的每一条指令都是可以实现的
    • 无穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止
    • 确定性:算法对于特定的合法输入,其对应的输出是唯一的
  • 算法就是计算机解题的过程

评价算法的优劣

  • 复杂度(时间复杂度,空间复杂度)
  • 算法的复杂性体现了该算法的计算机所需资源的多少上,主要是时间和空间
  • 时间复杂度:指执行算法所需要的计算工作量
  • 空间复杂度:执行这个算法所需要的空间资源

时间复杂度

  • 算法的时间复杂度是指执行算法所需要的计算工作量。计算机算法是问题规模n 的函数f(n),算法的时间复杂度因此记做T(n)=Ο(f(n))
  • 因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关
  • 时间复杂度就是时间频度去掉低阶项和首项常数
  • 一般讨论最坏时间复杂度
  • T(n) = O(n2) O表示最坏情况
  • T(n) = Ω(n2) Ω表示最好情况
  • T(n) = Θ(n2) Θ表示最坏和最好一样的情况
// 一个简单语句的时间复杂度为O(1)
int count =0;

// 时间复杂度为T(n)=O(n^3)
f(n)=5x^3 + 4x^2 + x + 2

// 时间复杂度 O(n)
int n = 8, count = 0;
for(int i = 0; i < n, i++){
	count++;
}

// 时间复杂度 O(log₂n)
int n = 8, count = 0;
for(int i = 1; i < n;i*=2){
	count++;
}

// 时间复杂度 O(n²)
int n = 8, count = 0;
for(int i = 1; i < n;i++){
	for(int j = 1; j < n; j++){
		count++;
	}
}

// 时间复杂度 O(n²)
int n = 8, count = 0;
for(int i = 1; i < n;i++){
	for(int j = 1; j < i; j++){
		count++;
	}
}

// 时间复杂度 O(nlog₂n)
int n = 8, count = 0;
for(int i = 1; i < n;i*=2){
	for(int j = 1; j < n; j++){
		count++;
	}
}

时间复杂度
空间复杂度

  • 算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
  • S(n) = O(f(n))
  • 递归算法,每次调用都要要分配空间,所以空间复杂度为S(n)=O(n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值