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

算法相关概念

1 算法概述

1.1 算法概念

算法是特定问题求解步骤的描述,也是独立存在的一种解决问题的思想和方法

对于算法而言,实现他的编程语言无关紧要,重要的是思想和方法!!!

公式:程序=算法+数据结构(由wirth提出)

1.2 算法和数据结构的关系

数据结构是静态描述了数据元素直接的关系,一个高效的程序需要选择一个合适的数据结构和一个高效的算法。

算法是为了解决实际问题提出的思想和方法。数据结构是算法需要处理问题的载体。而算法是解决实际问题的灵魂。两者之间是相辅相成的,缺一不可。

1.3 算法效率的度量

一般算法的效率是通过时间复杂度和空间复杂度来度量的,对于现在越来越便宜而且容量越来越大的内存空间来说,我们更关注时间复杂度。当然,在某些特殊场景下,比如在单片机上运行算法时,就有可能‘要考虑空间复杂度。

同一种问题有两种算法A和B来解决,其中A算法的时间复杂度为O(n2),而空间复杂度为O(1),而B算法的时间复杂度为o(n),空间复杂度也为o(n)。如果我们更关注时间上的效率,就要选择B算法,如果在某种情况下空间上的效率更加重要,这时候就要选择算法A。

1.3.1 事后统计法

这种方法可行,但是有两个缺陷

1.要想对算法的性能进行评测,首先要依据该算法选择某种合适的计算机编程语言编制相应的程序:

2.所统计的结果依赖于该算法运行的计算机硬件、软件等环境因素,这些环境因素往往容易掩盖算法本身的优势。

1.3.2 事前分析估算

依据算法本身的策略对算法进行评估,不受外界环境因素影响,算法的评测结果只和算法本身有关。

1.3.3 求解时间复杂度的具体步骤

找出算法中的基本语句(算法中执行次数最多的那条语句就是基本语句),通常是最内存循环的循环体;

计算基本语句的执行次数的数量级,只需要计算基本语句执行次数的数量级,意味着只要保证基本语句执行次数函数中的最高次幂正确即可,可以忽略所有低次幂和系数,这样的话,我们只需要关注最重要的一点:增长率;

用大O记号表示算法的时间性能,将基本语句执行次数的数量级放入大O记号中。

1.3.4 常见的大O表示法相关术语

基本语句执行次数函数非正式术语
18O(1)常数阶
2N+3O(n)线性阶
5n2+7n+8O(n2)平方阶
8logn+19O(logn)对数阶
nlogn+3n+20O(nlogn)nlogn阶
6n3+8n2+9n+100O(n3)立方阶
2n+7n2+9nO(2n2)指数阶

1.3.5 分析下列代码段的时间复杂度

//交换
temp=i;
i=j;
j=temp;

上述代码的时间复杂度为O(1)常数阶。

当一个程序段执行的时间是一个和问题规模n无关的常数时,即算法的执行时间不随着问题的规模n增加而增长,即使算法中有成千山万条语句,其执行时间也不过是一个比较大的常数而已。这类算法的时间复杂度都记为O(1)。

for(i=0;i<n;i++)
{cout<<i;//基本语句,执行n次,时间复杂度为O(n)
}

上述代码的时间复杂度为O(n)。

sum=0;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++){sum++;//基本语句,执行次数的函数是n^2.}
}

上述代码的时间复杂度为O(n2)。

count=1;
while(count<=n)
{count=count*2;
}

上述代码的时间复杂度为O(longn)。

1.3.6 算法的空间复杂度

算法的空间复杂度是对一个算法在运行过程中临时占用存储空间的大小的度量。

一个算法在计算机存储器上所占用的存储空间包括三个部分,包括算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间,算法在运行过程中临时占用的存储空间。

算法本身所占用的存储空间和算法书写的长度成正比,要压缩这方面的空间,就要编写出较短的程序。

算法的输入输出数据所占用的存储空间和要解决的实际问题决定的,它不随着算法的不同而改变。算法在运行过程中临时占用的存储空间大小随着算法的不同而异,有点算法只需要占用少量的临时存储空间,而且不随着问题规模的大小而改变,有点算法占用的临时存储空间和要解决问题的规模有关,它随着n的增大而增大,当n比较大的时候,将占用较多的零食存储空间。

相关文章:

算法相关概念

1 算法概述 1.1 算法概念 算法是特定问题求解步骤的描述&#xff0c;也是独立存在的一种解决问题的思想和方法 对于算法而言&#xff0c;实现他的编程语言无关紧要&#xff0c;重要的是思想和方法&#xff01;&#xff01;&#xff01; 公式&#xff1a;程序算法数据结构&a…...

《Astro 3.0岛屿架构让内容网站“脱胎换骨”》

内容优先的网站越来越成为主流。无论是新闻资讯、知识博客&#xff0c;还是电商产品展示&#xff0c;用户都希望能快速获取所需内容&#xff0c;这对网站的性能和体验提出了极高要求。而Astro 3.0的岛屿架构&#xff0c;就像是为内容优先网站量身定制的一把神奇钥匙&#xff0c…...

Vue3 + Element-Plus + 阿里云文件上传

Element-Plus 阿里云文件上传 1、选择文件夹方法2、Chrome 浏览器查看 input typefile 元素上传的文件方法3、上传文件4、FormDataFormData 是什么创建 FormDataFormData 常用方法FormData 的实际应用性能与注意事项总结 1、选择文件夹方法 input typefile 元素想要上传文件夹…...

【Linux】第十一章 管理网络

目录 1.TCP/IP网络模型 物理层&#xff08;Physical&#xff09; 数据链路层&#xff08;Date Link&#xff09; 网络层&#xff08;Internet&#xff09; 传输层&#xff08;Transport&#xff09; 应用层&#xff08;Application&#xff09; 2. 对于 IPv4 地址&#…...

用vite动态导入vue的路由配置

在Vue应用中&#xff0c;通过路由可以实现不同页面之间的切换&#xff0c;同时也可以实现页面之间的传参和控制页面的显示与隐藏。但是我们在开发的过程中&#xff0c;会发现在路由配置中的路由配置和我们的项目结构高度重复&#xff0c;在我们修改页面文件结构时非常的麻烦与复…...

sources.list.d目录

sources.list可能大家很熟悉&#xff0c;是配置镜像链接的地方。 sources.list.d其实就是一个目录&#xff0c;在linux系统中.d后缀一般定义为一个目录&#xff0c;且很喜欢用这种方式。 这种方式有一个好处&#xff0c;就是修改不会影响到sources.list文件&#xff0c; 在这里…...

【C语言】文件操作

目录 一为什么使用文件 二什么是文件 程序文件 数据文件 文件名 二进制文件和文本文件&#xff1f; 三文件的打开与关闭 流的概念 标准流 文件指针 指针的声明 指针的初始化 四文件的打开与关闭 打开 fopen()函数 五总结&#xff1a; 前言&#xff1a; …...

静态库与动态库简介

静态库与动态库简介 基本概念 静态库 静态库是在编译链接阶段被直接整合到可执行文件中的代码集合。链接器会从静态库中提取程序所需的所有对象&#xff0c;并将它们复制到最终的可执行文件中。 特点&#xff1a; 可执行文件包含了所有代码&#xff0c;运行时无需外部依赖…...

02《小地图实时》Unity

创建一个新的项目 创建一个球体 作为主角 重命名为Player 在主角上创建空的子物体 重命名为MiniMapIcon 增加一个精灵图片 并设置为绿色 增加一个层&#xff08;目的是在小地图中看的到 而在场景中看不到这个绿色Icon&#xff09; 命名为MiniMap 在主摄像机中设置剔除遮罩Culli…...

【Redis】基础4:作为分布式锁

文章目录 1. 一些概念2. MySQL方案2.1 方案一&#xff1a;事务特性2.1.1 存在的问题2.1.2 解决方案 2.2 方案二&#xff1a;乐观锁2.3 方案三&#xff1a;悲观锁 3. Redis3.1 实现原理3.2 实现细节3.2.1 问题1&#xff1a;持有期间锁过期问题3.2.2 问题2&#xff1a;判断和释放…...

迭代器与生成器

目录 Iterator 的作用 Iterator 的遍历过程 Symbol.iterator方法 实现iterator接口的自定义类示例 Generator函数 迭代器对象的next方法的运行逻辑 迭代器对象除了具有next方法&#xff0c;还可以具有return方法。 Iterator 的作用 为各种数据结构&#xff0c;提供一个统…...

Python 实现的运筹优化系统数学建模详解(动态规划模型)

相关代码链接&#xff1a;https://download.csdn.net/download/heikediguoshinib/90713747?spm1001.2014.3001.5503 一、引言 在计算机科学与数学建模的广阔领域中&#xff0c;算法如同精密的齿轮&#xff0c;推动着问题的解决与系统的运行。当面对复杂的优化问题时&…...

miniconda在ARM64位芯片上面的安装

文章目录 前言一、特点二、适用场景三、下载安装及使用1.下载脚本文件2.安装命令3.常见用法 总结 前言 Miniconda 是一个轻量级的 Python 发行版&#xff0c;它是 Anaconda 的一个简化版本。Anaconda 是一个广泛使用的数据科学平台&#xff0c;包含了众多的 Python 包和工具&a…...

vue跨域问题总结笔记

目录 一、Websocket跨域问题 1.nginx配置 2.VUE CLI代理 3.env.development配置 4.nginx日志 5.解决 一、解决跨域的几种常用方法 1.Vue CLI代理 2.JSONP 3.WebSocket 4.NGINX解决跨域问题 6.Java解决跨域 二、Vue跨域问题详解 1. 什么是跨域 2. 跨域的例子 3.…...

自动驾驶领域专业词汇(专业术语)整理

以下是分类整理的自动驾驶领域专业词汇表&#xff0c;涵盖 AI、芯片、传感器、自动驾驶核心、辅助驾驶、安全、通信、车灯、泊车、测试标准 等类别&#xff1a; AI相关 缩写英文全称中文解释AIArtificial Intelligence人工智能&#xff0c;模拟人类智能的技术体系NNNeural Ne…...

说一下react更新的流程

beginWork 使用v-dom和current fiber去生成子节点的workInProgress Fiber 期间会执行函数组件、类组件、diff子节点 给我需要变更的节点&#xff0c;打赏effectTag 增placement 2 0010 删deletion 8 1000 改 update 4 0100 增和改 placementAndUpdate…...

C 语言函数指针与指针函数详解

一、引言 在 C 语言的编程世界中&#xff0c;函数指针和指针函数是两个既强大又容易混淆的概念。它们为 C 语言带来了更高的灵活性和可扩展性&#xff0c;广泛应用于回调函数、动态链接库、状态机等多种场景。深入理解和掌握函数指针与指针函数&#xff0c;对于提升 C 语言编程…...

政策支持与市场驱动:充电桩可持续发展的双轮引擎

随着全球能源转型加速&#xff0c;新能源汽车成为实现低碳交通的重要方向。然而&#xff0c;充电基础设施不足仍是制约其普及的关键瓶颈。当前&#xff0c;国际主流的充电桩运营模式包括政府推动、电网企业推动及汽车厂商推动三种模式&#xff0c;但单一模式均存在显著局限性。…...

在 Ubuntu 22.04 x64 系统安装/卸载 1Panel 面板

一、 1Panel 是什么&#xff1f; 1Panel 是一款基于 Go 语言开发的现代化开源服务器管理面板&#xff08;类似宝塔面板&#xff09;&#xff0c;专注于容器化&#xff08;Docker&#xff09;和云原生环境管理&#xff0c;提供可视化界面简化服务器运维操作。 1. 1Panel主要功…...

dummy cli-tool ubuntu22.04使用

项目场景&#xff1a;dummy cli-tool ubuntu22.04使用 提示&#xff1a;这里简述项目相关背景&#xff1a;执行python3 run_shell.py时报错 例如&#xff1a;项目场景&#xff1a;示例:通过蓝牙芯片(HC-05)与手机 APP 通信&#xff0c;每隔 5s 传输一批传感器数据(不是很大) …...

厚铜板的镀前处理差异:工艺参数与成本影响

在现代电子设备中&#xff0c;厚铜电路板因其优异的导电性能和良好的热管理能力而备受青睐。生产过程中&#xff0c;对铜层进行电镀加厚是一个关键步骤&#xff0c;它涉及到一系列复杂的化学和物理过程。在进行电镀之前&#xff0c;必须对电路板进行适当的准备工作&#xff0c;…...

【C到Java的深度跃迁:从指针到对象,从过程到生态】第四模块·Java特性专精 —— 第十六章 多线程:从pthread到JMM的升维

一、并发编程的范式革命 1.1 C多线程的刀耕火种 C语言通过POSIX线程&#xff08;pthread&#xff09;实现并发&#xff0c;需要开发者直面底层细节&#xff1a; 典型pthread实现&#xff1a; #include <pthread.h> int counter 0; pthread_mutex_t lock PTHREAD…...

数据库学习笔记(十三)---存储过程

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇存储过程&#xff0c;下一篇是存储函数;虽然MYSQL命令很多&#xff0c;但是自…...

JWT(JSON Web Token)源码分析

Java - JWT的简单介绍和使用 Java JWT&#xff1a;原理、机制及案例示范 什么是JWT&#xff1f; 1.1 JWT的基本概念 JWT&#xff08;JSON Web Token&#xff09;是一种用于在各方之间传递JSON格式信息的紧凑、URL安全的令牌&#xff08;Token&#xff09;。JWT的主要作用是验…...

Vue 3 中通过 createApp 创建的 app 实例的所有核心方法,包含完整示例、使用说明及对比表格

以下是 Vue 3 中通过 createApp 创建的 app 实例的所有核心方法&#xff0c;包含完整示例、使用说明及对比表格&#xff1a; 1. app.component() 作用&#xff1a;注册全局组件 参数&#xff1a; name&#xff1a;组件名称&#xff08;字符串&#xff09;component&#xff…...

Hadoop 单机模式(Standalone Mode)部署与 WordCount 测试

通过本次实验&#xff0c;成功搭建了 Hadoop 单机环境并运行了基础 MapReduce 程序&#xff0c;为后续分布式计算学习奠定了基础。 掌握 Hadoop 单机模式的安装与配置方法。 熟悉 Hadoop 环境变量的配置及 Java 依赖管理。 使用 Hadoop 自带的 WordCount 示例程序进行简单的 …...

线段树合并与分解

合并 #include <bits/stdc.h> using namespace std; #define asd(i,a,b) for(int ia;i<b;i) #define int long long const int inf 0x3f3f3f3f, N 1e5 5, Z 1e5; int n, m, fa[N], o[N][25], dep[N], tot, root[N], ans[N]; vector<int> g[N]; struct node…...

驱动开发硬核特训 │ 深度解析 fixed regulator 驱动与 regulator_ops

一、引言&#xff1a;本次目标 本篇聚焦于&#xff1a; Regulator 子系统基础概念设备树节点与驱动代码的对应关系regulator_desc、regulator_ops、regulator_dev 的完整讲解驱动端的实际注册与管理流程 通过一个实际案例&#xff0c;系统掌握 regulator 子系统 的全貌。 二…...

Linux中的shell脚本练习

1.判断字符串是否为空 #!/usr/bin/bash while : #:默认值为真 do read -p "请输入你的密码: " a pass123456 if [ -z $a ];thenecho "您输入的密码不能为空"exit 1 elseif [ $a $pass ];thenecho "登录成功"breakelseecho "您的密码输入有…...

MySQL基础篇 | 1-数据库概述与MySQL安装

【MySQL基础篇-1】数据库概述与MySQL安装 1. 数据库概述2. MySQL环境搭建2.1. MySQL的四大版本2.2. 软件下载1. 数据库概述 MySQL官网网站:https://dev.mysql.com/doc/relnotes/mysql/8.0/en/ SQL Server:SQL Server是微软开发的大型商业数据库。C#、.net等语言常使用,与wi…...

JVM 自动内存管理

一、运行时数据区域详解 Java 虚拟机在运行 Java 程序时&#xff0c;会将所管理的内存划分为多个不同的数据区域&#xff0c;各区域有着独特的用途、创建和销毁时间。 程序计数器&#xff1a;作为线程私有的较小内存空间&#xff0c;它是当前线程执行字节码的行号指示器。字节…...

InitializingBean接口和@PostConstruct-笔记

1. InitializingBean 简介 1.1 功能简介 InitializingBean 是 Spring 框架中的一个接口&#xff0c;用在 Bean 初始化后执行自定义逻辑。它提供了 afterPropertiesSet() 方法&#xff0c;该方法在以下时机被 Spring 容器自动调用&#xff1a; 属性注入完成后&#xff08;即所…...

考研408-计算机组成原理冲刺考点(1-3章)

第一章 计算机系统概述 1.计算机核心 早期的冯诺依曼计算机是以运算器为中心的,而现在的计算机是以存储器为中心的 2.五大部件 3.汇编程序、编译程序、解释程序的辨析...

模板方法模式(Template Method Pattern)

模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中的算法骨架,将一些步骤的实现延迟到子类中。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。 一、基础 1. 意图 定义一个操作中的算法骨架,将某些步骤延迟到…...

一文了解无人机系统

无人机系统&#xff0c;又称无人驾驶航空器系统&#xff08;Remotely Piloted Aircraft System&#xff0c;RPAS&#xff09;&#xff0c;作为一个由无人机平台、遥控站、指令与控制数据链及其他部件构成的完整技术体系&#xff0c;其系统架构包含多个核心分系统。具体而言&…...

系统架构师2025年论文《论软件的设计模式》

论软件的设计模式 摘要: 2016 年,我所在的公司承担了某市医院预约挂号系统的研发任务。我作为公司的技术总监,希望能打造基于该系统的系列产品,参与到项目的设计中,以期开发扩展性和可维护性良好的预约挂号系统,为以后的产品开发打下基础。网络靶场是网络安全技术研究的…...

集成电路流片随笔19:full_handshake

全双工握手接收模块 (full_handshake_rx)&#xff0c;它的功能是接收来自发送端 (tx) 的数据&#xff0c;并对发送端进行应答&#xff08;ACK&#xff09;。模块实现了基于握手的通信机制&#xff0c;以确保数据的可靠传输。模块的输入输出分别连接于发送端和接收端&#xff0c…...

Android Framework 探秘

以下文字来源AI&#xff0c;准确性不敢保证&#xff01; 安卓Framework层概述 安卓的 Framework&#xff08;框架层&#xff09; 是安卓系统的核心组成部分&#xff0c;位于应用层和系统底层&#xff08;如Linux内核&#xff09;之间&#xff0c;负责为应用提供统一的接口和功…...

亚马逊云科技2025战略解析:AI驱动下的全球生态重塑

一、战略转向&#xff1a;从“云优先”到“AI优先”的核心逻辑 1. 千亿美元资本投入AI基建 芯片自研突破&#xff1a;2025年资本支出70%投向AI芯片与液冷数据中心。自研芯片矩阵全面升级&#xff0c;包括3纳米工艺的Trainium3&#xff08;算力提升4倍&#xff09;、单核性能…...

NGINX ngx_http_addition_module 模块响应体前后注入内容

一、模块概述 模块名称&#xff1a;ngx_http_addition_module引入版本&#xff1a;自 0.7.9 起支持 addition_types&#xff0c;0.8.29 起支持“*”通配&#xff1b;功能&#xff1a;对符合 MIME 类型的响应&#xff0c;在响应体前后分别插入指定子请求 URI 返回的内容&#x…...

SpringMVC 使用thymeleaf 进行数据展示

thymeleaf 是前端的视图解析器&#xff0c;可以用于html页面上变量的渲染&#xff0c;如何来使用thymeleaf&#xff0c;下面我们来说一下&#xff1a; 首先引入相关的依赖&#xff1a; <dependency><groupId>org.thymeleaf</groupId><artifactId>thym…...

Github两种鉴权模式PAT与SSH

Github两种鉴权模式PAT与SSH 文章目录 Github两种鉴权模式PAT与SSH1. PAT鉴权2. SSH鉴权3.两种鉴权的切换 1. PAT鉴权 通过 HTTPS 协议克隆和推送代码&#xff0c;使用用户名/密码或个人访问令牌&#xff08;PAT&#xff09;鉴权&#xff0c;所以PAT是与HTTPS协议相关的。该鉴…...

XrayR启动失败

公司要用服务器之间进行数据加密&#xff0c;这里用的XrayR 我使用的Centos 7。 我这里使用一键脚本安装后&#xff0c;/etc/XrayR目录下没有配置文件。 解决方案 XrayR安装时&#xff0c;系统没有unzip工具&#xff0c;也是会安装失败的&#xff0c;因为Centos7已经停止维…...

FPGA-数字时钟

FPGA-数字时钟 总体设计 ​ 用FPGA驱动数码管按照HH-MM-SS的格式显示时间&#xff0c;每秒用串口向上位机发送当前时间&#xff0c;当串口收到HH:MM:SS&#xff0c;对时间进行校准。由于年月要考虑到大小月&#xff0c;闰年等。为了简单起见&#xff0c;只考虑时分秒。 数码管…...

数据结构 RBT 插入操作的 Python 代码实现

目录 一、红黑树的性质二、红黑树的插入1. 插入根节点或根节点变红2. 双亲节点 P 为黑色3. 双亲结点 P 和叔伯结点 U 均为红色4. 双亲结点 P 为红色&#xff0c;叔伯结点 U 为黑色或缺失1&#xff09;情形一2&#xff09;情形二 三、插入的 Python 代码实现 红黑树动画演示网站…...

颖儿生活提案:用海信璀璨505U6真空冰箱重建都市鲜食自由

热播剧《六姊妹》中&#xff0c;演员颖儿饰演的何家艺以泼辣坚韧的形象深入人心&#xff0c;一双手撑起家庭的"烟火气"&#xff1b;戏外&#xff0c;她平衡事业与家庭&#xff0c;以自律姿态书写鲜活人生。 近日&#xff0c;颖儿向公众展示家中厨房&#xff0c;意外…...

JQuery 使用技巧

文章目录 隐藏/显示淡入淡出滑动追加新元素删除元素/内容设置 CSS 样式尺寸遍历Ajax根据 input 控件中的值 实时改变另一个值 $()是jQuery()的简写getElementByTagName();如&#xff1a; $(“div”)getElementByTagName(“div”); $()的作用是用于查找出 HTML 的标签、属性、样…...

光流法:从传统方法到深度学习方法

1 光流法简介 光流&#xff08;Optical Flow&#xff09;是指图像中像素灰度值随时间的变化而产生的运动场。 简单来说&#xff0c;它描述了图像中每个像素点的运动速度和方向。 光流法是一种通过分析图像序列中像素灰度值来计算光流的方法。对于图像数据计算出来的光流是一个二…...

如何选择合适的RFID手持终端设备?

一、明确核心需求&#xff0c;锁定关键参数 选购RFID手持终端的首要任务是明确应用场景的核心需求。若用于仓储物流或零售盘点&#xff0c;推荐选择上海岳冉超高频RFID手持终端设备&#xff0c;支持1-20米远距离批量读取&#xff1b;若用于医疗耗材或图书管理&#xff0c;岳冉高…...

Axios 传参与 Spring Boot 接收参数完全指南

Axios 传参与 Spring Boot 接收参数完全指南 本文详细说明前端 Axios 传参与后端 Spring Boot 接收参数的各类场景&#xff0c;包括 GET/POST/PUT/DELETE 请求、路径参数/查询参数/请求体参数 的传递方式&#xff0c;以及如何接收 List、Map 等复杂类型。通过代码示例和对比表…...