数据结构与算法——2.算法概述
这篇文章,我们来讲一下算法的概述,大致理解一下什么是算法。
目录
1.定义
2.生活实例
3.算法目标
4.实际案例
4.1案例一
4.2案例二
5.小结
1.定义
官方解释:
算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的的输出。
大白话:
根据一定的条件,对一些数据进行计算,得到需要的结果。
2.生活实例

3.算法目标
在程序中,我们可以用不同的算法解决相同的问题,而不同的算法的成本也是不想同的。总体上,一个优秀的算法追求以下两个目标:
- 花最少的时间完成需求
- 占用最少的内存空间完成需求
4.实际案例
下面,我们体会并分析一些实际案例来领悟什么是算法。
4.1案例一
题目:计算1到100的和
方法一:
public static void main(String[] args) {int sum = 0;int n = 100;for (int i = 0; i < n; i++) {sum += i;}System.out.println("sum="+sum);}
方法二:
public static void main(String[] args) {int sum = 0;int n = 100;sum = (n+1)*n/2;System.out.println("sum="+sum);}
分析:
方法一需要完成以下几个动作:
- 定义两个整型变量;
- 执行100次算术运算(100次加法);
- 打印结果到控制台;
方法二需要完成以下几个动作:
- 定义两个整型变量;
- 执行3次算术运算(一次加法,一次乘法,一次除法);
- 打印结果到控制台;
很明显,方法二要比方法一好,因为方法一和二占用内存相同,但是方法二运算次数少,那么消耗的时间就少,那么它的性能就高,性能越高的算法就是越好的算法,就是算法所追求的。
4.2案例二
题目:计算10!
方法一:
public class Test {public static void main(String[] args) {long result = fun1(100);System.out.println(result);}public static long fun1(long n){if (n == 1) {return 1;}return n*fun1(n-1); };
}
方法二:
public class Test {public static void main(String[] args) {long result = fun2(100);System.out.println(result);}public static long fun2(long n){int result = 1;for (int i = 1; i <=n ; i++) {result *= i;}return result ;};
}
分析:
方法一,使用了递归的解法,fun1方法会被执行10次,并且第一次执行未完毕,调用第二次执行,第二次执行也未完毕,调用第三次执行,,,,最终,最多的时候,需要在栈内存中开辟10块内存分别执行10个fun1方法,并且只有在第10个方法执行完成后,前面的方法才会一次执行完成,然后回收空间。这很浪费时间和空间。
方法二,使用for循环完成,fun2方法只会执行一次,只需要在栈内存中开辟一块内存,并且只需要运算10次,总体来说,内存开辟的少,运行次数少,算法更优。
很明显,方法二比方法一占用内存少,运行时间短,所以更好。
通过这两个例子,我们就能粗略的体会一下算法的思想了。
5.小结
这篇文章讲了算法的定义,举了生活中的例子,也讲了并且分析了具体的实例。主要目的就是让大家体会一下算法的思想,不求懂,但求有一点领悟。其实最重要的还是对具体问题的分析与解决。
相关文章:
数据结构与算法——2.算法概述
这篇文章,我们来讲一下算法的概述,大致理解一下什么是算法。 目录 1.定义 2.生活实例 3.算法目标 4.实际案例 4.1案例一 4.2案例二 5.小结 1.定义 官方解释: 算法是指解题方案的准确而完整的描述,是一系列解决问题的清…...
BPMN2.0是什么,BPMN能解决企业流程管理中哪些问题?
一、前言: 在任何行业和企业中,一定存在着各式各样的流程,请假流程、报销流程、入职流程、离职流程、出差流程、合同审批流程、出入库流程等等…… 无论是管理者、技术人员还是业务人员,每天肯定也在使用各种流程,但…...
Java线程池的基本工作原理及案例
一、线程池的优点 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。 主要特点:线程复用;控制最大并发数;管理线程…...
Stacked hourglass networks for human pose estimation代码学习
Stacked hourglass networks for human pose estimation https://github.com/princeton-vl/pytorch_stacked_hourglass 这是一个用于人体姿态估计的模型,只能检测单个人 作者通过重复的bottom-up(高分辨率->低分辨率)和top-down࿰…...
SpringCloud(五)MQ消息队列
MQ概念常见消息模型helloworld案例实现实现spring AMQP发送消息实现spring AMQP接收消息工作消息队列实现发布订阅模型Fanout Exchange实现DirectExchange实现TopicExchange实现DirectExchange 和FanoutExchange的差异DirectExchange 和TopicExchange的差异基于RabbitListener注…...
SQL语法基础汇总
三年前的存稿 默认端口号 3306 超级用户名 root 登录 mysql -uroot -p / mysql -uroot -proot 退出 exit / quit 服务器版本 SELECT VERSION(); 当前日期 SELECT NOW(); 当前用户 SELECT USER(); 备份 mysqldump -uroot -p 数据库名称 > 保存的路径 还原 create database1-…...
惠普星14Pro电脑开机不了显示错误代码界面怎么办?
惠普星14Pro电脑开机不了显示错误代码界面怎么办?有用户电脑开机之后,进入了一个错误界面,里面有一些错误代码。重启电脑之后依然是无法进入到桌面中,那么这个情况怎么去进行解决呢?我们可以重装一个新系统,…...
顺序表的构造及功能
定义顺序表是一种随机存储都结构,其特点是表中的元素的逻辑顺序与物理顺序相同。假设线性表L存储起始位置为L(A),sizeof(ElemType)是每个数据元素所占的存储空间的大小,则线性表L所对应的顺序存储如下图。顺序表的优缺点优点:随机…...
cesium: 绘制线段(008)
第008个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中绘制线段,左键点击开始绘制,右键点击取消绘制 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共139行)相关API参考:专栏目标示例效果 配置方式 1)…...
HTML、CSS学习笔记4(3D转换、动画)
目录 一、空间转换(3D转换) 1.空间位移 语法: 取值:(正负均可) 透视: 2.空间旋转 3.立体呈现 二、动画(animation) 1.动画的使用 先定义动画 再调用定义好的动画 …...
java的分布式锁
什么是分布式锁 分布式锁是指分布式环境下,系统部署在多个机器中,实现多进程分布式互斥的一种锁。为了保证多个进程能看到锁,锁被存在公共存储(比如 Redis、Memcache、数据库等三方存储中),以实现多个进程并…...
17- TensorFlow实现手写数字识别 (tensorflow系列) (项目十七)
项目要点 模型创建: model Sequential()添加卷积层: model.add(Dense(32, activationrelu, input_dim100)) # 第一层需要 input_dim添加dropout: model.add(Dropout(0.2))添加第二次网络: model.add(Dense(512, activationrelu)) # 除了first, 其他层不要输入shape添加输出…...
Polkadot 基础
Polkadot Polkadot联合并保护了一个不断增长的专业区块链生态系统,称为parachains。Polkadot上的应用程序和服务可以安全地跨链通信,形成真正可互操作的去中心化网络的基础。 真正的互操作性 Polkadot支持跨区块链传输任何类型的数据或资产,…...
spring源码编译
spring源码编译1、安装gradle2、拉取源码3、配置gradle文件来源及镜像仓库4、预编译5、验证6、可能遇到的报错6.1、jdk.jfr不存在6.2、checkstyleMain6.3、org.gradle.api.artifacts.result.ComponentSelectionReason.getDescription()Ljava/lang/String6.4、其他jdk࿱…...
防盗链是什么?带你了解什么是防盗链
目录 什么是防盗链 防盗链的定义 防盗链的产生 防盗链的实现 什么是防盗链 防盗链其实就是采用服务器端编程,通过url过滤技术实现的防止盗链的软件。 比如:photo.abc.com/video.mp4 这个下载地址,如果没有装防盗链,别人就能轻…...
Linux基础命令-fdisk管理磁盘分区表
文章目录 fdisk 命令介绍 命令格式 基本参数 1)常用参数 2)fdisk菜单操作说明 创建一个磁盘分区 1)创建分区 2)创建交换分区 参考实例 1) 显示当前分区的信息 2) 显示每个磁盘的分区信息 命令…...
(四)K8S 安装 Nginx Ingress Controller
ingress-nginx 是 Kubernetes 的入口控制器,使用NGINX作为反向代理和负载均衡器 版本介绍 版本1:Ingress NGINX Controller(k8s社区的ingres-nginx) 以 NGINX 开源技术为基础(kubernetes.io),可在GitHub的 kubernet…...
高频面试题
MyISAM和InnoDB是MySQL两种常见的存储引擎,它们之间有以下几点区别: 事务支持:MyISAM不支持事务处理,而InnoDB支持事务处理。 行级锁:MyISAM只支持表级锁,而InnoDB支持行级锁,可以避免并发访问…...
js 字节数组操作,TCP协议组装
js字节数组,进制转换js基础知识数组 Array扩展操作符三个点(...)ArrayBufferslice() 数组复制reduce 对数组中的每个元素执行一个提供的函数,将其结果汇总为单个返回值splice 数组删除,添加,替换js 字节数组转数字以及…...
JavaScript的引入并执行-包含动态引入与静态引入
JavaScript的引入并执行-包含动态引入与静态引入 JavaScript引入方式 html文件需要引入JavaScript代码,才能在页面里使用JavaScript代码。 静态引入 行内式 直接在DOM标签上使用 <!DOCTYPE html> <html lang"en"> <head><meta ch…...
离散流匹配与MaskFlow框架:视频生成技术解析
1. 离散流匹配在视频生成中的技术演进 视频生成技术近年来取得了显著进展,但长视频生成仍然面临两大核心挑战:一是如何有效建模视频中复杂的时空动态关系,二是如何在有限的计算资源下实现高效生成。传统方法通常采用固定长度的训练序列&…...
通用大模型vs行业垂直AI Agent,制造业落地对比:2026年企业级智能体选型深度解析
进入2026年,人工智能在制造业的落地已从早期的“对话式交互”全面转向“任务式闭环”。通用大模型(Foundation Models)与行业垂直AI Agent(Vertical AI Agents)在工业场景中的角色分工日益明确。根据IDC最新发布的《20…...
2026年搜索引擎大变革:生成式优化服务如何引领未来趋势
随着AI技术的不断进步,搜索引擎领域正在经历一场前所未有的变革。2026年,我们见证了从传统SEO到生成式引擎优化(GEO)的重大转变。这场变革不仅改变了用户获取信息的方式,也为企业带来了全新的营销机遇。本文将深入探讨…...
别再让CPU风扇狂转了!手把手教你为Edge/Chrome解锁B站HEVC/AV1硬解,省电又流畅
别再让CPU风扇狂转了!解锁浏览器硬解B站视频的终极指南 每次打开B站看视频,笔记本风扇就开始"起飞"?明明只是看个1080P视频,CPU占用率却飙升到80%以上?这很可能是因为你的浏览器正在使用软件解码(…...
NovelForge:AI长篇小说创作引擎,结构化写作与知识图谱实战
1. 项目概述:一个为长篇创作而生的AI写作伙伴如果你和我一样,是一个对长篇故事创作充满热情,但又时常被海量设定、角色关系、情节推进和前后一致性搞得焦头烂额的作者,那么NovelForge的出现,可能正是我们一直在等待的“…...
如何在5分钟内免费掌握Windows风扇控制终极技巧
如何在5分钟内免费掌握Windows风扇控制终极技巧 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanControl.Relea…...
AI信息摘要系统:从RSS抓取到LLM摘要的自动化实现
1. 项目概述:AI驱动的每日信息摘要最近在GitHub上看到一个挺有意思的项目,叫“ai-daily-digest”。光看名字,你大概能猜到它想做什么:用人工智能来帮你整理每日信息。但具体怎么实现,能解决什么问题,背后又…...
模拟真人手写软件,支持随机调节
软件介绍 前阵子公司要求我们签一份保密承诺书,还特别强调必须手写。这下可把不少同事难住了,平时都用电脑打字,手写都快生疏了。于是有同事让我帮忙找找能把手写字做出来的软件。我一开始找了几款手写字体,但写出来的效果太规整…...
如何彻底移除Windows Defender?5步掌握完整安全组件卸载指南
如何彻底移除Windows Defender?5步掌握完整安全组件卸载指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirro…...
构建个人AI记忆体:向量数据库与语义搜索实践指南
1. 项目概述:构建你的个人AI记忆体最近几年,AI助手越来越聪明,但总感觉它们“记性”不太好。你昨天刚和它聊过你家的猫叫“橘子”,今天再问它,它可能就忘了。或者,你让它帮你总结上周的工作周报,…...
