数据结构与算法——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…...
Llama-3.2V-11B-cot部署详解:自动修复视觉权重加载致命Bug全过程
Llama-3.2V-11B-cot部署详解:自动修复视觉权重加载致命Bug全过程 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具,专为双卡RTX 4090环境深度优化。本工具通过自动修复视觉权重加载等核心Bug&#…...
机械键盘连击修复:这款智能工具如何拯救你的打字体验
机械键盘连击修复:这款智能工具如何拯救你的打字体验 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 当你在编写重要文档时&…...
Twisted Protocols终极指南:快速构建高性能网络协议的简单方法
Twisted Protocols终极指南:快速构建高性能网络协议的简单方法 【免费下载链接】twisted Event-driven networking engine written in Python. 项目地址: https://gitcode.com/gh_mirrors/tw/twisted Twisted是一个用Python编写的事件驱动网络引擎࿰…...
OpenClaw v2026.3.24-beta.1 深度技术分析报告:体验、生态与协作的“精装修”
报告版本: 1.1分析基准: v2026.3.23 (稳定化修复版本) -> v2026.3.24-beta.1 (预发布版)核心论点: 在经历了v2026.3.22的“架构大换血”与v2026.3.23的“系统性修复”之后,v2026.3.24-beta.1标志着OpenClaw的迭代节奏进入了一个…...
保姆级教程:Arduino IDE离线安装ESP32开发板支持包(附稳定镜像源)
Arduino IDE离线安装ESP32开发板支持包全攻略 对于国内开发者来说,Arduino IDE安装ESP32开发板支持包常常会遇到网络连接不稳定、下载速度慢甚至完全无法访问的问题。本文将提供一套完整的离线安装方案,通过国内镜像源和分步操作指南,确保即…...
脑电分析避坑指南:为什么你的PLV锁相值总等于1?希尔伯特变换与窄带滤波详解
脑电分析避坑指南:为什么你的PLV锁相值总等于1?希尔伯特变换与窄带滤波详解 在脑电信号分析领域,相位锁定值(Phase Locking Value, PLV)是衡量不同脑区神经振荡同步性的重要指标。但许多研究者在实际计算中常遇到一个令…...
像素时装锻造坊企业落地:游戏公司美术部门像素资产标准化生产流程再造
像素时装锻造坊企业落地:游戏公司美术部门像素资产标准化生产流程再造 1. 项目背景与价值 在游戏美术制作领域,像素艺术资产的生产一直面临效率瓶颈。传统手工绘制方式需要美术师逐帧绘制,耗时耗力且难以保持风格统一。像素时装锻造坊(Pixe…...
人形机器人关节驱动技术深度解析:旋转执行器的设计与应用全景
1. 旋转执行器:人形机器人的动力核心 当你看到人形机器人灵活地行走、挥手甚至跳舞时,有没有想过是什么让它们的关节能够如此精准地运动?答案就藏在那些不起眼的旋转执行器里。这些看似简单的装置,实际上是人形机器人最关键的传动…...
2026年高性价比个人网盘盘点:告别“空间焦虑”,谁才是真正的效率神器?
在预算有限的情况下寻找个人网盘,大多数人的第一反应是打开计算器,算出“每 GB 只要几分钱”。但作为一个在存储行业摸爬滚打多年的老兵,我要告诉你一个反直觉的事实:对于 90% 的办公族和学生来说,网盘的“空间大小”是…...
任务式智能客服工作流架构设计与性能优化实战
最近在重构公司的智能客服系统,原来的系统在高并发时经常卡顿,用户排队时间长得让人抓狂。经过一番折腾,我们设计了一套基于事件驱动的任务式工作流,效果拔群,吞吐量直接翻了好几倍。今天就来聊聊这套架构的设计思路和…...
