【时间复杂度的计算】

目录

  • 一、时间复杂的的概念
    • 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,一经查实,立即删除!

相关文章

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#中通过…

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

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

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

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

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[下载地…

移除元素合并两个有序数组-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-…

SAPUI5基础知识11 - 组件配置(Component)

1. 背景 组件&#xff08;Component&#xff09;是SAPUI5应用程序中独立且可重用的部件。 SAPUI5提供以下两类组件: faceless组件 (class: sap.ui.core.Component): 无界面组件即没有用户界面相关的元素&#xff0c;用于不需要UI元素编码的场景&#xff1b; UI组件 (class: …

C# 实现基于exe内嵌HTTPS监听服务、从HTTP升级到HTTPS 后端windows服务

由于客户需要把原有HTTP后端服务升级为支持https的服务&#xff0c;因为原有的HTTP服务是一个基于WINDOWS服务内嵌HTTP监听服务实现的&#xff0c;并不支持https, 也不像其他IIS中部署的WebAPI服务那样直接加载HTTPS证书&#xff0c;所以这里需要修改原服务支持https和服务器环…

JAVA进阶学习11

文章目录 一、方法引用1.1 引用静态方法1.2 引用成员方法1.3 引用构造方法1.4 方法引用的其他调用方式1.4.1 使用类名引用成员方法1.4.2 引用数组的构造方法 1.5 总结二、异常2.1 异常的处理2.1.1 JVM虚拟机处理异常2.1.2 try...catch异常处理 2.2 异常中的常见方法2.3 异常的抛…

Java集合升序降序、转Set的方法

Collections.sort(list,Comparator.comparing(OcApplySquareVo::getApplyName).reversed()); 集合转set /** 集合转set */Set<String> pkCodeSet rows.stream().map(RailwayWeighBookResult.RailwayWeighBook::getPkCode).collect(Collectors.toSet());

互联网接入技术的简单介绍

引言 要连接到互联网&#xff0c;用户必须先连接到某个ISP&#xff08;互联网服务提供商&#xff09;。接入技术解决的就是用户如何连接到本地ISP的问题&#xff0c;通常称之为“最后一公里”。本文将详细介绍几种主要的互联网接入技术&#xff0c;帮助初学者了解不同的接入方…

【SOM神经网络的数据分类】SOM神经网络的数据分类的一个小案例

【SOM神经网络的数据分类】SOM神经网络的数据分类的一个小案例 注&#xff1a;本文仅作为自己的学习记录以备以后复习查阅 一 概述 自组织特征映射网络&#xff08;Self-Organizing Feature Map, SOM&#xff09;也叫做Kohonen网络&#xff0c;它的特点是&#xff1a;全连接、…

【C++深度探索】继承机制详解(二)

hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1…

如何把已经上传到gitlab的代码或者文件夹从git上删掉

有小伙伴不小心把缓存文件上传到了git&#xff0c;跑来问我&#xff0c;要怎么把这些文件给删掉&#xff0c;这里一共有两种方式&#xff0c; 先说第一种&#xff0c;通过命令删除&#xff0c;终端进入存在这个缓存文件的目录&#xff0c;执行命令ls&#xff0c;可以看到确实有…

从零开始搭建vite开发环境

准备 nodejs 18 pnpm https://vitejs.cn/ 开始 pnpm init pnpm add -D vite新建index.html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…