首页 > 编程语言 >【数据结构和算法】一、算法复杂度:时间复杂度和空间复杂度)

【数据结构和算法】一、算法复杂度:时间复杂度和空间复杂度)

时间:2024-10-25 16:19:59浏览次数:3  
标签:1.4 1.3 复杂度 算法 时间 空间 数据结构

目录

1、算法复杂度

1.1 概念

1.2 评价指标

1.3 时间复杂度

1.3.1 什么是时间复杂度

1.3.2 常数阶O(1)

1.3.3  线性阶O(n)

1.3.4  对数阶O(logN)

1.3.5  线性对数阶O(nlogN)

1.3.6 平方阶O(n²)

1.3.7  立方阶O(n³)、K次方阶O(n^k)

1.4  空间复杂度

1.4.1  空间复杂度 O(1)

1.4.2 空间复杂度 O(n)


1、算法复杂度

1.1 概念

        算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。

1.2 评价指标

如何去衡量不同算法之间的优劣?

从算法所占用的「时间」和「空间」两个维度去考量。

  • 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。
  • 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。

        因此,评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。然而,有的时候时间和空间却又是「鱼和熊掌」,不可兼得的,那么我们就需要从中去取一个平衡点。

下面我来分别介绍一下「时间复杂度」和「空间复杂度」的计算方式。

1.3 时间复杂度

1.3.1 什么是时间复杂度

我们想要知道一个算法的「时间复杂度」,很多人首先想到的的方法就是把这个算法程序运行一遍,那么它所消耗的时间就自然而然知道了。

这种方式可以吗?当然可以,不过它也有很多弊端。

这种方式非常容易受运行环境的影响,在性能高的机器上跑出来的结果与在性能低的机器上跑的结果相差会很大。而且对测试时使用的数据规模也有很大关系。当然,还需考虑算法还没有办法完整的去运行的情况。

因此,另一种更为通用的方法就出来了:「 大O(符号)表示法 」,即 T(n) = O(f(n))

我们先来看个例子:

for i in range(n):       # 行1
   j = i                 # 行2 
   j++;                  # 行3

通过「 大O(符号)表示法 」,这段代码的时间复杂度为:$O(n)$ ,为什么呢?

在 大O表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,这个公式的全称是:渐进时间复杂度(asymptotic complexity)。

我们继续看上面的例子,假设每行代码的执行时间都是一样的,我

标签:1.4,1.3,复杂度,算法,时间,空间,数据结构
From: https://blog.csdn.net/weixin_45736855/article/details/143227967

相关文章

  • 数据结构图的最短路径-弗洛伊德算法(有向图+数据结构课本C++代码一比一转C语言+邻接矩
    弗洛伊德算法有向图代码如下:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<stdlib.h>#include<limits.h>#defineMaxInt32767#defineMVNum100intPath[MVNum][MVNum];//存放前驱索引的intD[MVNum][MVNum];//存放当前已知的权值//图的邻接......
  • 非常牛 H 开头的算法
    考前发现欧拉回路不会。然后寻求多方大佬,最后比较深刻地理解了一个叫Hierholzer的算法。这个算法暴力写法是:先找一条欧拉路径,然后把这个路径上的点删了。再看看这个链上的点能不能再被换成环,能的话就把这个点换成新找的路径,这步用链表插入,这个过程是递归的。复杂度很......
  • 数据结构——队列和栈
    目录一、栈        1、概念与结构    2、栈的结构与初始化    3、入栈        4、出栈         5、取栈顶元素         6、取栈中有效元素个数          7、栈是否为空 二、队列     1、概念......
  • 数学算法
    1.筛质数力扣相关题目:204.计数质数、2523.范围内最接近的两个质数要在某个范围内计算出所有质数时,先在这个范围内做预处理,把所有的质数筛出来埃氏筛:从前往后,把质数的倍数都去掉(因为这肯定不是质数了)constintMX=5e6; //比如数据范围是0~5*10^6vector<int>primes; //......
  • 【有啥问啥】视频插帧算法技术原理详解
    视频插帧算法技术原理详解引言视频插帧(VideoInterpolation)技术,作为计算机视觉领域的一项重要应用,旨在通过算法手段在已有的视频帧之间插入额外的帧,从而提升视频的帧率,使其看起来更加流畅。这一技术不仅广泛应用于电影特效、视频游戏、运动捕捉等领域,还随着计算机视觉和......
  • 越界检测视频分析网关区域入侵识别人员入侵算法的技术原理和视频监控应用
    在传统的监控模式下,依赖人工持续监视视频画面存在明显的局限性,包括疲劳、注意力分散以及无法覆盖所有区域等问题,这使得实现24小时、全方位监控变得困难。而人工智能技术的应用,通过在关键位置部署摄像头,能够捕获连续的视频流。结合深度学习模型,这些视频流可以被实时分析,从而提高了......
  • 数据结构 ——— C语言实现链式队列
    目录队列的概念以及示意图数组队列和链式队列链式队列的结构 实现链式队列的准备工作实现链式队列1.初始化2.打印队列的所有数据3.数据入队列(尾插)4.数据出队列(头删)5.访问队头的数据6.访问队尾的数据7.队列数据总个数8.判断队列是否为空9.释放队列的所......
  • 数据结构 ——— C语言实现数组栈
    目录栈的概念以及示意图链式栈和数组栈链式栈:数组栈:数组栈的结构实现数组栈的准备工作实现数组栈初始化数组栈入栈(尾插)出栈(尾删)访问栈顶数据判断栈是否为空栈数据的总数访问栈的所有数据释放栈Stack.h的所有代码Stack.c的所有代码栈的概念以及示意图栈......
  • 数据结构有哪些
    数据结构分类涉及多方面,主要包括:1、线性结构、2、树形结构、3、图形结构、4、集合结构、5、文件结构。在这些种类中,线性结构是最基本、也是最为广泛使用的一种,它包括数组、链表、栈和队列等数据结构,通过线性的方式组织数据元素。以数组为例,它以连续的内存空间顺序存储数据,通过索引......
  • 基础数据结构(1)
    单链表与双链表的用处单链表单链表的存储:单链表的几种操作在表头插入一个数:先将这个数指向head指向的数,再将head指向这个数在表中的第k位后面插入一个数:先将这个数指向第k位指向的数,再将第k位指向这个数在表中删除一个数:让这个数直接指向下一个数的下一个数代码实现:/......