| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构与算法:复杂度分析 -> 正文阅读 |
|
[数据结构与算法]数据结构与算法:复杂度分析 |
复杂度分析??数据结构主要是指数据的存储结构,关注的是存储空间的问题;而算法可以视作改变存储结构的方法,而方法则涉及到执行的时间,所以,复杂度分析涉及到就是时间与空间两个问题。 渐近记法??提供一种资源表示形式,主要功能是分析某项功能在应对一定规模参数输入时所需要的资源,在这里包括运行时间和存储空间两部分
??在这里我们一般采用O()记法,表示运行的主体。我们来看代码:
??这是一个普通的求和公式,我们假设每一行代码的执行时间完全一致,那么这个函数的执行时间就是
??我们可以轻易的读出,这段代码的运行时间:
T
(
n
)
=
O
(
3
n
2
+
3
n
+
2
)
T(n) = O(3n^2+3n+2)
T(n)=O(3n2+3n+2)
O ( l o g ( n ) ) O(log(n)) O(log(n)):
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
??上述代码可以用这个完全二叉树来理解,想要逐步向上搜索,这其中一共有
n
n
n(16)个数字,那么搜索次数就是
l
o
g
2
(
n
)
log_2(n)
log2?(n)(4).其实,不论这段代码里,不论是乘多少,(2、3、4…)都可以认为是
l
o
g
2
(
n
)
log_2(n)
log2?(n),因为,从数学的角度来说:
??简单来说,这种复杂度就是将 l o g ( n ) log(n) log(n)循环执行 n n n次,也没有什么特殊的。
时间复杂度分析三法则
两个特例带来的扩展??我们来看两段代码
??我们可以看见,这里有两个迭代量 m 、 n m、n m、n而我们就这样去评价的话,完全没办法比较这两个迭代量的量级,所以,对于 s u m 3 sum3 sum3,我们记作 O ( m + n ) O(m+n) O(m+n),对于 s u m 4 sum4 sum4我们记作 O ( m ? n ) O(m*n) O(m?n),这个例子向我们提供了对多元迭代量进行时间复杂度分析提供了思路,对于多元迭代量
时间复杂度分析的几个评价
??很明显,这是一段 O ( n ) O(n) O(n)的查找代码,目的时寻找 t a r g e t target target在数组 n u m s nums nums中的位置,然后我们改动一下:
??很明显,在查找到
t
a
r
g
e
t
target
target的位置后,这段代码就退出了循环,那么,它的时间复杂度就和
t
a
r
g
e
t
target
target位置有着直接的关系,如果
n
u
m
s
[
0
]
=
=
t
a
r
g
e
t
nums[0] == target
nums[0]==target
几个实例
空间复杂度??还是考虑渐近记法,如
??在这里,我们申请了两个空间,一个是大小为
1
1
1的
i
i
i,一个是大小为
n
n
n的
n
u
m
s
nums
nums数组,那么按照渐近记法,空间复杂度就是
O
(
n
)
O(n)
O(n),而我们常见的空间复杂度就是
O
(
1
)
、
O
(
n
)
、
O
(
n
2
)
O(1)、O(n)、O(n^2)
O(1)、O(n)、O(n2),其余的时间复杂度基本不会见到。
结语??复杂度分析讲到这里基本也就没有其它的了,基本就是这样。后续我们还会针对不同的数据结构和一些经典算法写后续文章。数据结构基本按照数组、链表、数、图、栈队的顺序一一来,如果有什么想要了解的算法,也可以私信作者,我会及时按照读者意愿进行更新。最后,本文观点基本来源于
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/9 1:59:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |