JavaDS1-时间复杂度空间复杂度
创始人
2024-04-29 14:01:49
0

目录

1.算法效率

1.1.时间效率(时间复杂度)——衡量算法运行速度

1.2.空间效率(空间复杂度)——衡量算法所需额外空间(如今不再特别关注)

2.时间复杂度

2.1.概念

2.2.大O的渐进表示法

2.2.1.O(F(n))

2.2.2.大O符号

2.2.3.推导大O阶方法

2.3.分类

2.3.1.最坏情况

2.3.2.平均情况

2.3.3.最好情况

2.4.常见计算

2.4.1.O(n)

2.4.2.O(m+n)

2.4.3.O(1)

2.4.4.O(n^2)

2.4.5.O(logN)

2.4.6.计算阶乘递归——O(n)

2.4.7.斐波那契递归——O(2^n)

2.4.8.O(根号n)

2.5.总结

3.空间复杂度

3.1.概念

3.2.大O渐进表示法

3.3.一般分两种

3.4.常见计算

3.4.1.冒泡排序——O(1)

3.4.2.斐波那契(迭代)——O(n)

3.4.3.求阶乘(递归)——O(n)

1.算法效率

1.1.时间效率(时间复杂度)——衡量算法运行速度

1.2.空间效率(空间复杂度)——衡量算法所需额外空间(如今不再特别关注)

2.时间复杂度

2.1.概念

算法中的基本操作的执行次数为算法的时间复杂度。(是一函数,主要看循环)

2.2.大O的渐进表示法

2.2.1.O(F(n))

如果n表示数据规模,那么O(F(n))表示算法所执行的指令数,与F(n)成正比。

2.2.2.大O符号

是用于描述函数渐进行为的数学符号。

2.2.3.推导大O阶方法

1).用常数1取代运行时间中的所有加法常数。

2).在修改后的运行次数函数中,只保留最高阶项。

3).如果最高阶项存在且不是1,则去除与这个项相乘的常数。

得到的结果就是大O阶。

例:F(n)=2n^2+2n+10    ->    O(n^2)

2.3.分类

2.3.1.最坏情况

任意输入规模的最大运行次数(上界)(实际上一般都关注最坏情况,其包含了最高阶)

2.3.2.平均情况

任意输入规模的期望运行次数((最好+最坏)/ 2 )

2.3.3.最好情况

任意输入规模的最小运行次数(下界)

2.4.常见计算

2.4.1.O(n)

2n

10

->(2n+10) -> O(n)

2.4.2.O(m+n)

m

n

->m+n -> O(m+n)

2.4.3.O(1)

100 -> O(1)

2.4.4.O(n^2)

n

n

->O(n^2)

2.4.5.O(logN)

若给定算法的数据规模为n,循环不断进行除法操作(与除以几无关),终止条件直到除数==1或==0,其时间复杂度为O(logN)。其逆过程也同理:*几。如:int i = 1; i < n; i = i + i.

注:

1).logN在算法分析中表示底数为2,对数为N。有些地方也写作lgN.

2).log以a为底的n=log以a为底的b(常数) * log以b为底的n

-> log以a为底的n = log以b为底的n

->与底数无关 -> O(logN)

2.4.6.计算阶乘递归——O(n)

long factorial(int n){return n < 2 ? n : factorial(n - 1) * n;
}

2.4.7.斐波那契递归——O(2^n)

int fibonacci(int n){return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
}

2.4.8.O(根号n)

//求一个数是否是素数
private static boolean isPrime(int num){for(int x = 2; x * x <= num; x++){if(num % x == 0){return false;}return true;}
}

2.5.总结

3.空间复杂度

3.1.概念

是对一个算法在运行过程中临时占用存储空间大小的量度。

即一个算法需要的内存大小,当前算法解决问题开辟的辅助空间大小。

3.2.大O渐进表示法

3.3.一般分两种

O(1)——没开辟额外空间

O(n)——开辟了额外数组空间

很少见O(n^2),O(logn)不存在。

3.4.常见计算

3.4.1.冒泡排序——O(1)

3.4.2.斐波那契(迭代)——O(n)

int[] fibonacci(int n){long[] fibArray = new long[n + 1];fibArray[0] = 0;fibArray[1] = 1;for(int i = 2; i <= n; i++){fibArray[i] = fibArray[i - 1] + fibArray[i - 2];}return fibArray;
}

3.4.3.求阶乘(递归)——O(n)

递归的运行需要额外开辟空间,每进行一次递归,操作系统就在系统栈上开辟一次栈帧空间。

递归函数的空间复杂度取决于递归的深度(调用的次数),基本都是O(n)。

但斐波那契数列除外,递归法的时间/空间复杂度都是O(2^n),迭代法的空间复杂度是O(n)。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...