时间复杂度解释

时空复杂度概述
首先o(1), o(n), o(logn), o(nlogn)是用来表示对应算法的时间复杂度,这是算法的时间复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。

算法复杂度分为时间复杂度和空间复杂度。其作用:

时间复杂度是指执行这个算法所需要的计算工作量;

空间复杂度是指执行这个算法所需要的内存空间;

   时间和空间都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少;

在这里插入图片描述

时间复杂度的优劣对比
常见的数量级大小:越小表示算法的执行时间频度越短,则越优;

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)//2的n方<O(n!)<O(nn)//n的n方

在这里插入图片描述

O(1)解析
O(1)就是最低的时空复杂度了,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。 哈希算法就是典型的O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标(不考虑冲突的话),冲突的话很麻烦的,指向的value会做二次hash到另外一快存储区域。

通俗易懂的例子

什么是O(1)呢,就比如你是一个酒店的管理员,你负责管理酒店的钥匙,你很聪明,你把酒店的100把钥匙放在了100个格子里面存着,并且把格子从1~100进行了编号,有一天有客人来了,酒店老板说,给我拿10号房间的钥匙给我,你迅速从10号格子里面拿出钥匙给老板,速度非常快,这时候你就是一个电脑了,老板跟你说拿几号房房间的钥匙,你只需要看一眼就能知道钥匙在哪里。

O(n)解析
比如时间复杂度为O(n),就代表数据量增大几倍,耗时也增大几倍。
比如常见的遍历算法。要找到一个数组里面最大的一个数,你要把n个变量都扫描一遍,操作次数为n,那么算法复杂度是O(n)。链表遍历是典型的例子。

通俗易懂的例子

突然,有一天,你的老板给你说,你用100个箱子存100把钥匙,太浪费空间了,你能补能把钥匙上编号一下,然后把钥匙要用绳子穿起来,这样我们可以把这个放箱子的地方再装修一个房间出来。你想了一下,是啊,现在房价这么贵,这样能多赚点钱。所以你就不能通过上面的方法来找到钥匙了,老板跟你说,给我拿45号房间的钥匙出来,你就需要从100个钥匙里面挨个找45个房间的钥匙。

O(n^2) 解析
再比如时间复杂度O(n2),就代表数据量增大n倍时,耗时增大n的平方倍,这是比线性更高的时间复杂度。比如冒泡排序,就是典型的O(n2)的算法,对n个数排序,需要扫描n×n次。

用冒泡排序排一个数组,对于n个变量的数组,交换位置n2次数,所以复杂度是n2

通俗易懂的例子

随着经济发展越来越好,你的老板把酒店扩大了,有100层每一层有100个房间,你把每一层的钥匙穿在一起,然后一共就有100个用绳子穿起来的钥匙串。然后老板叫你找钥匙的时候,你先要找到楼层的编号,再对应找到房间的编号,所以大概对应的是这样的代码。

O(log n)解析
再比如O(log n),当数据增大n倍时,耗时增大log n倍(这里的log是以2为底的,比如,当数据增大256倍时,耗时只增大8倍,是比线性还要低的时间复杂度)。二分查找就是O(log n)的算法,每找一次排除一半的可能,256个数据中查找只要找8次就可以找到目标。

通俗易懂的例子

这个就像是有一百把钥匙,你突然觉得,我从头找是不是太慢了,我从中间找,比如我要找到23号的房间钥匙,我从中间切开,找到50编号的位置,然后23在150里面,我再把从中间切开变成25,然后23在125之间,我再切开变成12.5,然后23在12.5~25之间,依次找下去,直到找到钥匙。这种查找钥匙的方法的复杂度就是O(log^n)

O(n log n)解析
O(n log n)同理,就是n乘以log n,当数据增大256倍时,耗时增大256*8=2048倍。这个复杂度高于线性低于平方。归并排序就是O(n log n)的时间复杂度。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Keepalived + DR 集群

目录 1、Keepalive VRRP 说明 故障切换 工作原理 核心组件 2、Keepalived DR 集群 拓扑规划 前期准备 配置 Httpd 服务 配置 Nginx 服务 配置 LVS 主 node_01 配置 LVS 从 node_02 测试 LVS 集群 测试主备切换 3、Keepalived 脑裂现象 4、Keepalived 心态检测 …

C++字符串的常用操作函数全总结

文章目录 1.string、string.h和cstring的区别2.字符串定义3.求字符串的长度&#xff08;也可以求array对象长度&#xff09;4.输入字符串5.分割截取字符串4.在字符串中查找指定子字符串,并返回其第一次出现的位置5.替换字符串中的一部分6.在字符串指定位置插入字符串7.复制字符…

【漏洞通告】 Jenkins CLI 任意文件读取漏洞

漏洞概况 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。Jenkins 有一个内置的命令行界面&#xff08;CLI&#xff09;&…

安装elasticsearch、kibana、IK分词器

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像&#xff0c;这个镜像体积非常大&#xff0…

在Spring Boot中使用iTextPDF创建动态PDF文档

最近&#xff0c;我们的系统新增了一个客服模块&#xff0c;其中一个重要功能是能够以PDF格式导出客服与用户之间的聊天记录。这些聊天记录包含文字、图片和文件等多种内容。为了实现这一功能&#xff0c;我们首先使用了itextpdf 5.x版本制作了一个Demo。今天&#xff0c;我将与…

kubernetes-快速部署一套k8s集群

1、前置知识点 1.1 生产环境可部署Kubernetes集群的两种方式 目前生产部署Kubernetes集群主要有两种方式&#xff1a; kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 二进制包 从github下载发行…

力扣题目训练(5)

2024年1月29日力扣题目训练 2024年1月29日力扣题目训练345. 反转字符串中的元音字母349. 两个数组的交集350. 两个数组的交集 II96. 不同的二叉搜索树97. 交错字符串44. 通配符匹配 2024年1月29日力扣题目训练 2024年1月29日第五天编程训练&#xff0c;今天主要是进行一些题训…

短视频与小程序:如何实现完美结合?

在短视频日益成为人们娱乐、社交和信息获取的重要渠道的今天&#xff0c;如何在短视频平台进行小程序推广成为了许多企业和品牌关注的焦点。本文将介绍如何利用短视频平台进行小程序推广&#xff0c;提升品牌曝光和用户互动。 首先&#xff0c;打开乔拓云-门店系统的后台&#…

使用new操作符,一定是在堆上申请内存么?

《法华经》曰&#xff1a;“ 世尊导师&#xff0c;安隐天人&#xff0c;我等闻记&#xff0c;心安具足。” 一、引言 我们常常张嘴就来&#xff0c;我们在堆上申请内存使用malloc() 或者new操作符&#xff0c;但是反过来说&#xff0c;使用new操作符&#xff0c;就一定是在堆…

###C语言程序设计-----C语言学习(7)#(调试篇)

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 一. 程序调试 1.程序调试介绍&#xff1a; 程序调试是软件开发过程中非常重…

海外云手机对于亚马逊卖家的作用

近年来&#xff0c;海外云手机作为一种新型模式迅速崭露头角&#xff0c;成为专业的出海SaaS平台软件。海外云手机在云端运行和存储数据&#xff0c;通过网页端操作&#xff0c;将手机芯片放置在机房&#xff0c;通过网络连接到服务器&#xff0c;为用户提供便捷的上网功能。因…

电气自动化行业,全面数字化工作流程

电气自动化行业数字化转型所需流程软件&#xff0c;与大家分享如下&#xff1a; D-Hub企业数字化协同平台、SuperHarness数字线束软件、SuperPanel母排设计软件、D-Hub生产管理系统&#xff0c;全面的数字化工作流程&#xff0c;智能降本增效&#xff01; D-Hub D-Hub是一款…

Hive(15)中使用sum() over()实现累积求和和滑动求和

目的&#xff1a; 三个常用的排序函数row_number(),rank()和dense_rank()。这三个函数需要配合开窗函数over()来实现排序功能。但over()的用法远不止于此&#xff0c;本文咱们来介绍如何实现累计求和和滑动求和。 1、数据介绍 三列数据&#xff0c;分别是员工的姓名、月份和…

Python+uiautomator2 框架搭建

一、安装整体步骤 01 开发环境安装 jdk安装&#xff08;version "1.8.0_361"&#xff09;python安装 &#xff08;Python37&#xff09;python编辑器安装 &#xff08;PyCharm2021&#xff09; 02 运行环境安装 adb安装 &#xff08;Android Debug Bridge versio…

处理Servlet生命周期事件

处理Servlet生命周期事件 接收关于 Servlet生命周期事件通知的类称为事件侦听器。这些侦听器实现Servlet API中定义的一个或多个servlet事件侦听器接口。侦听器类的逻辑分类如下: servlet请求侦听器Servlet上下文侦听器HTTP会话侦听器1. servlet请求侦听器 servlet请求侦听器…

vivado 硬块规划器

硬块规划器 Versal自适应SoC的硬块规划GT组件从通用/通道更新为AMD的GT_QUAD粒度Versal™ 自适应SoC。为了启用某些GT共享用例&#xff0c;对GT向导流进行了修改使用Vivado IP集成商。使用Vivado IP集成商构建使用单个或多个GT_ QUAD。连接到GT_QUAD的自定义IP的设计条目为通过…

如何一键导出多张图片二维码?图片批量建码生成的方法

现在很多的物品信息都会生成一张单独的图片&#xff0c;然后生成二维码印刷到包装或者其他地方上使用&#xff0c;那么如何快速将多张图片多批量生码处理&#xff0c;相信有很多的小伙伴都不太清楚该怎么完成。其实&#xff0c;大量图片生成二维码的方法是很简单的&#xff0c;…

shell脚本-函数及数组

一.函数 1.函数的作用 语句块定义成函数约等于别名&#xff0c;定义函数&#xff0c;再引用函数 封装的可重复利用的具有特定功能的代码 2.函数的基本格式 法一&#xff1a; [function] 函数名 {命令序列[return x] #使用return或者exit可以显式的结束函数 }法二&…

最新计算机软件毕业设计选题大全

最新计算机软件毕业设计选题大全 1、毕业设计选题 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云开发社区乘风者计划专家博主&#xff0c;CSDN平台Java领域优质创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目&#xff1a;小…

【Spring源码分析】循环依赖的底层源码剖析

循环依赖的底层源码剖析 一、预知知识二、循环依赖的底层源码剖析1. Spring 是如何存储半成品Bean的&#xff1f;getEarlyBeanReference 方法的源码分析 2. Spring 是如何解决的循环依赖呢&#xff1f;测试 3. 哪些循环依赖 Spring 是无法解决的呢&#xff1f;Async 引起的循环…