【数据结构】初识时间空间复杂度

简介: 【数据结构】初识时间空间复杂度

1.数据结构与算法概念

(1)什么是数据结构

  • 数据结构指的是相互之间有一种或者多种特定的关系数据元素集合。
  • 数据结构可以分成逻辑结构和物理结构。
  • 逻辑结构:抽象意义上的结构,按照对象中元素的关系分类


62e112abd5e540b59942026cba28f127.jpg


  • 物理结构:又叫存储结构,主要有顺序存储跟链式存储


044a7720cecc4763a85d783816b1c174.jpg


(2)什么是算法

  • 算法是被计算机使用来解决问题的方法,就对于程序而言,算法就是程序的灵魂,优秀的程序可以在面对大量数据计算时,依旧能够保持高速的计算。
  • 对于小型的程序来说,就算这个算法差劲,解决的问题步骤比较繁琐,这样不会有很大的关系。但是如果对数据量大的程序(如何从海量数据千万级别的数据中快速找到自己想要的一条数据),我们就需要对时间和空间有要有效的利用,也就是设计一个高效的算法,在同样的硬件设备的情况下,有时候会把速度提高十倍甚至上百倍。

(3)什么是程序

  • 程序 = 数据结构 + 算法
  • 数据是程序的中心。数据结构和算法两个概念间的逻辑关系贯穿了整个程序世界,首先二者表现为不可分割的关系。没有数据间的有机关系,程序根本无法设计
  • 数据结构与算法关系:数据结构是底层,算法高层。数据结构为算法提供服务。算法围绕数据结构操作

2.时间复杂度

(1)什么是时间频度

  • 一个算法所花费的时间跟算法里语句的执行次数是成正比的。
  • 算法里的语句执行次数越多,说明所耗的时间就越多。
  • 一个算法的语句执行的次数被称为时间频度T(n)

(2)案例

00bcd10f3a8d4b0f8b9fe641ab3bbe17.jpg

3.大O计数法表示时间复杂度

(1)什么是大O计数法

  • 算法的时间复杂度通常用大O符号来表示表述,定义的形式为T[n] = O(f(n)),称T(n)受限于f(n)。
  • 如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),T(n)是关于问题规模n的函数
  • T(n)称为这一算法的“时间复杂度”。当输入量n逐渐加大时,时间复杂度的极限情形称为算法的“渐近时间复杂度”。

(2)常见的时间复杂度使用大O表示

  • 常数阶O(1)
int a= 0;
++a;
int c =a+1;

这个代码不管是执行了多少行,只要没有循环等这种复杂的结构,那时间复杂度就是O(1)

  • 线性阶O(n)
int sum= 0;
for(int i =1;i<=100;i++){
   sum+=i;
}

这段代码for循环里面的代码会执行n次,因为随着n的变化所消耗的时间也随之变化,这类的代码都可以使用O(n)来表示

  • 平方阶O(n²)
int sum= 0;
int n=10;
for(int j = 1;j<=n;j++){
  for(int i =1;i<n;i++){
     sum+=i;
  }
}

这段代码n是10,外层会循环执行10次,内层会循环指向10次,总共指向10*10=100次,也就是n的平方次,使用O(n2)来表示。同理,如果使用了三层循环那么时间复杂度就是O(n3)立方阶

  • 对数阶O(Logn)
int i=1
int sum=100
while(i<sum){
   i=i*2
}

这里的while循环,每经过一轮,也就是每经过一次i*2的运算,结果就会里sum的值越近 2^x=n,时间复杂度就是O(Logn)

  • 常见的算法时间复杂度由小到大排序
  • O(1),可以看出随着规模n的不断变大,执行的效率就越低。

4.线性结构与非线性结构

(1)什么是线性结构

  • 线性结构是最常用的数据结构,它的特点是数据元素之间是一对一的关系,如数组a[0]=1,那么数组下标为0的时候就等于了1,这就是一对一的关系。
  • 线性结构的储存结构有两种,一个是顺序存储结构(以数组方式),一种是链式存储结构(链表)。顺序存储结构的线性表又被称作为顺序表,顺序表里存储的元素是连续的,分配的地址也是连续的。
  • 链式存储的线性表又被称为链表,链表里存储的元素不一样是连续的,一般所储存的数据作为一个节点,每个节点分配一个指针来找到下一个节点的位置获取相关信息。
  • 线性结构常见的有:数组、队列、栈、链表
  • (2)什么是非线性结构
  • 非线性结构里的各个数据元素不保持在一个线性的序列当中,每一个数据元素都可能会与0个或者是多个其他的数据元素发生联系的。
  • 常见的非线性结构有:二维(多维)数组,广义表,树结构,图结构


相关文章
|
5月前
|
存储 算法
数据结构——lesson1时间复杂度和空间复杂度
数据结构——lesson1时间复杂度和空间复杂度
|
5月前
|
机器学习/深度学习 存储 缓存
数据结构从入门到精通——算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度是评估算法性能的两个重要指标。时间复杂度主要关注算法执行过程中所需的时间随输入规模的变化情况,而空间复杂度则关注算法执行过程中所需的最大存储空间或内存空间。
221 0
|
5月前
|
机器学习/深度学习 存储 算法
数据结构 | 算法的时间复杂度和空间复杂度【详解】(二)
数据结构 | 算法的时间复杂度和空间复杂度【详解】(二)
|
5月前
|
机器学习/深度学习 存储 算法
数据结构 | 算法的时间复杂度和空间复杂度【详解】(一)
什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。
|
5月前
|
机器学习/深度学习 算法 C语言
打开数据结构大门:深入理解时间与空间复杂度
打开数据结构大门:深入理解时间与空间复杂度
52 0
|
5月前
|
机器学习/深度学习 存储 算法
数据结构——时间复杂度与空间复杂度
数据结构——时间复杂度与空间复杂度
35 0
|
4月前
|
存储 算法 C语言
数据结构中的空间复杂度
优化空间复杂度对于提升程序性能和资源利用率至关重要,特别是在资源受限的环境(如嵌入式系统和移动设备)中。高效的数据结构和算法设计可以显著提升程序的执行效率和可扩展性。 综上所述,理解和优化空间复杂度是设计高效数据结构和算法的关键。通过分析常见数据结构的空间复杂度,并结合实际代码示例,我们可以更好地理解这一重要概念,并在实际编程中应用这些知识。希望本文能帮助你更好地掌握空间复杂度及其在数据结构中的应用。
34 2
|
5月前
|
机器学习/深度学习 算法 存储
[数据结构]——算法的时间复杂度和空间复杂度
[数据结构]——算法的时间复杂度和空间复杂度
|
2月前
|
存储 算法
【数据结构】——时间复杂度与空间复杂度
【数据结构】——时间复杂度与空间复杂度
|
4月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题