返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言数据结构与算法之时间空间复杂度入门
  • 892
分享到

C语言数据结构与算法之时间空间复杂度入门

2024-04-02 19:04:59 892人浏览 安东尼
摘要

目录数据结构与算法什么是数据结构?什么是算法?分析维度大O的渐进表示法常数阶线性阶对数阶其他时间复杂度指标空间复杂度数据结构与算法 终于开始搞这块难啃的骨头了,走上这条漫漫长路之前要

数据结构与算法

终于开始搞这块难啃的骨头了,走上这条漫漫长路之前要明白:

什么是数据结构?什么是算法?

是数据之间存在一种或多种特定关系的数据元素集合,为编写出一个“好”的程序,必须分析待处理对象的特性及各处理对象之间存在的关系,这也就是研究数据结构的意义所在为编写出一个“好”的程序,必须分析待处理对象的特性及各处理对象之间存在的关系这也就是研究数据结构的意义所在

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列 ,并且每条指令表示一个或多个操作

抛开上面的学术性口水话,简单来说就是:

1.数据结构是计算机存储,组织数据的方式

2.算法是一系列规定的计算步骤,为了实现的特定的计算目的而应用

给个更直观的视图就是:算法+数据结构就等于程序,数据结构可以理解为实现一个程序的基本单位,算法可以看作一个加工过程。

比如我去从一个很大的数组里面提取某个特定的对象,我们既可以老老实实从头到尾遍历查找,也就是所谓的暴力搜索,工程量随着数组的容量增大而增大;我们也可以巧夺智取,用二分查找让我们工作事半功倍。

分析维度

在知道基本概念后,我们说在拿到一个算法后,我们怎么去看他的好坏?或者给你多个算法,他们都实现同一个功能,我们怎么去判断他的优缺点去取舍呢?正常情况下,我们会选择把这个代码放在某个环境下运行比较时间,但这个做法有一个致命的缺点,在我们不同机器上,会有不同的结果,在好的机器上,运行时间会很短,但是在比较差一点的主机上,就稍有逊色,这样一来就有失公平。

大O的渐进表示法

不要直接计算时间,,我们需要去计算一个渐进的时间复杂度,也就是所谓的Big O (大O表示法),他其实本质上实在求一个量级(时间)在增加时的一个变化趋势

时间复杂度公式:T(n)=O(f(n))

T(n):时间频度(执行次数)
n :问题规模;
f(n):T(n)的同数量级函数;
O :代表正比例关系;
O(f(n)):即算法的渐进时间复杂度

常数阶

我们的算加法的完整过程:

int main()
{
int a = 1;
int b = 1;
int sum = a+b;
printf("%d",sum);
}

我们每走一步就会执行一次,上面的代码我就执行了四次;那么如果我把他的sum部分重复执行数十次数百次数千次,但他本质上和执行四次没有区别,执行时间是恒定的,这个层面上,他的时间复杂度就是O(1)(常数阶)。

不管这个常数是多少,4或∞,都不能写成O(4)、O(∞),都要写成O(1)

线性阶

我们给出一个 for loop

for(int a = 1;a<=n;a++)
{
 a++;
}

分析线性阶时会比常数阶更复杂因为要分析他的循环结构,上面的代码限制再++,总共执行3次,包括常数阶的赋值就是O(3n+1),在我的n足够大时他会无限接近于无穷,这时的+1就会没有意义。

这时就顺理成章,嵌套循环我们也就可以理解了,两层 for 就是O(n2),三层就是O(n2)for 下面加一个双层for循环就是O(n+n2)……这里面就包含了**平方阶**;此时我O(n)的效率就比O(n2)高。

对数阶

我们再给出一个while loop

int n = 0;
while(n<100000)
{
n*=2;
}

我们要看执行次数就要看多少步才能走出循环,就意味着要乘 x 个2能>=10000,则表示为 2^x =100000,假设为随机数 a,则 x= log 2 ^a,
复杂度为O(logn)

除了上面三种之外还有其他的复杂度

在这里插入图片描述

从常数阶到阶乘是越来越复杂,我们看一下直观数据:

在这里插入图片描述

这里横轴是输入(input)量级,纵轴是消耗时间也就是时间复杂度,也就是有个很直观的信息:算法复杂度越高,需要的时间越长,到后面就直接指数级增长。

其他时间复杂度指标

虽然有下面这些种吧,但我们主要会把重心放在 O 上,毕竟它是最常用的指标。

在这里插入图片描述

空间复杂度

空间复杂度是指内存空间增长的趋势,相对就容易理解一些,O(1)就是相当于单次赋值,而 O(n)相当于赋值n次,可以把他想成一个大小为 n 的数组,复杂度越高需要分配的空间就越多;同理,O(n^2)就可以想成一个n行n列的二维数组。

今天就到这里吧,摸了家人们,更多关于C语言数据结构与算法时间空间复杂度的资料请关注编程网其它相关文章!

--结束END--

本文标题: C语言数据结构与算法之时间空间复杂度入门

本文链接: https://lsjlt.com/news/139254.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言数据结构与算法之时间空间复杂度入门
    目录数据结构与算法什么是数据结构?什么是算法?分析维度大O的渐进表示法常数阶线性阶对数阶其他时间复杂度指标空间复杂度数据结构与算法 终于开始搞这块难啃的骨头了,走上这条漫漫长路之前要...
    99+
    2024-04-02
  • 数据结构与算法—时间复杂度和空间复杂度
    目录 1. 什么是数据结构? 2.什么是算法? 3、算法的复杂度 4、时间复杂度 (1) 时间复杂度的概念:  (2) 大O的渐进表示法:  六个例题: (3) 时间复杂度对比:  两个例题:  OJ题分析时间复杂度 5、空间复杂度 (1...
    99+
    2023-10-24
    数据结构
  • C语言数据结构之算法的时间复杂度
    目录1、算法的复杂度2、时间复杂度2.1 时间复杂度的定义2.2 大O的渐进表示法3、常见时间复杂度计算举例3.1 冒泡排序的时间复杂度3.2 二分查找的时间复杂度3.3 阶乘(递归...
    99+
    2024-04-02
  • C语言数据结构的时间复杂度和空间复杂度
    目录一、数据结构前言        1.什么是数据结构:        2.什么是...
    99+
    2023-05-15
    C语言时间复杂度和空间复杂度 C语言时间复杂度 C语言空间复杂度
  • C语言数据结构与算法时间空间复杂度基础实践
    目录小感想时间复杂度空间复杂度小感想 今天去看了看许多人今年去各个大厂面试的面经,确实如大体所说,各大公司越来越注重性能迭代,时代需要数据结构与算法这样的考试。 一个公司的成本主要来...
    99+
    2024-04-02
  • C语言数据结构与算法时间空间复杂度实例分析
    这篇文章主要介绍“C语言数据结构与算法时间空间复杂度实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据结构与算法时间空间复杂度实例分析”文章能帮助大家解决问题。时间复杂度来看第一个:l...
    99+
    2023-06-29
  • C语言数据结构通关时间复杂度和空间复杂度
    目录一、时间复杂度:1.常数阶2.线性阶3.对数阶4.平方阶二、空间复杂度算法的时间复杂度和空间复杂度 一、时间复杂度: 首先,为什么会有这个概念的出现呢? 原来啊,在进行算法分析时...
    99+
    2024-04-02
  • Java数据结构与算法系列精讲之时间复杂度与空间复杂度
    目录概述算法的衡量标准时间复杂度最优时间复杂度平均时间复杂度最坏时间复杂度O(1)O(n)O(n^2)O(logN)空间复杂度O(1)O(n)概述 从今天开始, 小白我将带大家开启 ...
    99+
    2024-04-02
  • 数据结构--算法的时间复杂度和空间复杂度
    文章目录 算法效率时间复杂度时间复杂度的概念大O的渐进表示法计算实例 时间复杂度实例 常见复杂度对比例题 算法效率 算法效率是指算法在计算机上运行时所消耗的时间和资源。这是衡量算法...
    99+
    2023-09-08
    算法 数据结构 时间效率 复杂度
  • Java 数据结构之时间复杂度与空间复杂度详解
    目录算法效率时间复杂度什么是时间复杂度推导大 O 阶的方法算法情况计算冒泡排序的时间复杂度计算二分查找的时间复杂度计算阶乘递归的时间复杂度计算斐波那契递归的时间复杂度空间复杂度计算冒...
    99+
    2024-04-02
  • 算法与数据结构之如何理解时间与空间复杂度
    本篇内容介绍了“算法与数据结构之如何理解时间与空间复杂度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写在...
    99+
    2024-04-02
  • C语言数据结构时间复杂度及空间复杂度简要分析
    目录一、时间复杂度和空间复杂度是什么?1.1算法效率定义1.2时间复杂度概念1.3空间复杂度概念二、如何计算常见算法的时间复杂度和空间复杂度2.1时间复杂度计算2.2空间复杂度计算2...
    99+
    2024-04-02
  • C语言算法的时间复杂度和空间复杂度
    目录1.算法效率1.1 如何衡量一个算法的好坏1.2算法的复杂度2.时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3常见时间复杂度计算举例 3.空间复杂度4...
    99+
    2024-04-02
  • C语言数据结构的时间复杂度和空间复杂度实例分析
    这篇文章主要讲解了“C语言数据结构的时间复杂度和空间复杂度实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言数据结构的时间复杂度和空间复杂度实例分析”吧!一、数据结构前言 ...
    99+
    2023-07-06
  • C语言数据结构之算法的时间复杂度实例分析
    这篇文章主要讲解了“C语言数据结构之算法的时间复杂度实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言数据结构之算法的时间复杂度实例分析”吧!1、算法的复杂度算法在编写成可执行程序...
    99+
    2023-06-30
  • 【数据结构】 时间和空间复杂度
    文章目录 如何衡量一个算法的好坏算法效率时间复杂度时间复杂度的概念大O渐近表示法推导大O阶方法 常见的时间复杂度计算【实例1】【实例2】【实例三】【实例四】【实例五】【实例六】【实例七】...
    99+
    2023-08-31
    数据结构 java 算法 时间复杂度 空间复杂度
  • Java数据结构--时间和空间复杂度
    目录一、算法效率二、时间复杂度 1.概念2.大O的渐进表示法3.练习练习一:计算阶乘递归factorial的时间复杂度练习二:计算斐波那契递归fibonacci的时间复杂度...
    99+
    2024-04-02
  • C语言详细解析时间复杂度与空间复杂度
    目录一、概念1.1、算法效率1.2、时间复杂度1.3、空间复杂度二、计算2.1、大O的渐进表示法2.2、时间复杂度计算2.3、空间复杂度计算三、有复杂度要求的习题一、概念 1.1、算...
    99+
    2024-04-02
  • C语言时间复杂度与空间复杂度实例分析
    这篇文章主要介绍“C语言时间复杂度与空间复杂度实例分析”,在日常操作中,相信很多人在C语言时间复杂度与空间复杂度实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言时间复杂度与空间复杂度实例分析”的疑...
    99+
    2023-06-29
  • Java数据结构通关时间复杂度和空间复杂度
    目录算法效率时间复杂度空间复杂度小结算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被 称作空间复杂度。 时间复杂度主要衡量的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作