当前位置: 首页 > article >正文

算法初识-时间复杂度空间复杂度

注:观看Adbul Bari算法视频

算法概念

 算法:先验分析,不依托于硬件,无语言限制,逻辑。
 程序:后验测试,依托硬件,语言限制,实现。

特点:

  • 输入-0或多个
  • 输出-至少一个
  • 确定性-人能理解
  • 有限性-有限集,时间集,必须有停止的时候
  • 有效性-没必要的语句不要写

准则:

  1. 时间:要高效-时间函数    f(n)=n  每行语句占一个单位时间
  2. 空间:占用内存                s(n)=n  每个参数占一个字
  3. 数据传输,宽带消耗(有必要传输很多数据吗,有优化空间吗)
  4. 设备消耗的功率
  5. CPU寄存器的消耗

频率计数法

1.一维数组之和
f(n) = 2n+3    s(n) = n+3     时间和空间复杂度都是O(n)

s=0                  ---1
for(i=0;i<n;i++){    --- 1,n+1,ns=s+A[i];         --- n
}
return s;            --- 1
s,i,n,A[i]           --- 1,1,1,n

2.二维数组之和
f(n) = 2n2+2n+1    s(n) = 3n2+3    时间和空间都是O(n2)

for(i=0;i<n;i++){               ---n+1for(j=0;j<n;j++){            ---nx(n+1)C[i,j] = A[i,j]+B[i,j];   ---nxn}
}
C,B,A,i,j,n                     ---nxn,nxn,nxn,1,1,1

3.二维矩阵之积
f(n) = 2n3+2n2+2n+1    s(n) = 3n2+4     时间复杂度O(n3),空间复杂度O(n2)

for(i=0;i<n;i++){for(j=0;j<n;j++){for(k=0;k<n;k++){C[i,j] = C[i,j] + A[i,k]*B[k,j];}}
}

4.总结规律:只关心循环里面的语句执行多少次,只关心最高次方!(因为是加法,并不会叠加次方,所以只关心循环里面就可以。换句话说只关心最高次方的那一条语句就可以)
请添加图片描述
请添加图片描述

时间函数的追踪分析法(举例)

for循环为例

例1:
请添加图片描述
例2:请添加图片描述
例3:
请添加图片描述
请添加图片描述
例4:请添加图片描述
例5:请添加图片描述
例6:请添加图片描述
总结:i自增或自减的情况都是O(n);i是乘法或者除法自增或自减的情况都是O(logn);其余情况用追踪分析法。

while循环为例

while循环一定要分析,规律性较小
请添加图片描述
请添加图片描述

渐进符号

定义

三种渐进符号随便用哪个都可以,但是在用O和omega时,尽量使用接近theta否则没有意义!
请添加图片描述

函数比较方法

1.可以直接带入数值,来直观的看出谁大谁小(用很大数值代入会更直观)
2.可以用log比较法
请添加图片描述
请添加图片描述
请添加图片描述

应用

请添加图片描述

函数的best/worst/avg情况

这种最好最坏情况无论使用哪种渐进符号都可以,函数的好坏情况不取决于渐进符号,渐进符号只是个表示方式而已。
一般平均情况接近于最坏情况。
请添加图片描述
二叉搜索树特点:左边的元素小于右边的元素。普通二叉树就是无序的。
其中关于w(n)=树高,minW(n) = logn,maxW(n)=n
请添加图片描述
任何形式的数据都可以通过寻找/合并形成二叉搜索树以此来看时间复杂度请添加图片描述

相关文章:

算法初识-时间复杂度空间复杂度

注&#xff1a;观看Adbul Bari算法视频 算法概念 算法&#xff1a;先验分析&#xff0c;不依托于硬件&#xff0c;无语言限制&#xff0c;逻辑。 程序&#xff1a;后验测试&#xff0c;依托硬件&#xff0c;语言限制&#xff0c;实现。 特点&#xff1a; 输入-0或多个输出-至…...

Python高阶函数-sorted(深度解析从原理到实战)

一、sorted()函数概述 sorted()是Python内置的高阶函数&#xff0c;用于对可迭代对象进行排序操作。与列表的sort()方法不同&#xff0c;sorted()会返回一个新的已排序列表&#xff0c;而不改变原数据。 基本语法 sorted(iterable, *, keyNone, reverseFalse)二、核心参数详…...

Vue3实战三、Axios封装结合mock数据、Vite跨域及环境变量配置

目录 Axios封装、调用mock接口、Vite跨域及环境变量配置封装Axios对象调用mock接口数据第一步、安装axios&#xff0c;处理一部请求第二步、创建request.ts文件第三步、本地模拟mock数据接口第四步、测试axiosmock接口是否可以调用第五步、自行扩展 axios 返回的数据类型 axios…...

机器学习(神经网络基础篇)——个人理解篇5(梯度下降中遇到的问题)

在神经网络训练中&#xff0c;计算参数的梯度是关键步骤。numerical_gradient 方法旨在通过数值微分&#xff08;中心差分法&#xff09;计算损失函数对网络参数的梯度。然而&#xff0c;该方法的实现存在一个关键问题&#xff0c;导致梯度计算错误。 1、错误代码示例&#xf…...

sklearn的Pipeline

Pipeline类 介绍:Pipeline 可以将多个数据处理步骤和机器学习模型组合成一个序列,其中每个步骤都是一个变换器(Transformer)或者估计器(Estimator),并且Pipeline中的最后一个必须为估计器,其它的必须为变换器,如果Pipeline中的估计器为为分类器则整个Pipeline就作为分…...

【Linux】虚拟机设置静态IP

主播我今天下午学了几节微服务课&#xff0c;上课的时候&#xff0c;直接把手机拿走了去上课&#xff08;电脑连的我手机的热点&#xff09;&#xff0c;虚拟机没关&#xff0c;晚上主播我回来继续学&#xff0c;电脑连上热点之后&#xff0c;发现虚拟机连接不上了&#xff0c;…...

职坐标解析自动驾驶技术发展新趋势

内容概要 作为智能交通革命的核心驱动力&#xff0c;自动驾驶技术正以惊人的速度重塑出行生态。2023年&#xff0c;行业在多传感器融合与AI算法优化两大领域实现突破性进展&#xff1a;激光雷达、摄像头与毫米波雷达的协同精度提升至厘米级&#xff0c;而深度学习模型的实时决…...

js算法基础-01

文章目录 1、双指针2、快慢指针3、滑动指针4、哈希表5、汇总区间6、栈7、进制求和8、数学9、动态规划 js算法基础, 每个重要逻辑思路&#xff0c;做一下列举 1、双指针 有序数组合并&#xff1a;一般思路就是合并、排序&#xff0c;当然效率略低题目1&#xff1a;nums1中取前m个…...

了解 DeepSeek R1

了解DeepSeek R1 R1探索纯强化学习是否可以在没有监督微调的情况下学会推理的能力。 ‘Aha’ Moment 这种现象有点类似于人类在解决问题时突然意识到的方式&#xff0c;以下是它的工作原理&#xff1a; 初始尝试&#xff1a;模型对解决问题进行初始尝试识别&#xff1a;识别…...

局域网:电脑或移动设备作为主机实现局域网访问

电脑作为主机 1. 启用电脑的网络发现、SMB功能 2. 将访问设备开启WIFI或热点&#xff0c;用此电脑连接&#xff1b;或多台设备连接到同一WIFI 3. 此电脑打开命令行窗口&#xff0c;查看电脑本地的IP地址 Win系统&#xff1a;输入"ipconfig"&#xff0c;回车后如图 4.…...

小型园区组网图

1. 在小型园区中&#xff0c;S5735-L-V2通常部署在网络的接入层&#xff0c;S8700-4通常部署在网络的核心&#xff0c;出口路由器一般选用AR系列路由器。 2. 接入交换机与核心交换机通过Eth-Trunk组网保证可靠性。 3. 每个部门业务划分到一个VLAN中&#xff0c;部门间的业务在C…...

数据分享:汽车测评数据

说明&#xff1a;如需数据可以直接到文章最后关注获取。 1.数据背景 Car Evaluation汽车测评数据集是一个经典的机器学习数据集&#xff0c;最初由 Marko Bohanec 和 Blaz Zupan 创建&#xff0c;并在 1997 年发表于论文 "Classifier learning from examples: Common …...

python小整数池和字符串贮存

在Python中&#xff0c;**小整数池**是一种优化机制&#xff0c;用于减少内存使用和加速小整数的创建。 ### 小整数池的工作原理 - **范围**&#xff1a;Python会预先创建并缓存-5到256之间的整数对象。这些对象在解释器启动时就已经创建&#xff0c;并且会一直驻留在内存中。…...

批量将 txt/html/json/xml/csv 等文本拆分成多个文件

我们的文本文件太大的时候&#xff0c;我们通常需要对文本文件进行拆分&#xff0c;比如按多少行一个文件将一个大的文本文件拆分成多个小的文本文件。这样我们在打开或者传输的时候都比较方便。今天就给大家介绍一种同时对多个文本文件进行批量拆分的方法&#xff0c;可以快速…...

Vue3 路由权限管理:基于角色的路由生成与访问控制

Vue3 路由权限管理&#xff1a;基于角色的路由生成与访问控制 一、核心概念 1.1 大致流程思路&#xff1a; 用户在登录完成的时候&#xff0c;后端给出一个此登录用户对应的角色名字&#xff0c;此时可以将这个用户的角色存起来(vuex/pinia)中&#xff0c;在设置路由时的met…...

LLM Agents的历史、现状与未来趋势

引言 大型语言模型&#xff08;Large Language Model, LLM&#xff09;近年在人工智能领域掀起革命&#xff0c;它们具备了出色的语言理解与生成能力。然而&#xff0c;单纯的LLM更像是被动的“回答者”&#xff0c;只能根据输入给出回复。为了让LLM真正“行动”起来&#xff…...

忘记mysql的root用户密码(已解决)

1、打开数据库可视化界面&#xff08;比如MySQL workbench&#xff09; 2、执行select host,user,authentication_string from mysql.user; 3、把‘authentication_string’下面的字段 复制到MD5在线解密网页中&#xff08;比如md5在线解密&#xff09;...

【Pandas】pandas DataFrame set_flags

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于获取 DataFrame 的行索引DataFrame.columns用于获取 DataFrame 的列标签DataFrame.dtypes用于获取 DataFrame 中每一列的数据类型DataFrame.info([verbose, buf, max_cols, …])用于提供 Dat…...

Vue3.2 项目打包成 Electron 桌面应用

本文将详细介绍如何将基于 Vue3.2 的项目打包成 Electron 桌面应用。通过结合 Electron 和 Vue CLI 工具链&#xff0c;可以轻松实现跨平台桌面应用的开发与发布。 1. 项目结构说明 项目主要分为以下几个部分&#xff1a; electron/main.js&#xff1a;Electron 主进程文件。…...

git stash pop 后反悔操作

当使用 git stash pop 应用并删除某个存储&#xff08;stash&#xff09;后&#xff0c;如果想撤销该操作&#xff08;即恢复工作目录到 pop 前的状态&#xff0c;并重新将存储放回存储栈&#xff09;&#xff0c;可以按以下步骤操作&#xff1a; 1 强制丢弃所有未提交的更改&…...

Spring Boot 集成 MongoDB 时自动创建的核心 Bean 的详细说明及表格总结

以下是 Spring Boot 集成 MongoDB 时自动创建的核心 Bean 的详细说明及表格总结&#xff1a; 核心 Bean 列表及详细说明 1. MongoClient 类型&#xff1a;com.mongodb.client.MongoClient作用&#xff1a; MongoDB 客户端核心接口&#xff0c;负责与 MongoDB 服务器建立连接、…...

TypeScript面试题集合【初级、中级、高级】

初级面试题 什么是TypeScript&#xff1f; TypeScript是JavaScript的超集&#xff0c;由Microsoft开发&#xff0c;它添加了可选的静态类型和基于类的面向对象编程。TypeScript旨在解决JavaScript的某些局限性&#xff0c;比如缺乏静态类型和基于类的面向对象编程&#xff0c…...

ubuntu 20.04 编译和运行SC-LeGo-LOAM

1.搭建文件目录和clone代码 mkdir -p SC-LeGo-LOAM/src cd SC-LeGo-LOAM/src git clone https://github.com/AbangLZU/SC-LeGO-LOAM.git cd .. 2.修改代码 需要注意的是原作者使用的是Ouster OS-64雷达&#xff0c;需要更改utility.h文件中适配自己的雷达类型&#xff0c;而…...

CentOS 7安装hyperscan

0x00 前言 HyperScan是一款由Intel开发的高性能正则表达式匹配库&#xff0c;专为需要快速处理大量数据流的应用场景而设计。它支持多平台运行&#xff0c;包括Linux、Windows和macOS等操作系统&#xff0c;并针对x86架构进行了优化&#xff0c;以提供卓越的性能表现。HyperSc…...

Quartz MisFire补偿机制 任务补偿 任务延迟 错过触发策略

介绍 在 Quartz 中&#xff0c;MisFire&#xff08;错过触发&#xff09;是指触发器错过了预定的触发时间&#xff0c;通常是由于系统延迟、任务执行时间过长或者调度器本身未能及时执行任务等原因。这种情况可能会导致任务无法按预期的时间执行。为了应对这些问题&#xff0c…...

AI训练存储架构革命:存储选型白皮书与万卡集群实战解析

一、引言 在人工智能技术持续高速发展的当下&#xff0c;AI 训练任务对存储系统的依赖愈发关键&#xff0c;而存储系统的选型也变得更为复杂。不同的 AI 训练场景&#xff0c;如机器学习与大模型训练&#xff0c;在模型特性、GPU 使用数量以及数据量带宽等方面的差异&#xff…...

谢志辉和他的《韵之队诗集》:探寻生活与梦想交织的诗意世界

大家好&#xff0c;我是谢志辉&#xff0c;一个扎根在文字世界&#xff0c;默默耕耘的写作者。写作于我而言&#xff0c;早已不是简单的爱好&#xff0c;而是生命中不可或缺的一部分。无数个寂静的夜晚&#xff0c;当世界陷入沉睡&#xff0c;我独自坐在书桌前&#xff0c;伴着…...

UE5 Simulation Stage

首先将Grid2D创建出来&#xff0c;然后设置值&#xff0c;Grid2D类似于在Niagara系统中的RenderTarget2D&#xff0c;可以进行绘制&#xff0c;那么设置大小为512 * 512 开启Niagara粒子中的Simulation Stage 然后开始编写我们的自定义模块 模块很简单&#xff0c;TS就是Textur…...

Swift 解 LeetCode 250:搞懂同值子树,用递归写出权限系统检查器

文章目录 前言问题描述简单说&#xff1a;痛点分析&#xff1a;到底难在哪&#xff1f;1. 子树的概念搞不清楚2. 要不要“递归”&#xff1f;递归从哪开始&#xff1f;3. 怎么“边遍历边判断”&#xff1f;这套路不熟 后序遍历 全局计数器遍历过程解释一下&#xff1a;和实际场…...

怎样使用Python编写的Telegram聊天机器人

怎样使用Python编写的Telegram聊天机器人 代码直接运行可用 以下是对这段代码的详细解释: 1. 导入必要的库 import loggingfrom telegram import Update from telegram.ext import ApplicationBuilder, ContextTypes, CommandHandler, filters, MessageHandler import log…...