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

news2025/4/8 10:43:29

注:观看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,n
   s=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+1
   for(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
请添加图片描述
任何形式的数据都可以通过寻找/合并形成二叉搜索树以此来看时间复杂度请添加图片描述

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

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

相关文章

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…

【Linux】虚拟机设置静态IP

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

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

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

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

电脑作为主机 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 …

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

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

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

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

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

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

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…

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;和实际场…

增益调度控制 —— 理论、案例与交互式 GUI 实现

目录 增益调度控制 —— 理论、案例与交互式 GUI 实现一、引言二、增益调度控制的基本原理三、数学模型与公式推导四、增益调度控制的优势与局限4.1 优势4.2 局限五、典型案例分析5.1 案例一:航空飞行控制中的增益调度5.2 案例二:发动机推力控制中的增益调度5.3 案例三:化工…

关于OEC/OEC-turbo刷机问题的一些解决方法(2)——可能是终极解决方法了

前面写了两篇关于OEC/OEC-turbo刷机问题的文章了&#xff0c;从刷机过程、刷机中遇到的问题&#xff0c;以及遇到最多但始终无法有效解决的下载boot失败的问题的剖析&#xff0c;最近确实也做了一些工作&#xff0c;虽然没有最终解决&#xff0c;但也算是这系列文章里面阶段性的…

瓦片数据合并方法

影像数据 假如有两份影像数据 1.全球底层影像0-5级别如下&#xff1a; 2.局部高清影像数据级别9-14如下&#xff1a; 合并方法 将9-14文件夹复制到全球底层0-5的目录下 如下&#xff1a; 然后合并xml文件 使得Tileset设置到最高级&#xff08;包含所有级别&#xff09;&…

第16届蓝桥杯单片机模拟试题Ⅰ

试题 代码 sys.h #ifndef __SYS_H__ #define __SYS_H__#include <STC15F2K60S2.H> //onewire.c float getT(); //sys.c extern unsigned char UI; extern bit touch_mode; extern float jiaozhun; extern float canshu; extern float temper; void init74hc138(unsigned…

mac 卸载流氓软件安全助手

之前个人电脑在公司使用过一段时间&#xff0c;为了使用网线联网安装了公司指定的 联软上网助手&#xff0c;谁知安装容易卸载难&#xff0c;后来找运维来卸载&#xff0c;输入管理员密码后&#xff0c;也无反应&#xff0c;最后不了了之了&#xff0c;这个毒瘤软件长期在后台驻…