数据结构:关于时间复杂度的例题计算

news2024/11/29 13:31:46

1、嵌套循环时间复杂度的计算

在这里插入图片描述
该程序,最上面的嵌套循环里,i每执行一次,j就执行N次,所以嵌套循环执行次数为N*N次;中间的k变量循环了2*N次;最后M变量循环10次。所以总共执行了 N*N+2*N+10 次!
在这里插入图片描述
所以该程序时间复杂度为O(N2)

2、双重循环时间复杂度的计算

在这里插入图片描述
该程序,上面的for循环执行了2*N次,下面的M循环了10次。所以该时间复杂度的函数式为 F(N)=2N+10。则时间复杂度为O(N)

在这里插入图片描述
该程序,上面的循环了M次,下面循环了N次,所以该时间复杂度为O(M+N)
在这里插入图片描述

3、常数循环时间复杂度的计算

在这里插入图片描述
该程序执行了100次,因为没有未知数是常数次,所以该程序的时间复杂度为O(1)。注意不是代表算法运行一次,运行的是常数次。

4、strchr时间复杂度的计算

在这里插入图片描述
strchr的功能是查找字符,程序大致如下:
在这里插入图片描述
我们假设从hello world中去查找字符,那么
在这里插入图片描述

所以我们认为该时间复杂度为最坏情况O(N)

5、冒泡排序的时间复杂度计算

在这里插入图片描述
冒泡排序的执行次数是(N-1)+(N-2)+…+1次。

举个例子来说,一个数列 5 4 3 2 1 进行冒泡升序排列,第一次大循环从第一个数(5)开始到倒数第二个数(2)结束。
比较过程:先比较5和4,4比5小,交换位置变成4 5 3 2 1,比较5和3,3比5小,交换位置变成4 3 5 2 1……最后比较5和1,1比5小,交换位置变成4 3 2 1 5,这时候共进行了4次比较交换运算,最后1个数变成了数列最大数。

对于n位的数列则有比较次数为 (n-1) + (n-2) + …… + 1 = n * (n - 1) / 2,也就是等差数列求和,这就得到了最大的比较次数。
将n * (n - 1) / 2展开得到的最大量级为n2。所以冒泡排序的时间复杂度为O(n2)

6、二分查找的时间复杂度计算

在这里插入图片描述
算时间复杂度不能只是去看几层循环,而是要去看它的思想。
此处,二分查找每查找一次就要除以2。假设一个数组大小为N,那么每查找一次,N就要除以2,最好的情况是O(1),最坏的情况是查找到最后N/2/2/…/2=1,也就是2x=N,所以X=log2N
在这里插入图片描述
所以是二分查找时间复杂度为
在这里插入图片描述
在这里插入图片描述

7、计算n的阶乘递归时间复杂度计算

在这里插入图片描述
递归算法:递归次数*每次递归调用的次数。
这里递归了N次,而每次调用的次数为常数次,所以可忽略,则该时间复杂度为O(N)

8、斐波那契的时间复杂度计算

在这里插入图片描述
这里也可用递归算法求,也就是递归次数*每次递归调用的次数。
在这里插入图片描述
递归次数为20+21+…+2n-1,而每次递归调用的次数为常数次可忽略不计。所以可看成等比数列求和
在这里插入图片描述
所以该时间复杂度为O(2N)

最后总结,我们计算时间复杂度不能单纯只看执行次数,最好是画图自己理解计算,利用公式等来求我们的时间复杂度。

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

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

相关文章

ERROR: Could not find a version that satisfies the requirement six>=1.9.0

问题分析 ERROR: Could not find a version that satisfies the requirement six>1.9.0 (from prompt-toolkit) (from versions: none) ERROR: No matching distribution found for six>1.9.0 出现这个问题的原因是python国内网络不稳定,用pip管理工具安装库…

websocket创建时附加额外信息 [如自定义headers信息(利用nginx)]

目录 情景描述: 解决方案 一、服务端要求前端创建websocket时附带的token,必须放在request的headers中(常出现在第三方的合作中); 思路: 整体效果: 具体步骤: 二、服务端只需要获…

【Unity云消散】巩固step,lerp和smoothstep

之前在学习HLSL常用函数时就有涉及到范围相关的函数,但是最近做的东西发现step,lerp和smoothstep这三个函数总是一直在用,总是会在用的时候突然忘记他们分别是干啥的,这里就记录一下方便查看吧,形式大部分参考Unity Shader 极简实…

单绞机控制算法(线缆行业)

在了解单绞机之前需要大家对收放卷以及排线控制有一定的了解,不清楚的可以参看下面几篇博客,这里不再赘述,受水平和能力所限,文中难免出现错误和不足之处,诚恳的欢迎大家批评和指正。 收放卷行业开环闭环控制算法 PLC张力控制(开环闭环算法分析)_RXXW_Dor的博客-CSDN博…

whistle本地代理线上(vue项目)

安装whistle install -g whistle 安装好后,cmd控制台启动whistle “w2 start” 访问whistle本地前端 127.0.0.1:8899 (一般是这个网址) 这里要注意如果您当前使用的是https类型的域名,需要安装https证书,这样才能代…

ShardingSphere的强制路由不起作用

开启注释 开启hint 然后使用注释去查询:/* ShardingSphere hint: dataSourceNameds_db */

本地数仓项目(三)—— 数据可视化和任务调度

1 背景 本文基于《本地数据仓库项目(一)——数仓搭建详细流程》和《本地数仓项目(二)——搭建系统业务数仓详细流程》数据为依托,实现数据可视化和任务调度 2 构造可视化数据 在mysql中新建ads_uv_count表 DROP TABLE IF EXISTS ads_uv_count; CREATE TABLE ads…

机器学习的一般框架

数据科学开发工具 anaconda:管理开发环境 jupyter:编写整个数据处理流程 pycharm:远程编写调试代码 ipdb:pycharm dubug时偶尔出现一些bug,可以用结合ipdb补充解决 数据开发六步 data 数据的获得、清洗、特征工程等…

1.数据结构(栈 队列 数组 链表)

栈 先进后出 后进先出 队列 先进先出 后进后出

告别2022,寄语2023(论一个普通大学牲的2022年能有多奇葩)

今天是2022年12月31日(当然文章发出应该是2023年1月啦,因为我阳了,/(ㄒoㄒ)/~~),原来时间过得这么快,作为中国地质带专的一名普通计算机学牲,也是趁着跨年之际,写一篇属于自己的年末…

Springcloud elasticsearch基础介绍

哈喽~大家好,这篇来看看Springcloud elasticsearch基础介绍。 🥇个人主页:个人主页​​​​​ 🥈 系列专栏: 【微服务】 🥉与这篇相关的文章: SpringClou…

jdk-HashMap(1.8)源码学习

hashMap介绍hashMap是我们日常用得最多的一种并发包其中之一了,hashMap是线程不安全的,不安全主要体现在高并发的场景下,1.8是用数组链表红黑树实现,1.8之前用数组链表,可能会导致死锁及数据丢失。红黑树结构&#xff…

牛啊!长这么大还是头一次见24W字的SpringBoot从入门到实战文档

牛啊!长这么大还是头一次见24W字的SpringBoot从入门到实战文档! 不服还真不行,因为这份文档包含的内容是又全又新,而且还特别高深,从入门到实战的内容全都有!! 继续往下看: 本文档从…

数据仓库基础知识(维度建模)

一、数据仓库概述1.1 数据仓库定义数据仓库:Data Warehouse,是为企业所决策制定过程,提供所有支持类型的数据集合。用于分析性报告和决策支持。数仓是一个面向主题、集成的、相对稳定、反应历史变化的数据集合,随着大数据技术的发…

[MySQL实战环境部署](超详细版)

MySQL实战环境部署1.部署CentOS1.1部署CenOS虚拟机步骤(1)基于VirtualBox(2)下载CentOS1.2环境部署过程2.部署MySQL1.部署CentOS 1.1部署CenOS虚拟机步骤 (1)基于VirtualBox 下载网址: Virtu…

java初学(仅供自己复习)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

【电子通信如何建立数字信任】

在网络钓鱼攻击兴起之后,多数企业会定期开展针对员工的钓鱼邮件培训,只不过这样的培训效果不尽人意,在一份针对企业的钓鱼报告中,钓鱼邮件的攻击频率在过去几年中成倍增加,反钓鱼工作组甚至观察到了有记录以来的最剧烈…

react hook 源码完全解读

前言 从React Hooks发布以来,整个社区都以积极的态度去拥抱它、学习它。期间也涌现了很多关于React Hooks 源码解析的文章。本文就以笔者自己的角度来写一篇属于自己的文章吧。希望可以深入浅出、图文并茂的帮助大家对React Hooks的实现原理进行学习与理解。本文将…

基于Apache Hudi 和 Apache Spark Sql 的近实时数仓架构之宽表建设

前言 无论是在 lamda 架构还是 kappa 架构中,实时计算通常是使用 flinkmq 来实现的,而在这些场景中涉及到多张表 join 时,一般我们的使用方法是多张流表 join 如:Regular Join、Interval Join,或者流表 维表的方式 j…

Rust入门(十):项目发布

发布配置 在 Rust 中 发布配置是预定义的、可定制的带有不同选项的配置,他们允许程序员更灵活地控制代码编译的多种选项。 运行 cargo build 发布时采用的 dev 配置,其更适合开发。 运行 cargo build --release 时采用 release 配置,其是更…