【时间复杂度的计算】

目录

  • 一、时间复杂的的概念
    • 1、定义
    • 2、基本计算规则
  • 二、单层循环时间复杂度计算公式
  • 三、双层循环时间复杂度计算公式
  • 四、多层循环时间复杂度计算公式
    • 1、法一:抽象为计算三维物体的体积
    • 2、法二:列式求和

一、时间复杂的的概念

1、定义

时间复杂度(time complexxity)是一个定性描述该算法运行时间的函数,它代表算法输入值的字符串的长度。时间复杂度常用O表述,不包括这个函数的低阶项和首项系数。

时间复杂度的大小比较:
在这里插入图片描述
时间复杂度的分类:

  1. 算法完成工作最少需要多少基本操作叫做最优时间复杂度,是一种最乐观理想的状态;
  2. 算法完成工作需要多少基本操作叫做最坏时间复杂度,是算法的一个保障;
  3. 算法完成工作平均需要多少基本操作叫做平均时间复杂度,它可以均匀全面地评价一个算法的好坏。

2、基本计算规则

  1. 基本操作即只有常数项,认为其时间复杂度为O(1);
  2. 顺序结构,时间复杂度按加法计算;
  3. 循环结构,时间复杂度按乘法计算;
  4. 分支结构,时间复杂度取最大值;
  5. 判断一个算法效率时,往往只需要关注操作的最高次项,其他次要项和常数项可以忽略;
  6. 在没有特殊说明时,我们所分析的时间复杂度都是最坏时间复杂度。

二、单层循环时间复杂度计算公式

计算步骤:

  1. 列出循环趟数t及每轮循环i的变化值
  2. 找到t与i的关系
  3. 确定循环停止条件
  4. 联立两式解方程
  5. 写结果

例题分析一:

i = n*n;
whlie(i != 1)i = i/2;

第一步:列出循环趟数t和每轮循环i的变化值

t0123
in^2(n^2)/2(n^2)/4(n^2)/8

第二步:找到t和i的关系
i = (n2)/2t
第三步:确定循环停止条件
i =1
第四步:联立第二步和第三步两式解方程:
在这里插入图片描述
所以得到的时间复杂度为:
在这里插入图片描述
例题分析二:

x = 0;
whlie(n>=(x+1)*(x+1))x = x+1;

第一步:列出循环趟数t和每轮循环x的值:

t0123
x0123

第二步:找到t与x的关系:
t = x
第三步:确定循环停止的条件
在这里插入图片描述
第四步:联立第二步和第三步解方程
在这里插入图片描述
所以时间复杂度为:
在这里插入图片描述

三、双层循环时间复杂度计算公式

解题步骤:

  1. 列出循环中i的变化值
  2. 写出内层语句的执行次数
  3. 求和,写结果

例题分析一:

int m = 0, i , j;
for(i = 1; i<=n;i++)for(j = 1;j<=2*i;j++)m++;

第一步:列出循环中i的变化值

i1234567n

第二步:写出内层语句的执行次数

内层语句执行次数2468102*n

第四步:求和,写结果
2+4+6+8+…+2*n = n(n+1)
所以时间复杂度为:
在这里插入图片描述
例题分析二:

for(i = 0;i<n;i++)for(j=0;j<m;j++)a[i][j] = 0;

第一步:列出循环中i的变化值

i01234n-1

第二步:写出内层语句执行次数

内层语句执行次数mmmmm

第三步:求和,写结果
m * (n-1-0+1) = m*n
在这里插入图片描述
例题分析三:

count = 0;
for(k=1;k<=n;k*=2)for(j=1;j<=n;j++)count ++;

注意此处外层循环中不是k++而是k *=2,所以先计算外层循环的单层时间复杂度:

循环趟数t123456
k12481632

循环趟数t和k关系:
在这里插入图片描述
循环停止条件为:k =n
联立两式,得:
在这里插入图片描述
外层的时间复杂度就为:
在这里插入图片描述
计算内层时间复杂度为O(n)
总体时间复杂度为:
在这里插入图片描述

四、多层循环时间复杂度计算公式

例题分析一:

for(i=0;i<=n;i++)for(j=0;j<=i;j++)for(k=0;k<j;k++)

1、法一:抽象为计算三维物体的体积

在这里插入图片描述
时间复杂度为:
在这里插入图片描述

2、法二:列式求和

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Linux 内核编译与模块开发:深入掌握系统核心

Linux 内核编译与模块开发&#xff1a;深入掌握系统核心 Linux 内核是操作系统的核心&#xff0c;负责管理系统的硬件和软件资源。掌握 Linux 内核编译和模块开发技能&#xff0c;可以帮助你更好地理解系统工作原理&#xff0c;定制系统功能&#xff0c;以及解决内核相关的问题…

Reids基础(redis基础详解)——从入门到精通

文章目录 redis入门1、key相关命令2、五大数据类型1、String&#xff08;字符串&#xff09;2、List&#xff08;列表&#xff09;3、Set&#xff08;值不会重复&#xff09;3、hash(map)Zset(有序集合) 3、三种特殊数据类型1、geospatial(地理位置)2、Hyperloglog(基数统计)3、…

重塑知识探索之旅——基于大型语言模型的智能维基体验

在信息爆炸的时代,我们渴望的不仅是海量的知识,更是高效、个性化且富有乐趣的学习方式。传统的百科全书虽然丰富,但在互动性和定制化方面存在局限。本文将介绍一个创新项目——基于大型语言模型(LLM)的互动式知识平台,旨在提供超越传统百科全书的沉浸式学习体验。 创新亮…

ThreeJS-3D教学十五:ShaderMaterial(noise、random)

ThreeJS-3D教学十四:ShaderMaterial(length、fract、step) 上面这篇主要是操作 fragmentShader 片元着色器,实现对物体颜色的修改,这次咱们来看下修改 vertexShader 顶点着色器,这个其实就是位移各个顶点的位置。 接下来我们先介绍下 noise 噪声函数(Perlin Noise、Sim…

设计模式7-装饰模式

设计模式7-装饰模式 写在前面动机模式定义结构代码推导原始代码解决问题分析 选择装饰模式的理由1. 职责分离&#xff08;Single Responsibility Principle&#xff09;2. 动态扩展功能3. 避免类爆炸4. 开闭原则&#xff08;Open/Closed Principle&#xff09;5. 更好的组合复用…

vue3项目,表单增删改

效果图 ArticleChannel.vue页面代码 <script setup> import {artGetChannelsService ,artDelChannelService} from /api/article.js import { Edit, Delete } from element-plus/icons-vue //调用open方法&#xff0c;ChannelEdit去修改组件内部类容 import ChannelEdit…

Unity通过NDK实现C#与C++之间的相互调用

由于一些历史遗留问题&#xff0c;我们项目还在使用一套C实现的Box2D定点数的库&#xff0c;由于最近修改了视野算法所以需要重新打包安卓的【.so】文件&#xff0c;特此记录 1、关于NDK 在Android平台&#xff0c;C/C需通过NDK编译成动态链接库.so文件&#xff0c;然后C#中通过…

大量数据渲染怎么优化速度

1. 分页加载 将数据分成若干份&#xff0c;每次请求当前页数据&#xff0c;在触底加载更多或者点击分页时加载下一页数据。 2. 虚拟列表 只渲染当前视口的数据&#xff0c;当用户滚动时动态更新视口里的内容&#xff0c;并不是一次渲染整个列表&#xff0c;这个方法比较适用…

beanstalkd安装配置方法

目录 概述特性比较Ubuntu下安装示例启动 Beanstalkd 服务查看 Beanstalkd 服务状态重启 Beanstalkd 服务停止 Beanstalkd 服务配置beanstalkd 持久化参考资料 概述 Beanstalkd 是一个简单、快速、轻量级的开源消息队列系统&#xff0c;用来处理异步任务和消息传递。适合需要引…

播放ReadableStream格式二进制流音频

播放ReadableStream格式二进制流音频 接口返回中&#xff0c;body为ReadableStream格式的二进制流 <!DOCTYPE html> <html><head><title>实时语音生成与播放</title></head><body><h1>输入文本生成语音</h1><textare…

【渗透测试】利用hook技术破解前端JS加解密 - JS-Forward

前言 在做渗透测试项目时&#xff0c;尤其是金融方面&#xff0c;经常会遇到前端JS加解密技术&#xff0c;看着一堆堆密密麻麻的密文&#xff0c;会给人一种无力感。Hook技术则会帮助我们无需获取加解密密钥的前提下&#xff0c;获取明文进行渗透测试 环境准备 JS-Forward Burp…

城市地下综合管廊物联网远程监控

城市地下综合管廊物联网远程监控 城市地下综合管廊&#xff0c;作为现代都市基础设施的重要组成部分&#xff0c;其物联网远程监控系统的构建是实现智慧城市建设的关键环节。这一系统集成了先进的信息技术、传感器技术、通信技术和数据处理技术&#xff0c;旨在对埋设于地下的…

DangerWind-RPC-framework---一、服务注册与发现

服务的注册与发现借助Spring Bean的生命周期来完成。 Spring Bean的生命周期的步骤中包含以下几步&#xff1a;调用aware接口、BeanPostProcessor 执行postProcessBeforeInitialization方法、BeanPostProcessor 执行postProcessAfterInitialization方法。现在需要利用这三个步骤…

动态模型管理:Mojo模型的自定义保存与加载控制

动态模型管理&#xff1a;Mojo模型的自定义保存与加载控制 在机器学习模型的生命周期中&#xff0c;模型的保存与加载是一个至关重要的环节。Mojo模型&#xff0c;作为H2O.ai提供的一种模型部署格式&#xff0c;主要用于模型的序列化和预测。Mojo模型支持将训练好的模型转换为…

sql 清空表,并清空自增 id

执行 sql TRUNCATE 表名 表名替换为自己要清空的表 在 Navicat 中 新建查询输入 上述 sql点击运行即可表页 f5 刷新&#xff0c;数据已经清空&#xff0c;再次新增数据&#xff0c;自增 id 从 1 开始

Tomcat的负载均衡、动静分离

一、如何tomcat和nginx负载均衡及动静分离&#xff1a;2台tomcat&#xff0c;3台nginx来实现 1.首先设置tomcat1和tomcat2服务器 关闭两台tomcat的防火墙及安全机制&#xff1a;systemctl stop filwalld setenforce 0 进入tomcat目录的webapps中&#xff0c;创建test 2.配…

音频demo:使用opencore-amr将PCM数据与AMR-NB数据进行相互编解码

1、README a. 编译 编译demo 由于提供的.a静态库是在x86_64的机器上编译的&#xff0c;所以仅支持该架构的主机上编译运行。 $ make编译opencore-amr 如果想要在其他架构的CPU上编译运行&#xff0c;可以使用以下命令&#xff08;脚本&#xff09;编译opencore-amr[下载地…

【SpringBoot3】使用os-maven-plugin为项目自动添加常用的变量

一、什么是os-maven-plugin os-maven-plugin 是一个 Maven 扩展/插件&#xff0c;它根据 ${os.name} 和 ${os.arch} 生成各种有用的、与平台相关的项目属性&#xff0c;并将这些属性标准化。${os.name} 和 ${os.arch} 在不同的 JVM 和操作系统版本之间往往存在细微的差异&…

移除元素合并两个有序数组-LeetCode

一、移除元素 . - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; int removeElement(int* nums, int numsSize, int val) {int src0;int dst0;while(src<numsSize){if(nums[src]val){src;}else if (nums[src]!val){nums[dst]nums[src];src;dst;}}return dst…

渲染引擎之ECS架构介绍

1.什么是ECS&#xff1f; 我们先简单地介绍一下什么是ECS&#xff1a; E -- Entity 实体&#xff0c;本质上是存放组件的容器C -- Component 组件&#xff0c;引擎所需的所有数据结构S -- System 系统&#xff0c;根据组件数据处理逻辑状态的管理器 ECS全称Entity-Component-…