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

news2024/10/3 4:32:37

算法的奥秘:种类、特性及应用详解(算法导论笔记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为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1241082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过python脚本上传远程服务器文件到minio

前言 将文件上传到MinIO对象存储后,MinIO会将文件存储为对象(.meta文件),并为每个对象生成相应的元数据。元数据是描述对象的属性和信息的数据。 通常,元数据包括对象的名称、大小、创建日期等。 在MinIO中,对象的元数据存储在独立…

递归回溯剪枝-子集

LCR 079. 子集 - 力扣&#xff08;LeetCode&#xff09; 方法一 1. 决策树&#xff1a;对于决策树&#xff0c;思考的角度不同&#xff0c;画出的决策树也会不同&#xff0c;这道题可以从两个角度来画决策树。 2. 考虑全局变量的使用&#xff1a; 使用全局变量 List<List&…

Modbus TCP

Modbus &#xff08;&#x1f446; 百度百科&#xff0c;放心跳转&#xff09; 起源 Modbus 由 Modicon 公司于 1979 年开发&#xff0c;是一种工业现场总线协议标准。 Modbus 通信协议具有多个变种&#xff0c;支持串口&#xff0c;以太网多个版本&#xff0c;其中最著名的…

智慧城市内涝积水监测仪功能,提升城市预防功能

内涝积水监测仪不仅改变了人们应对城市内涝的老办法&#xff0c;还让智慧城市往前迈了一大步。这个监测仪是怎么做到的呢&#xff1f;就是靠它精准的数据监测和预警&#xff0c;让城市管理有了更科学高效的解决妙招。它就像有了个聪明又负责任的助手&#xff0c;让城市管理更加…

AI虚拟主播系统+智能交互+AI词库+虚拟形象 附带完整的搭建教程

近几年电商直播带货热潮持高不跌&#xff0c;很多商家企业都会选择线上直播卖产品&#xff0c;与此同时&#xff0c;虚拟主播开始盛行&#xff0c;与真人主播相比&#xff0c;品牌虚拟主播无档期风险、离职风险、人设稳定更可控。 AI虚拟主播的不是为了取代真人主播而开发&…

AI:86-基于深度学习的街景图像地理位置识别

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

mapBox地图第一个案例和聚合图标自定义

Mapbox地图数据平台 1.简介 Mapbox是移动的和Web应用程序的位置数据平台&#xff0c;适用于分层区位分析图&#xff0c;可自定义元素、色彩等&#xff0c;任何图层都可编辑.。Mapbox灵活的地图和位置构建块可以无缝集成到您的数据分析应用程序或数据可视化中。 平滑的矢量地…

Dubbo从入门到上天系列第十八篇:Dubbo引入Zookeeper等注册中心简介以及DubboAdmin简要介绍,为后续详解Dubbo各种注册中心做铺垫!

文章目录 一&#xff1a;Dubbo注册中心引言 1&#xff1a;什么是Dubbo的注册中心&#xff1f; 2&#xff1a;注册中心关系图解 3&#xff1a;引入注册中心服务执行流程 4&#xff1a;Dubbo注册中心好处 5&#xff1a;注册中心核心作用 二&#xff1a;注册中心实现方案 …

10.docker的网络network-概述

1.docker的网络模式 docker共有四种网路模式&#xff0c;分别是bridge、host、none和container. 1.1 bridge bridge,也称为虚拟网桥。在bridge模式下&#xff0c;为每个容器分配、配置IP等&#xff0c;并将容器连接到一个docker0。使用–network bridge命令指定&#xff0c;…

程序员指南六:数据平面开发套件

PORT HOTPLUG FRAMEWORK 端口热插拔框架为DPDK应用程序提供在运行时附加和分离端口的能力。由于该框架依赖于PMD实现&#xff0c;PMD无法处理的端口超出了该框架的范围。此外&#xff0c;在从DPDK应用程序分离端口后&#xff0c;该框架不提供从系统中移除设备的方法。对于由物…

【用unity实现100个游戏之16】Unity中程序化生成的2D地牢5(附项目源码,完结)

文章目录 最终效果前言生成墙壁优化方法一、使用rule tile方法二、使用代码生成墙壁补充最终效果后续参考源码完结最终效果 前言 本期是本项目最后一期,主要是进行墙壁的生成优化和补充一下剩下了的其他内容 生成墙壁优化 方法一、使用rule tile 我这里大概给个rule tile参…

跟着Cancer Cell 学作图| 配对棒棒糖图(Lollipop chart)

dotplot 本期图片 ❝ Doi&#xff1a;https://doi.org/10.1016/j.ccell.2022.02.013 ❞ ❝ Dotplot showing the association of cell populations with different tissue types (organ or tumor). The x axis represents cell types, and the y axis represents the different…

对比两个数组中对应位置的两个元素将每次对比的最大值用于构成新的数组np.maximum()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 对比两个数组中对应位置的两个元素 将每次对比的最大值用于构成新的数组 np.maximum() 选择题 以下代码的输出结果为&#xff1f; import numpy as np a1 [1,2,33] a2 [11,2,3] print("…

webshell之无扩展免杀

1.php加密 这里是利用phpjiami网站进行加密&#xff0c;进而达到加密效果 加密前&#xff1a; 查杀效果 可以看到这里D某和某狗都查杀 里用php加密后效果 查杀效果 可以看到这里只有D某会显示加密脚本&#xff0c;而某狗直接绕过 2.dezend加密 可以看到dezend加密的特征还是…

DockerHub 无法访问 - 解决办法

背景 DockerHub 镜像仓库地址 https://hub.docker.com/ 突然就无法访问了,且截至今日(2023/11)还无法访问。 这对我们来说,还是有一些影响的: ● 虽然 DockerHub 页面无法访问,但是还是可以下载镜像的,只是比较慢而已 ● 没法通过界面查询相关镜像,或者维护相关镜像了…

【JavaEE初阶】认识线程、创建线程

1. 认识线程&#xff08;Thread&#xff09; 1.1 概念 1) 线程是什么 一个线程就是一个 "执行流". 每个线程之间都可以按照顺序执行自己的代码. 多个线程之间 "同时" 执行着多份代码. 举例&#xff1a; 还是回到我们之前的银⾏的例⼦中。之前我们主要描…

算法——双指针

一、背景知识 双指针&#xff08;Two Pointers&#xff09;&#xff1a;指的是在遍历元素的过程中&#xff0c;不是使用单个指针进行访问&#xff0c;而是使用两个指针进行访问&#xff0c;从而达到相应的目的。对撞时针&#xff1a; 两个指针方向相反对撞指针一般用来解决有序…

ts实现合并数组对象中key相同的数据

背景 在平常的业务中&#xff0c;后端同学会返回以下类似的结构数据 // 后端返回的数据结构 [{ id: 1, product_id: 1, pid_name: "Asia", name: "HKG01" },{ id: 2, product_id: 1, pid_name: "Asia", name: "SH01" },{ id: 3, pro…

为Oracle链接服务器使用分布式事务

1 现象 在SQL Server中创建指向Oracle的链接服务器&#xff0c;SQL语句在事务中向链接服务器插入数据。返回链接服务器无法启动分布式事务的报错。 2 解决 在Windows平台下&#xff0c;SQL Server依赖分布式事务协调器&#xff08;MSDTC&#xff09;来使用分布式事务&#xff0…

Autocad2020切换经典界面

Autocad2020切换经典界面 1.更改1.1设置另存为 1.更改 1.1设置另存为