时间复杂度和空间复杂度

简介: 时间复杂度和空间复杂度

前言

本文介绍一下关于时间和空间复杂度

一、时间复杂度

时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个数学函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。

二、使用步骤

1.引入库

代码如下(示例):

void func1(int N){
int count = 0;
for (int i = 0; i < N ; i++) {
for (int j = 0; j < N ; j++) {
count++;
 }
}
for (int k = 0; k < 2 * N ; k++) {
count++;
} 
int M = 10;
while ((M--) > 0) {
count++;
} 
System.out.println(count);
}

F(N) = n^2+2n+10

近似的认为O(n^2);

2.推导大o阶方法

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

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

3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。

使用大O的渐进表示法以后,Func1的时间复杂度为O(N^2).

通过上面我们会发现大O的渐进表示法去掉了那些对结果影响不大的项,简洁明了的表示出了执行次数。

另外有些算法的时间复杂度存在最好、平均和最坏情况:

最坏情况:任意输入规模的最大运行次数(上界)

平均情况:任意输入规模的期望运行次数

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

例如:在一个长度为N数组中搜索一个数据x

最好情况:1次找到

最坏情况:N次找到

三.空间复杂度

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度 。空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法

1.引入库

// 计算bubbleSort的空间复杂度?
void bubbleSort(int[] array) {
  for (int end = array.length; end > 0; end--) {
    boolean sorted = true;
     for (int i = 1; i < end; i++) {
        if (array[i - 1] > array[i]) {
        Swap(array, i - 1, i);
         sorted = false;
}
} 
 if(sorted == true) {
 break;
}

实例1使用了常数个额外空间,所以空间复杂度为 O(1)

/
/ 计算阶乘递归Factorial的空间复杂度?
long factorial(int N) {
return N < 2 ? N : factorial(N-1)*N;
}
递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。空间复杂度为O(N)

最后附上一张排序的时空复杂度

总结 好了,今天文章到此为止,期待大佬的三连和评论

目录
相关文章
|
8月前
|
存储 人工智能 缓存
空间复杂度介绍
空间复杂度介绍
83 0
|
13天前
|
算法 程序员 存储
时间复杂度与空间复杂度详解
时间复杂度与空间复杂度详解
|
1月前
|
算法
了解时间复杂度和空间复杂度
在学习数据结构前,我们需要了解时间复杂度和空间复杂度的概念,这能够帮助我们了解数据结构。 算法效率分为时间效率和空间效率
18 1
|
1月前
|
机器学习/深度学习 算法 Windows
时间复杂度
时间复杂度
|
1月前
|
机器学习/深度学习 存储 算法
时间复杂度和空间复杂度
时间复杂度和空间复杂度
22 0
|
8月前
|
机器学习/深度学习 算法
时间复杂度和空间复杂度详解
时间复杂度和空间复杂度详解
101 0
|
1月前
|
机器学习/深度学习 算法 Windows
时间复杂度与空间复杂度
如何理解时间复杂度与空间复杂度
|
1月前
|
机器学习/深度学习 算法 搜索推荐
2.时间复杂度与空间复杂度
2.时间复杂度与空间复杂度
34 0
|
7月前
|
算法
【时间复杂度和空间复杂度】
【时间复杂度和空间复杂度】
36 0
|
8月前
|
存储 机器学习/深度学习 并行计算
空间复杂度
空间复杂度(Space Complexity)是用于描述算法在执行过程中所需占用空间大小的量度。空间复杂度通常与算法的输入规模成正比,表示算法在处理不同规模数据时所需的空间资源。空间复杂度可以帮助我们评估算法的效率,以及在实际应用中可能产生的内存消耗。
46 0