初识算法和数据结构P1:保姆级图文详解
文章目录
- 前言
- 1、算法例子
- 1.1、查字典(二分查找算法)
- 1.2、整理扑克(插入排序算法)
- 1.3、货币找零(贪心算法)
- 2、算法与数据结构
- 2.1、算法定义
- 2.2、数据结构定义
- 2.3、数据结构与算法的关系
- 2.4、独立于编程语言
前言
亲爱的家人们,技术图文创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,谢谢大家!有问题请私信或加V:18252587519。
1、算法例子
1.1、查字典(二分查找算法)
①问题描述:
在查找字典中的某个字时,常按照拼音的字母顺序进行查找。该过程在查找过程中不断缩小范围,逐步定位目标字。
②算法分析:
查字典的过程实际上是二分查找的经典实现。具体步骤包括:
将字典分为两部分,通过比较中间位置的字母来决定是否查找前半部分或后半部分。
每次根据字母顺序排除一半的范围,直到找到目标字。
③算法本质:
二分查找算法在数据量大的情况下能显著提高查找效率,它的时间复杂度为 O(log n),比起线性查找(O(n))更为高效。
1.2、整理扑克(插入排序算法)
①问题描述:
在打牌时需要将手中的扑克牌从小到大排列。该过程通过不断将一张扑克牌插入到已经排序好的部分来实现。
②算法分析:
扑克牌整理的过程本质上就是插入排序算法。在每一轮中,从无序部分抽出一张扑克牌,并将其插入到有序部分的正确位置,直到所有扑克牌有序为止。
③算法本质:
插入排序是一种简单且直观的排序算法,适用于小规模的数据集。它的时间复杂度为 O(n^2),但在数据量较小或已接近有序时,表现较好。
1.3、货币找零(贪心算法)
①问题描述:
在超市购物时,收银员需要找零。收银员会通过选择面额较大的货币来尽量减少找零次数。
②算法分析:
该过程采用贪心算法,每一步都选择当前最优的选择(即用最大的面额找零),直到达到所需的零钱。
③算法本质:
贪心算法通过在每个步骤选择局部最优解来期望得到全局最优解。尽管这种策略在某些情况下无法保证最优解,但对于大多数货币找零问题,它能够提供有效的解决方案。
2、算法与数据结构
2.1、算法定义
①定义:解决特定问题的一组指令或操作步骤,通常具备以下几个特性:
i:明确的问题定义:包括输入和输出的清晰界定。
ii:可行性:算法能在有限的步骤、时间和内存空间内完成。
iii:确定性:算法的每个步骤都有明确的意义,且在相同的输入和条件下,输出结果是一致的。
2.2、数据结构定义
①定义:组织和存储数据的方式,包含数据内容、数据间的关系以及对数据的操作方法。其设计目标包括:
i:节省空间:减少内存占用。
ii:高效操作:包括数据的访问、添加、删除和更新等操作。
iii:简洁性:数据结构应简洁并提供足够的逻辑信息,帮助算法高效执行。
iv:设计的权衡:在设计数据结构时,常常需要在不同方面作出权衡,例如:
链表:在数据添加和删除上更便捷,但牺牲了数据访问的速度。
图:提供更丰富的逻辑信息,但需要更多的内存空间。
2.3、数据结构与算法的关系
i:数据结构是算法的基石:算法需要基于某种数据结构来进行数据的存储和操作。
ii:算法为数据结构注入生命力:数据结构本身只能存储数据,通过算法才能实现对数据的操作和问题的解决。
iii:算法的执行效率与数据结构密切相关:不同的数据结构在执行同一个算法时,可能会导致效率上的差异,选择合适的数据结构至关重要。
类比拼装积木:数据结构与算法可以比作一套拼装积木:
输入数据:未拼装的积木。
数据结构:积木的组织形式,包括形状、大小、连接方式等。
算法:一系列拼装积木的操作步骤。
输出数据:最终拼装好的积木模型。
2.4、独立于编程语言
数据结构和算法是独立于编程语言的概念。不仅应用于某种编程语言,还在多种编程语言中实现。这使得数据结构和算法的学习具有广泛的适用性。
相关文章:

初识算法和数据结构P1:保姆级图文详解
文章目录 前言1、算法例子1.1、查字典(二分查找算法)1.2、整理扑克(插入排序算法)1.3、货币找零(贪心算法) 2、算法与数据结构2.1、算法定义2.2、数据结构定义2.3、数据结构与算法的关系2.4、独立于编程语言…...

【Go】Go Gorm 详解
1. 概念 Gorm 官网:https://gorm.io/zh_CN/docs/ Gorm:The fantastic ORM library for Golang aims to be developer friendly,这是官网的介绍,简单来说 Gorm 就是一款高性能的 Golang ORM 库,便于开发人员提高效率 那…...
【IDEA版本升级JDK21报错方法引用无效 找不到符号】
java: 方法引用无效 找不到符号 符号: 方法 getFirst() 位置: 接口 java.util.List 升级JDK21版本遇到问题,报错找不到符号 但是点进去又能发现这个函数,证明能够找到这个方法,但是就是报错 java: 方法引用无效 找不到符号 符号: …...
Node.js 版本管理工具完全指南
Node.js 版本管理工具完全指南 目录 1. nvm (Node Version Manager)2. n (Node Package Manager)3. fnm (Fast Node Manager)4. Volta5. 工具对比 1. nvm (Node Version Manager) 1.1 安装指南 macOS/Linux # 使用 curl 安装 curl -o- https://raw.githubusercontent.com…...

JavaSE学习心得(多线程与网络编程篇)
多线程-网络编程 前言 多线程&JUC 多线程三种实现方式 第一种实现方式 第二种实现方式 第三种实现方式 常见成员方法 买票引发的安全问题 同步代码块 同步方法 Lock锁 生产者和消费者 常见方法 等待唤醒机制 练习 抢红包 抽奖 多线程统计并求最…...
平均精确率均值(mAP)
mAP(mean Average Precision,平均精确率均值) 并不是传统意义上的“精度”(Accuracy),而是一种专门用于评估目标检测、图像分割或信息检索等任务的性能指标。它更全面地反映了模型在不同类别和不同置信度阈…...

VUE学习笔记1__创建VUE实例
核心步骤 <div id"app"><!-- 这里存放渲染逻辑代码 --><h1>{{ msg }}</h1><a href"#">{{count}}</a> </div><!-- 引入在线的开发版本核心包 --> <!-- 引入核心包后全局可使用VUE构造函数 --> <…...

Inxpect毫米波安全雷达:精准检测与动态保护,工业自动化可靠选择
Inxpect毫米波安全雷达具备“精准检测、动态区域保护、环境适应性”三大核心功能。在工业自动化和机器人系统里,这些功能发挥着重要作用,有助于提升安全性与效率。Inxpect雷达运用毫米波技术,在诸如存在灰尘、烟雾或碎屑等复杂环境中,也能保持…...

基于禁忌搜索算法的TSP问题最优路径搜索matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于禁忌搜索算法的TSP问题最优路径搜索,旅行商问题(TSP)是一个经典的组合优化问题。其起源可以追溯到 19 世纪初,…...

C51交通控制系统的设计与实现
实验要求: 本题目拟设计一个工作在十字路口的交通信号灯控制系统,设东西方向为主干道A,南北方向为辅助干道B。要求:(1)用发光二极管模拟交通灯信号;(2)灵活控制主、辅干…...
深度学习的超参数
1. 引言 1.1 什么是超参数? 在机器学习和深度学习中,超参数(Hyperparameter) 是在模型训练前由开发者设置的参数,这些参数决定了模型的训练过程和模型的结构。例如: 神经网络的层数和每层神经元的数量。…...
网络安全面试题及经验分享
本文内容是i春秋论坛面向专业爱好者征集的关于2023年面试题目和答案解析,题目是真实的面试经历分享,具有很高的参考价值。 shiro反序列化漏洞的原理 Shiro反序列化漏洞的原理是攻击者通过精心构造恶意序列化数据,使得在反序列化过程中能够执…...

【Golang 面试题】每日 3 题(三十一)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...

微服务架构:挑战与机遇并存
微服务架构在提升系统灵活性、可扩展性和容错性的同时,也引入了一系列挑战。微服务带来的挑战主要有以下几点: 1. 系统复杂性增加:想象一下,你原本有一个大厨房(单体应用),里面有几个大厨&…...
Vue语音播报功能
使用Web Speech API的SpeechSynthesis接口来实现文本转语音 Web Speech API可能不在所有浏览器中都能完美支持 特别是旧浏览器 在生产环境中,你可能需要添加功能检测和后备方案。<template><div><textarea v-model"text" placeholder&quo…...

【Java设计模式-4】策略模式,消灭if/else迷宫的利器
各位Java编程小伙伴们!今天咱们要一起探索一个超级厉害的Java设计模式——策略模式,它就像是一把神奇的魔法剑,专门用来斩断那些让我们代码变得乱糟糟的if/else语句迷宫! 一、if/else的烦恼 在编程的奇妙世界里,我们…...

citrix netscaler13.1 重写负载均衡响应头(基础版)
在 Citrix NetScaler 13.1 中,Rewrite Actions 用于对负载均衡响应进行修改,包括替换、删除和插入 HTTP 响应头。这些操作可以通过自定义策略来完成,帮助你根据需求调整请求内容。以下是三种常见的操作: 1. Replace (替换响应头)…...
【AI学习】地平线首席架构师苏箐关于自动驾驶的演讲
在地平线智驾科技畅想日上,地平线副总裁兼首席架构师苏箐(前华为智驾负责人)做了即兴演讲,以下是其演讲的主要内容: 对自动驾驶行业的看法 自动驾驶的难度与挑战:苏箐表示自动驾驶非常难,他做自…...
QILSTE H11-D212HRTCG/5M高亮红绿双色LED灯珠 发光二极管LED
型号:H11-D212HRTCG/5M,一款由QILSTE(HongKong)Technology Co., Ltd精心打造的高亮度红绿双色LED产品,其尺寸仅为2.01.251.1 mm,却蕴含着强大的光电特性。这款产品采用透明平面胶体封装,不仅外观…...

2️⃣java基础进阶——多线程、并发与线程池的基本使用
一、概念介绍 什么是线程,什么是进程,两者有什么关系? 进程是操作系统资源分配的独立单位;而线程是操作系统能够进行调度和分派的最小单位;线程包含于进程之中,是进程中的实际运作单位。 例如:…...
基于深度学习的语音识别系统设计与实现
以下是为您准备的《基于深度学习的语音识别系统》技术文档,内容包含完整实现方案和详细代码解析: 基于深度学习的语音识别系统设计与实现 目录 语音识别技术概述系统架构设计语音信号预处理深度神经网络模型构建端到端语音识别实现模型训练与优化策略部署与性能优化完整代码…...

C++ 日志系统实战第五步:日志器的设计
全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~ 本文项目代码编写收尾! 日志器类 (Logger) 设计(建造者模式) 日志器主要用于和前端交互。当我们需要使用日志系统打印 log 时&…...

[特殊字符]《计算机组成原理》第 8 章 - CPU 的结构和功能
🔵8.1 CPU 的结构 🔵8.1.1 CPU 的功能 CPU(中央处理器)是计算机的核心部件,主要负责以下任务: 指令执行:解析并执行指令集架构(ISA)定义的指令数据处理:完…...

第3节 Node.js 创建第一个应用
Node.js 非常强大,只需动手写几行代码就可以构建出整个HTTP服务器。事实上,我们的Web应用以及对应的Web服务器基本上是一样的。 在我们创建Node.js第一个"Hello, World!"应用前,让我们先了解下Node.js应用是由哪几部分组成的&…...
【求A类B类月】2022-2-9
缘由编程求解,如内容所示题-Python-CSDN问答只写示例及注释 每月工作日只考虑周末情况,即只有周六、周日放假。每月第一个工作日如果是星期一则该月是A类月,每月最后一个工作日如果是星期五则该月是B类月。一个月可能是A类月也可能是B类月。…...

STM32G4 电机外设篇(一) GPIO+UART
目录 一、STM32G4 电机外设篇(一) GPIOUART1 GPIO1.1 STM32CUBEMX 配置以及Keil代码1.2 代码和实验现象 2 UART2.1 STM32CUBEMX 配置以及Keil代码2.2 代码和实验现象 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇࿰…...
Python训练营打卡 Day41
简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 → Batch…...

【Opencv+Yolo】Day2_图像处理
目录 一、图像梯度计算 图像梯度-sobal算子: Scharr:权重变化更大(线条更加丰富,比Sobel更加细致捕捉更多梯度信息) Laplacian算子:对噪音点敏感(可以和其他一起结合使用) 二、边…...
生成模型:从数据学习到创造的 AI 新范式
一、生成模型:定义与核心逻辑 生成模型是一类通过学习数据潜在分布来创造新样本的机器学习模型。其核心目标是构建数据的概率分布模型 P(X),使生成的样本 X^ 与真实数据 X 具有相似的统计特征。 1.1 与判别模型的本质区别 维度生成模型判别模型核心目…...

基于c++11重构的muduo核心库项目梳理
代码梳理 Thread创建与分配 event_channel回调函数 在muduo中,有三种类型的channel,包括 事件channel(event_channel) 这个就是普通的IO事件channel,当监听到Tcp连接有读、写、关闭、错误事件的时候,event_channel活跃accept_c…...