时间复杂度分析

简介: 还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群

1、如何考虑代码运行更快、更省存储空间,执行效率是算法一个重要指标。

2、算法分析:时间、空间

3、为什么需要复杂度分析呢?考虑到我们可以把代码跑一遍,通过统计,监控就能得到算法的执行时间和占用内存大小。

3-1)这种方式可以评估效率,可以称呼为事后统计法。

3-2)测试结果依赖测试环境,例如:机器、浏览器、硬件设备

3-3)测试结构根据数据量受限

4、大0复杂度表示法(渐进时间复杂度,简称:时间复杂度),大0时间复杂度并不具体表示代码真正执行时间,而是表示代码执行时间随数据规模而增长趋势。

案例如下: int cal(int n){     int sum = 0;     int i=1;     for(;i<=n;++i){         sum = sum +i;                 }     return sum; }

代码执行时间T(n)与每行代码的执行次数n成正比。

案例分析:

1)3、4行代码都是常量级执行时间,与n的大小无关,所以对复杂度没有影响

2)5、6行代码执行n次

3)结果:总时间复杂度就是 0(n)

公式:

image.png

T(n) : 代码执行时间

n :数据规模的大小

f(n):每行代码执行次数的总和

0:代码执行时间 与 代码执行次数总和 成正比

分析:

1、只关注循环执行次数最多的一行代码,核心代码 执行次数n的量级,也就是整段代码的时间复杂度。

2、大0复杂度方法只是一种变化趋势

3、通常会忽略公式中的常量、低阶、系数,记录最大级量级

4、加法法则:总复杂度等于量级最大的那段代码的复杂度。

案例2:

image.png

sum_1:

1)代码循环1000次、10000次 ,只要是已知数,跟n无关,也是常量级执行时间,尽管有影响,从时间复杂度概念中讲,本身对数据增长趋势并没有影响。

sum_2:

1)0(n)

sum_3:

1)0(n的2平方)

--------

常见时间复杂度

image.png

1)0(1)只是常量级中的一个表示方法,而不是执行代码行数。

2)算法中不存在递归、循环,哪怕有成千上万的代码,时间复杂度都是0(1)

image.png

时间复杂度:0(log3n)

问题遗留:什么是对数阶???

0(nlogn) 算法时间复杂度,归并排序、快速排序,时间复杂度都是O(nlogn)

相关文章
|
5月前
|
存储 算法 C语言
时间和空间复杂度
时间和空间复杂度
53 0
|
5月前
|
算法 测试技术 C#
【二分查找】【区间合并】LeetCode2589:完成所有任务的最少时间
【二分查找】【区间合并】LeetCode2589:完成所有任务的最少时间
|
11天前
|
存储 算法
时间与空间复杂度(详解)(下)
时间与空间复杂度(详解)(下)
28 3
|
11天前
|
机器学习/深度学习 算法
时间与空间复杂度(详解)(上)
时间与空间复杂度(详解)(上)
26 1
|
2月前
|
机器学习/深度学习 存储 算法
算法时间复杂度分析
这篇文章讲解了如何分析算法的时间复杂度,包括关注循环执行次数最多的代码段、总复杂度的确定、嵌套代码复杂度的计算方法,并提供了大O阶的推导步骤和常见时间复杂度的列表,同时还介绍了空间复杂度的概念及其重要性。
|
5月前
|
C++
2589. 完成所有任务的最少时间(区间取点——贪心or线段树)
2589. 完成所有任务的最少时间(区间取点——贪心or线段树)
算法的时间、空间复杂度如何比较?
算法的时间、空间复杂度如何比较?
|
5月前
|
Java 索引
leetcode-746:使用最小花费爬楼梯
leetcode-746:使用最小花费爬楼梯
41 0
|
11月前
|
存储
时间、空间复杂度的例题详解(下)
时间、空间复杂度的例题详解(下)
45 0
|
11月前
|
算法
时间、空间复杂度的例题详解(上)
时间、空间复杂度的例题详解(上)
83 0