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

算法的奥秘:常见的六种算法(算法导论笔记2)

算法的奥秘:种类、特性及应用详解(算法导论笔记1)

上期总结算法的种类和大致介绍,这一期主要讲常见的六种算法详解以及演示。

排序算法:

排序算法是一类用于对一组数据元素进行排序的算法。根据不同的排序方式和时间复杂度,有多种排序算法。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。

冒泡排序:通过不断比较相邻元素并交换顺序,使得较大的元素逐渐“浮”到数组的末尾,如同气泡一样。


选择排序:每次从未排序的元素中选择最小(或最大)的元素,放到已排序的末尾。


插入排序:将未排序的元素一个个插入到已排序的数组中,从而逐步形成排序好的数组。


快速排序:通过选择一个基准元素将数组分成两部分,一部分小于基准元素,一部分大于基准元素,然后递归地对这两部分继续进行快速排序。

1ec82163570ece4d502669727e09e859.png

快速排序算法的实现包括两个主要部分:quickSort和partition。quickSort方法用于递归地排序子数组,而partition方法则用于将数组分为两个子数组,并返回基准元素的索引。在partition方法中,我们选择数组的最后一个元素作为基准,然后将小于等于基准的元素移到左边,大于基准的元素移到右边。最后,我们返回基准元素的索引,以便在quickSort方法中进一步分割子数组。在示例用法中,我们创建了一个包含七个整数的数组,并对其进行快速排序。


归并排序:采用分治策略,将数组分成若干个子数组,分别进行排序,最后将排好序的子数组合并成完整的排好序的数组。

查找算法:

查找算法用于在数据结构中查找特定元素。常见的查找算法包括线性查找和二分查找等。

线性查找:从数据结构的一端开始逐个比较每个元素,直到找到目标元素或遍历完整个数据结构。


二分查找:在有序的数据结构中,通过不断缩小查找范围来进行查找。首先确定查找范围的最左端和最右端,然后根据目标元素与中间元素的比较结果来确定下一步查找的方向,不断缩小查找范围直至找到目标元素或确定目标元素不存在为止。

13cfba82e3326bc085f2d1945a1a6ecb.png

二分查找算法是一种高效的查找算法,它要求待查找的数组必须是有序的。该算法的基本思想是将数组分成两个部分,然后根据目标元素与中间元素的比较结果,将查找范围缩小一半。具体来说,我们首先将查找范围设为整个数组,然后通过比较目标元素与中间元素的大小,不断将查找范围缩小,直到找到目标元素或确定目标元素不存在为止。在示例用法中,我们创建了一个包含五个整数的数组,并使用二分查找算法查找目标元素5的位置。如果目标元素存在,则输出其位置;否则输出“目标元素不存在”。

图论算法:


图论算法用于解决图论问题,如最短路径、最小生成树、网络流等。常见的图论算法包括Dijkstra算法、Prim算法、Kruskal算法等。

Dijkstra算法:用于求解单源最短路径问题,给定一个有向图和一个起点,求出从起点到图中所有其他节点的最短路径。


Prim算法:用于求解最小生成树问题,在一个无向加权图中找到一棵包含所有节点且权值和最小的树。


Kruskal算法:用于求解最小生成树问题,通过不断添加边来构建最小生成树,直至所有节点都被覆盖。

fb3bca38ab3c13d224f7fea8ac1cc546.png

04a40e5306d16acfc84231fe6c5d34f8.png

动态规划算法:

动态规划算法用于解决最优化问题,通过将问题分解为若干个子问题,并记录子问题的解,从而避免重复计算,提高求解效率。常见的动态规划算法包括背包问题、最大子段和问题等。

背包问题:给定一组物品,每种物品都有自己的重量和价值,背包的总容量有限。求解如何选择物品放入背包使得背包内的总价值最大。
最大子段和问题:给定一个整数数组,求解连续的子数组使得其和最大。

分治算法:

分治算法将问题分解为若干个子问题,分别解决这些子问题,然后将子问题的解合并以得到原问题的解。常见的分治算法包括快速排序、归并排序等。

快速排序:通过选择一个基准元素将数组分成两部分,一部分小于基准元素,一部分大于基准元素,然后递归地对这两部分继续进行快速排序。最后将排好序的子数组合并成完整的排好序的数组。


归并排序:采用分治策略,将数组分成若干个子数组

贪心算法:

贪心算法是一种解决问题的策略,它的思想是每一步都选择当前情况最好或最优(即最有利)的选择,希望通过这样的选择来得到全局最优解。这种算法在每一步中都只考虑当前情况下最好或最优的选择,而不会考虑这样的选择会对后续的结果产生什么样的影响。

举个例子来说,比如找零问题:假设我们需要在钱币面额为100元、50元、20元、10元、5元和1元的钱柜中找零,贪心算法会首先选择100元的钱币,然后是50元,以此类推,直到我们找到足够的零钱。这种策略虽然不一定能找到最优解(即使用最少数量的钱币),但通常能找到一个接近最优解的结果。

贪心算法的优点在于它每一步的操作都非常简单明了,也容易实现。同时,由于它每一步都选择最优解,所以它的时间复杂度通常比较低。但是,贪心算法并不适用于所有问题,有些问题使用贪心算法可能会得到局部最优解,但不一定能得到全局最优解。因此,当我们使用贪心算法时,需要先判断它是否适用于当前的问题。

73060bcb60c7a5776538d4bdf25c3ea5.png

这个算法首先将硬币按照面值从大到小排序,然后从面值最大的硬币开始找零,尽可能多地使用这种硬币,直到找零的金额无法再使用这种硬币为止。然后,算法使用下一种面值较大的硬币,重复上述过程,直到找零的金额减到0为止。在实现中,我们将硬币按照面值从大到小排序,然后依次枚举每种硬币,计算使用这种硬币能够找零多少金额,然后将这种硬币加入结果列表中。重复这个过程,直到找零的金额减到0为止。

相关文章:

算法的奥秘:常见的六种算法(算法导论笔记2)

算法的奥秘:种类、特性及应用详解(算法导论笔记1) 上期总结算法的种类和大致介绍,这一期主要讲常见的六种算法详解以及演示。 排序算法: 排序算法是一类用于对一组数据元素进行排序的算法。根据不同的排序方式和时间复…...

Python算法——树的路径和算法

Python算法——树的路径和算法 树的路径和算法是一种在树结构中寻找从根节点到叶节点的所有路径,其路径上的节点值之和等于给定目标值的算法。这种算法可以用Python语言实现,本文将介绍如何使用Python编写树的路径和算法,并给出一些示例代码…...

数据结构之链表练习与习题详细解析

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.习题解…...

QT中使用unity

qt把unity发入widget中 头文件showunitywindowsinqt #ifndef SHOWUNITYWINDOWSINQT_H #define SHOWUNITYWINDOWSINQT_H #include <QObject> #include <QProcess> #include <windows.h> #include <winuser.h> #include <QDebug> class ShowUnity…...

QTableView/QTableWidget设置单元格字体颜色及背景色

1.QTableView设置单元格字体颜色及背景色 QStandardItem * pItem new QStandardItem("AAA"); pItem->setBackground(QBrush(Qt::blue)); // 设置背景色 pItem->setForeground(QBrush(Qt::red)); // 设置字体颜色 2.QTableWidget设置单元格字…...

电脑上可以写便签的软件哪些界面比较可爱且好用?

电脑上可以安装使用的便签类软件比较多&#xff0c;在选择使用电脑便签软件时&#xff0c;很多人对便签的外观界面还是比较在意的&#xff0c;一个好看的便签界面在一方面可以引起大家的注意&#xff0c;另一方面可以增加电脑桌面背景和便签类软件的协调性。 电脑便签软件通常…...

2021秋招-总目录

2021秋招-目录 知识点总结 预训练语言模型: Bert家族 1.1 BERT、attention、transformer理解部分 B站讲解–强烈推荐可视化推倒结合代码理解代码部分常见面试考点以及问题: word2vec 、 fasttext 、elmo;BN 、LN、CN、WNNLP中的loss与评价总结 4.1 loss_function&#xff1…...

HTML5生成二维码

H5生成二维码 前言二维码实现过程页面实现关键点全部源码 前言 本文主要讲解如何通过原生HTML、CSS、Js中的qrcodejs二维码生成库&#xff0c;实现一个输入URL按下回车后输出URL。文章底部有全部源码&#xff0c;需要可以自取。 实现效果图&#xff1a; 上述实现效果为&#…...

大数据-之LibrA数据库系统告警处理(ALM-25005 Nscd服务异常)

告警解释 系统每60秒周期性检测nscd服务的状态&#xff0c;如果连续4次&#xff08;3分钟&#xff09;查询不到nscd进程或者无法获取ldapserver中的用户时&#xff0c;产生该告警。 当进程恢复且可以获取ldapserver中的用户时&#xff0c;告警恢复。 告警属性 告警ID 告警级…...

NLP:使用 SciKit Learn 的文本矢量化方法

一、说明 本文是使用所有 SciKit Learns 预处理方法生成文本数字表示的深入解释和教程。对于以下每个矢量化器&#xff0c;将给出一个简短的定义和实际示例&#xff1a;one-hot、count、dict、TfIdf 和哈希矢量化器。 SciKit Learn 是一个用于机器学习项目的广泛库&#xff0c;…...

这些仪表板常用的数据分析模型,你都见过吗?

本文由葡萄城技术团队发布。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 ##前言 在数字化时代&#xff0c;数据已经成为了企业决策和管理的重要依据。而仪表板作为一种数据可视化工具&#x…...

【Proteus仿真】【Arduino单片机】多功能数字时钟设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、DS1302温度传感器、DS1302时钟、按键、蜂鸣器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示当前日期…...

c语言回文数

以下是用C语言编写的回文数代码&#xff1a; #include <stdio.h>int main() { int num, reversedNum 0, remainder, originalNum; printf("请输入一个正整数&#xff1a;"); scanf("%d", &num); originalNum num; while (num …...

【学习记录】从0开始的Linux学习之旅——编译linux内核

一、学习背景 从接触嵌入式至今&#xff0c;除了安装过双系统接触了一丢丢linux外&#xff0c;linux在我眼中向来是个传说。而如今得到了一块树莓派&#xff0c;于是决心把linux搞起来。 二、概念学习 Linux操作系统通常是基于Linux内核&#xff0c;并结合GNU项目中的工具和应…...

uni-app - 日期 · 时间选择器

目录 1.基本介绍 2.案例介绍 ①注意事项&#xff1a; ②效果展示 3.代码展示 ①view部分 ②js部分 ③css样式 1.基本介绍 从底部弹起的滚动选择器。支持五种选择器&#xff0c;通过mode来区分&#xff0c;分别是普通选择器&#xff0c;多列选择器&#xff0c;时间选择器&a…...

使用USB转JTAG芯片CH347在Vivado下调试

简介 高速USB转接芯片CH347是一款集成480Mbps高速USB接口、JTAG接口、SPI接口、I2C接口、异步UART串口、GPIO接口等多种硬件接口的转换芯片。 通过XVC协议&#xff0c;将CH347应用于Vivado下&#xff0c;简单尝试可以成功&#xff0c;源码如下&#xff0c;希望可以一起共建&a…...

硬技能之上的软技巧(三)

在硬技能的基础上&#xff0c;如何运用软技巧来进一步提升个人能力和职业发展。在之前的讨论中&#xff0c;我们提到了硬技能和软技巧的基本概念&#xff0c;以及如何运用软技巧来提升个人能力和职业发展。本篇文章将进一步探讨软技巧中的一些重要方面&#xff0c;包括自我管理…...

mysql 查询

-- 多表查询select * from tb_dept,tb_emp; 内来链接 -- 内连接 -- A 查询员工的姓名 &#xff0c; 及所属的部门名称 &#xff08;隐式内连接实现&#xff09;select tb_emp.name,tb_dept.name from tb_emp,tb_dept where tb_emp.idtb_emp.id;-- 推荐使用select a.name,b.n…...

2311rust过程宏的示例

原文 Rust2018中的过程宏 在Rust2018版本中,我最喜欢的功能是过程宏.在Rust中,过程宏有着悠久而传奇的历史(并继续拥有传奇的未来!) 因为2018年版极大改善了定义和使用它们的体验. 什么是过程宏 过程宏是,在编译时用一段语法,生成新语法的函数.Rust2018中的过程宏有三个风格…...

数据分析:数据预处理流程及方法

数据预处理是数据分析过程中至关重要的一步&#xff0c;它涉及到清洗、转换和整理原始数据&#xff0c;以便更好地适应分析模型或算法。以下是一些常见的数据预处理方法和规则&#xff1a; 数据清洗&#xff1a; 处理缺失值&#xff1a;检测并处理数据中的缺失值&#xff0c;可…...

手把手教你用Alist搭建私人影视库:聚合阿里云盘、百度网盘资源,用Kodi/Plex直接播放

家庭影音中心革命&#xff1a;用Alist打造跨平台云端影视库 坐在沙发上用电视直接播放阿里云盘里的4K电影&#xff0c;或者在卧室用iPad流畅观看百度网盘收藏的美剧——这些曾经需要反复下载转存的繁琐操作&#xff0c;现在通过Alist可以轻松实现。作为一款开源的网盘聚合工具&…...

从PID控制到音频FFT:实战解析CMSIS-DSP库在STM32上的高效用法

从PID控制到音频FFT&#xff1a;实战解析CMSIS-DSP库在STM32上的高效用法 在嵌入式开发领域&#xff0c;Cortex-M4内核凭借其内置的FPU和DSP指令集&#xff0c;已成为实时控制与信号处理应用的理想选择。本文将带您深入探索ARM CMSIS-DSP函数库在STM32平台上的实战应用技巧&…...

生存数据分析:缺失值处理与因果效应估计实战

1. 生存数据分析的核心挑战 在医疗健康、工业设备维护等领域&#xff0c;我们经常需要分析"从某个起点事件到终点事件发生的时间"&#xff0c;这就是生存分析的核心任务。但实际操作中&#xff0c;数据缺失和混杂变量的问题几乎无处不在。想象一下&#xff0c;你正在…...

SAP ABAP开发避坑:BAPI_MATVAL_PRICE_CHANGE调用报‘估价未维护’的完整解决流程

SAP ABAP开发实战&#xff1a;BAPI_MATVAL_PRICE_CHANGE报错"估价未维护"的深度解析与系统化解决方案 在SAP物料管理模块中&#xff0c;价格变更操作是企业日常运营中的高频事务。作为ABAP开发人员&#xff0c;我们经常需要借助BAPI_MATVAL_PRICE_CHANGE函数模块实现…...

终极跨平台硬件调优指南:Universal x86 Tuning Utility如何释放你的Intel/AMD设备全部潜力

终极跨平台硬件调优指南&#xff1a;Universal x86 Tuning Utility如何释放你的Intel/AMD设备全部潜力 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x…...

NCMconverter终极指南:从加密NCM到通用音频格式的完整转换方案

NCMconverter终极指南&#xff1a;从加密NCM到通用音频格式的完整转换方案 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 在数字音乐生态中&#xff0c;专有格式与开放标准的博…...

吃透C++ STL map/set:从入门到实战,新手也能轻松上手

文章目录 前言 一、先搞懂&#xff1a;map和set是什么&#xff1f;核心区别在哪&#xff1f; 二、set使用详解&#xff1a;去重排序&#xff0c;一键搞定 三、map使用详解&#xff1a;键值映射&#xff0c;高效查找 四、map和set的常见避坑点&#xff08;新手必看&#xff…...

手把手教你为YOLOv8集成Deformable Attention:从看懂论文到跑通代码的避坑指南

深度解析YOLOv8集成可变形注意力机制的全流程实践 在计算机视觉领域&#xff0c;目标检测一直是研究热点&#xff0c;而YOLO系列算法凭借其出色的实时性能广受欢迎。最新一代的YOLOv8在精度和速度上达到了新的平衡&#xff0c;但仍有改进空间。本文将带您深入探索如何为YOLOv8集…...

自动驾驶仿真训练平台SIMSCALE的技术解析与应用实践

1. 项目背景与核心价值去年参与某自动驾驶研发项目时&#xff0c;我们团队遇到了真实路测成本高、极端场景覆盖难的问题。当时每天要花费数万元进行车队路测&#xff0c;但遇到暴雨天气或特殊交通状况时&#xff0c;数据采集效率直线下降。正是这种困境让我开始关注仿真技术在自…...

【更新至2024年】2001-2024年上市公司客户、供应商集中度数据

2001-2024年上市公司客户、供应商集中度数据 1、时间&#xff1a;2001-2024年 2、来源&#xff1a;上市公司年报 3、指标&#xff1a;股票代码、股票简称、年份、省份、城市、区县、省份代码、城市代码、区县代码、行业代码、行业名称、首次上市年份、是否ST类、前五大客户销…...