算法面试通关#1.3时间和空间复杂度

算法复杂度:
指算法在编写成可执行程序后,运行时所占用的资源,包括时间资源和内存资源,即对应的时间复杂度和空间复杂度。

时间复杂度:
一个算法所耗费的时间,理论上讲是无法计算出来的,需要实际运行才能知道,但我们不可能对每个算法实际上机测试,只需要知道哪个算法费时,哪个算法省时就行。算法花费的时间于算法中语句执行的次数成正比, 一个算法中语句执行的次数被称为语句频度或时间频度,记作T(n)。 而算法的时间复杂度是指执行算法所需要的计算工作量。

空间复杂度:
与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:
S(n)=O(f(n))

算法执行期间所需要的存储空间包括3个部分:

  • 算法程序所占的空间;
  • 输入的初始数据所占的存储空间;
  • 算法执行过程中所需要的额外空间。

在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术。

常见的时间复杂度:
Big O notation
0(1): Constant Complexity: Constant 常数复杂度

int n = 1000;
System.out.println("Hey - your input is:" + n );

int n = 1000;
System.out.println("Hey - your input is:" + n );
System.out.println("Hmm.. I'm doing more stuff with:"+ n );
System.out.println("And more:" + n);

O(log n): Logarithmic Complexity: 对数复杂度

for (int i=1; i < n; i = i*2){
	System.out.println("Hey- I'm busy looking at:" + i);
}

O(n): Linear Complexity: 线性时间复杂度

for (int i = 1; i <= n; i++) {
	System.out.println("Hey - 11m busy looking at: " + i);
}

O(n^2): N square Complexity 平方

for (int i = 1; i <= n; i++) {
	for (int j = 1; j <= n; j++) {
		System.out.println("Hey - 11m busy looking at:" + i + "and" + j);
	}
}

O(n^3): N square Complexity 立方
O(2^n): Exponential Growth 指数

for (int i = 1; i <= Math.pow(2, n);i++{
	System.out.println("Hey - I'm busy looking at:" +

O(n!): Factorial 阶乘

for (int i = 1; i <= factorial(n);i++{
	System.out.println("}-ley - I'm busy looking at:"+ i);
}

注意: 当许多代码合在一起,只看最高复杂度的代码

主定理:
在算法分析中,主定理(英语:master theorem)提供了用渐近符号(大O符号)表示许多由分治法得到的递推关系式的方法。这种方法最初由Jon Bentlery,Dorothea Haken和James B. Saxe在1980年提出,在那里被描述为解决这种递推的“天下无敌法”(master method)。此方法经由经典算法教科书Cormen,Leiserson,Rivest和Stein的《算法导论》 (introduction to algorithm) 推广而为人熟知。
常见算法的应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_41906368

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值