浅识数据结构之时间复杂度

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。
P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。

  

文章目录

  • 前言
  • 一. 时间复杂度
    • 1.1 时间复杂度的概念
    • 1.2 时间复杂度如何计算
    • 1.3 时间复杂度如何表示
  • 二. 常见复杂度举例
  • 三. 结语

前言


  在了解时间复杂度之前,先向大家科普一个大环境知识。
  当今时代的科学技术,让计算机在面对执行指令是可以以一个夸张的速度进行执行,也就是我们口中对于计算机设备的频率,下面引入一段代码:
void test01()
{int begin = clock();int x = 0;for (int i = 0; i < 100000000; i++){++x;}int end = clock();int time = end - begin;printf("x = %d\n", x);printf("time = %d ms\n",time);
}

在这里插入图片描述


  在如上代码中,我们看到即使我们需要将这个循环执行一亿次,但在计算机设备的加持下,不到一秒就出了结果,可见其执行效率之高。


一. 时间复杂度

1.1 时间复杂度的概念


  时间复杂度的定义:
  在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。
  更加通俗的来讲就是:找到某条基本语句与问题规模N之间的数学表达式,就是算出了该算法的时间复杂度。

1.2 时间复杂度如何计算


  我们照样以实例作为参考:
// 请计算一下Func1中++count语句总共执行了多少次?
void Func1(int N)
{int count = 0;for (int i = 0; i < N; ++i){for (int j = 0; j < N; ++j){++count;}}for (int k = 0; k < 2 * N; ++k){++count;}int M = 10;while (M--){++count;}printf("%d\n", count);
}

  我们将它转化为一个数学表达式

                    F(N) = N² + 2 × N + 10

  在计算时间复杂度时我们将数学表达式中的影响最大的部分摘下来,并将复杂度写作O( N² )


  这时就会有同学问了,上面不是讲到复杂度时基本语句的执行次数的问题吗?为什么上面代码中 count 和 M的定义语句不添加到其中呢?
  在前言中我们讲到,如今的计算机设备执行速率已经十分快速,对于其中的一些细枝末节的语句执行次数我们可以忽略不计,除非他的数量大到可以占到总体的一半以上,否则不添加到计算当中,此时我们就可以引入数学中的极限思想,当上述表达式中N趋近于无穷时,看其最高阶项,其他的在最高阶面前都可忽略不计,因为它太太太小了。

1.3 时间复杂度如何表示


  大O符号(Big O notation):是用于描述函数渐进行为的数学符号。
  推导大O阶方法:

  1、用常数1取代运行时间中的所有加法常数。

  2、在修改后的运行次数函数中,只保留最高阶项。

  3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。


  另外有些算法的时间复杂度存在最好、平均和最坏情况:

  最坏情况:任意输入规模的最大运行次数(上界)

  平均情况:任意输入规模的期望运行次数

  最好情况:任意输入规模的最小运行次数(下界)

  例如:在一个长度为N数组中搜索一个数据x

  最好情况:1次找到

  最坏情况:N次找到

  平均情况:N/2次找到

  在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)。




二. 常见复杂度举例

示例复杂度名称
5201314O( 1 )常数阶
3n + 4O( n )线性阶
3n^2 + 4n + 5O( n² )平方阶
3 log( 2 ) n + 4O( log n )对数阶
3n*log( 2 ) n + 4O( n*log n )nlogn阶
n^3 + n^2 + 4O( n^3 )立方阶
2^nO( 2^n )指数阶

  有意思的是,在数据结构学习中,复杂度log N一般代表的都是以 2 为底的对数,只有当底数为 2 时才可以省略,反之不可以省略,但不是二的情况很少出现,因为其实用价值并不高。


三. 结语


  十分感谢您观看我的原创文章。
  本文主要用于个人学习和知识分享,学习路漫漫,如有错误,感谢指正。
  如需引用,注明地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XSS-跨站脚本攻击 漏洞详解

一、初识XSS 1、什么是XSS XSS全称跨站脚本(Cross Site Scripting)&#xff0c;为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆&#xff0c;故缩写为XSS。这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动…

【已解决简单好用】notepad++怎么设置中文

打开Notepad软件。点击软件界面顶部菜单栏中的“Settings”选项。在下拉菜单中选择“Preferences”进行语言设置。在打开的设置窗口中&#xff0c;找到“General”选项。在“General”选项中&#xff0c;找到“Localization”&#xff08;界面语言&#xff09;项。在下拉菜单中…

Modern CSV for Mac:强大的CSV文件编辑器

Modern CSV for Mac是一款功能强大的CSV文件编辑器&#xff0c;专为Mac用户设计&#xff0c;提供直观易用的界面和丰富的功能&#xff0c;使用户能够轻松编辑和管理CSV文件。 Modern CSV for Mac v2.0.6激活版下载 这款软件支持快速导入和导出CSV文件&#xff0c;方便用户与其他…

【Hadoop】- MapReduce YARN的部署[8]

目录 一、部署说明 二、集群规划 三、MapReduce配置文件 四、YARN配置文件 五、分发配置文件 六、集群启动命令 七、查看YARN的WEB UI 页面 一、部署说明 Hadoop HDFS分布式文件系统&#xff0c;我们会启动&#xff1a; NameNode进程作为管理节点DataNode进程作为工作节…

大数据Hive中的UDF:自定义数据处理的利器(上)

文章目录 1. 前言2. UDF与宏及静态表的对比3. 深入理解UDF4. 实现自定义UDF 1. 前言 在大数据技术栈中&#xff0c;Apache Hive 扮演着数据仓库的关键角色&#xff0c;它提供了丰富的数据操作功能&#xff0c;并通过类似于 SQL 的 HiveQL 语言简化了对 Hadoop 数据的处理。然而…

flutter(学习日记篇-1)

windows配置开发环境等 1.下载sdk---------flutter官网 2.配置环境变量 ①在系统中找到环境变量的配置位置&#xff0c;在用户变量模块中选中变量为path的项进行编辑&#xff08;没有path就新建&#xff09;&#xff0c;然后找到刚才下载的flutter的位置&#xff0c;点击目录…

综合案例(前端代码练习):猜数字和表白墙

目录 一、猜数字 html代码&#xff1a; 点击 猜 按钮的js代码&#xff1a; 点击 重开游戏 按钮的js代码&#xff1a; 整体代码&#xff1a; 页面效果&#xff1a; 二、留言板 css代码&#xff1a; html代码&#xff1a; js代码&#xff08;主逻辑在这&#xff09;&am…

前端进阶特训营-TDD制造rollup-0

11月22日 然叔(夏然)带着大家写rollup, 全部采用TDD方式开发。 rollup是什么&#xff1f;就是一个打包器。 rollup适合类库场景&#xff0c;工程上使用webpack. mini-rollup项目分为6部分 1.原型 Treeshaking,AST 2.节点遍历器 Walk 3.构造作用域 Scope 4.模块分析函数 analyz…

无损以太网的ROCE革命,队列的缓存空间优化分析

ROCE无损以太网&#xff0c;队列的缓存空间优化 多级缓存架构优化芯片性能&#xff1a;* 缓存空间细分为芯片级、端口级和队列级&#xff0c;实现精细管理。* 无损队列引入Headroom缓存空间&#xff0c;确保数据完整性。 在芯片层面&#xff1a; 静态缓存为端口提供保证的缓存空…

欧鹏RHCE 第三次作业

unit3.远程连接服务实战 作业题目: 1. 一.配置两台主机 主机1. 主机名: server.example.com ip: 172.25.254.100 建立用户timinglee&#xff0c;其密码为timinglee 主机2 主机名&#xff1a;client.example.com ip: 172.25.254.200 2.安需求完成项目 172.25.254.200 在远程…

2024.4.19作业

1.总结二进制信号量和计数型信号量的区别&#xff0c;以及他们的使用场景。 二进制信号量只有0和1两个状态&#xff0c;如果信号被一个线程接收&#xff0c;那别的线程就无法接收此信号 计数型信号可以累计&#xff0c;可以被多个线程接收 2.使用计数型信号量完成生产者和消费…

【深度学习实战(11)】搭建自己的dataset和dataloader

一、dataset和dataloader要点说明 在我们搭建自己的网络时&#xff0c;往往需要定义自己的dataset和dataloader&#xff0c;将图像和标签数据送入模型。 &#xff08;1&#xff09;在我们定义dataset时&#xff0c;需要继承torch.utils.data.dataset&#xff0c;再重写三个方法…

ModuleNotFoundError: No module named ‘scripts.animatediff_mm‘ 解决方案

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 本文主要介绍在使用 Stable Diffusion WebUI 安装 AnimateDiff 插件后出现的ModuleNotFoundError: No module named scripts.animatediff_mm异常的解决方案,希望…

第三方应用类---Phpmyadmin 后台 Getshell 操作

免责声明:本节仅做技术交流学习. 目录 什么是Phpmyadmin? getshell前提条件: 详细步骤: 1-搜集到开放phpmyadmin的web,然后访问进去 2-执行SQL命令查看是否开启了读写权限 3-开启了读写权限-->继续 没有开读写权限--->鸡鸡 4-有读写权限之后,执行SQL语句导出文件…

关于edge浏览器点击下载后没有反应的问题解决

不知道什么时候开始&#xff0c;edge浏览器点击下载后没有反应了。 根据网上教程&#xff0c;关闭smartscreen的方式试了没用 后来偶然发现&#xff0c;是因为在扩展里&#xff0c;有一个迅雷下载的扩展&#xff0c;关闭后&#xff0c;就可以正常下载了 具体如下&#xff1a…

Java,Python和Go语言语法差异对比

前段时间一直在找工作&#xff0c;比较颓废&#xff0c;很长时间都没有更新博客了&#xff0c;最近公司的项目需要用到Python语言和Go语言&#xff0c; 所以又重新学习了一下Python语言和Go语言&#xff0c;现在做一些总结&#xff0c;方便以后复习使用&#xff0c;同时也给其他…

扩散卷积模型 笔记

1 Title Diffusion Convolutional Neural Networks&#xff08;James Atwood and Don Towsley&#xff09;【NeurIPS 2016】 2 Conclusion This paper presents diffusion-convolutional neural networks (DCNNs), a new model for graph-structured data. Through the introd…

使用docker搭建GitLab个人开发项目私服

一、安装docker 1.更新系统 dnf update # 最后出现这个标识就说明更新系统成功 Complete!2.添加docker源 dnf config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo # 最后出现这个标识就说明添加成功 Adding repo from: https://download.…

【JavaEE初阶系列】——网络层IP协议(地址管理和路由选择)

目录 &#x1f6a9;网络层 &#x1f388;IP协议 &#x1f469;&#x1f3fb;‍&#x1f4bb;IP协议"拆包组包"功能 &#x1f388;地址管理 &#x1f469;&#x1f3fb;‍&#x1f4bb;IP地址的分类 &#x1f469;&#x1f3fb;‍&#x1f4bb;NAT机制如何工作的…

[阅读笔记20][BTX]Branch-Train-MiX: Mixing Expert LLMs into a Mixture-of-Experts LLM

这篇论文是meta在24年3月发表的&#xff0c;它提出的BTX结构融合了BTM和MoE的优点&#xff0c;既能保证各专家模型训练时的高度并行&#xff0c;又是一个统一的单个模型&#xff0c;可以进一步微调。 这篇论文研究了以高效方法训练LLM使其获得各领域专家的能力&#xff0c;例如…