八大排序——归并排序
目录
1.基本思想
2.动态图
3.分解的时候我们可以使用递归的方式进行
代码解释
1. main 方法
2. mergeSort 方法
3. merge 方法
示例运行过程
初始数组
每轮排序后的数组
代码总结
合并两个有序序列
1.基本思想
归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序。
-
将一个数组拆分为两个,从中间点拆开,通过递归操作来实现一层一层拆分。
-
从左右数组中选择小的元素放入到临时空间,并移动下标到下一位置。
-
重复步骤2直到某一下标达到尾部。
-
将另一序列剩下的所有元素依次放入临时空间。
-
将临时空间的数据依次放入原数据数组。
2.动态图
下边是动态图
3.分解的时候我们可以使用递归的方式进行
首先我们可以先定义三个变量,
数组的头部位置可以定义为 low,数组的尾部可以定义为high
因为每次分解都是要折半,所以我们可以定义数组的中间是 mid,如下图所示
我们从上图当中可以看到,我们每一次递归,都是将原来的mid当成新的high,一直到low = high的时候我们就已经可以说明我们将一个数据分离了出来。所以我们可以写以下代码来表示分。
public static void mergeSort(int[] a, int low, int high) {
//首先判断 low 和 high是否指向一个地方
if(low >= high) {
return;
}
int mid = (low + high)/2;
//先递归左边
mergeSort(a, low, mid);
//在递归右边
mergeSort(a, mid+1, high);}
首先我们可以先递归左边,直到我们讲第一个值分离出去,然后再回溯,分离他右边的那个,如下如所以:
当递归完成之后我们该开始合并了
首先我们需要先弄懂一个地方就是合并是在哪里开始的。
首先我们要知道我们第一次回溯之后,将第二个元素分离了出来,第二个元素分离完成之后,也会回溯回去,那么此一次合并就是 值 6 和 5的合并。
下边我们为了演示选择了 5,6 , 1 , 3的合并过程
首先我们需要弄清楚,我们这里所谓的分离其实是概念意义上的,在我们的数组结构上其实并没有分离,而且由于回溯的原因 5,6 , 1 , 3是其实和上边是对应的关系,如图所示
下边我们来一步一步的展示整个合并的过程,
首先我么可以定义两个指针,s1和s2,然后在定义一个新的临时数组来存储数据
我们将指针s1的范围锁定在 s1<=min ,将指针s2的范围锁定在s2<=high,我们可以比较s1和s2当前指向的值的大小,将小的一方放入到临时数组当中去,直到s1或s2一方指向为空,那么就可以将另一方全部放入到临时数组当中去。然后将临时的代码在放回数组
代码如下:
代码
public class ShellSort {public static void main(String[] args) {int a[] = {6,5,3,1,8,7,2,4};mergeSort(a, 0, a.length - 1);System.out.println("排序结果:" + Arrays.toString(a));}//分public static void mergeSort(int[] a, int low, int high) {//首先判断 low 和 high是否指向一个地方// 正常情况下就是 == if(low == high) {return;}int mid = (low + high)/2;//先递归左边mergeSort(a, low, mid);//在递归右边mergeSort(a, mid+1, high);//合并merge(a,low,mid,high);System.out.println(Arrays.toString(a));}//合并public static void merge(int[] a, int low, int mid, int high) {//定义第一个段的开始int s1 = low;//定义第二个段的开始int s2 = mid+1;//定义临时数组int[] temp = new int[high-low+1];int i = 0;//定义临时数组的下标//判断大小将数组放入到临时数组当中去while(s1<=mid && s2<=high) {if(a[s1] <= a[s2]) {temp[i++] = a[s1++];}else {temp[i++] = a[s2++];}}//判断s1当中是否有数据,如果有将其全部拷贝到临死数组当中去while (s1 <= mid) {temp[i++] = a[s1++];}//判断s1当中是否有数据,如果有将其全部拷贝到临死数组当中去while (s2 <= high) {temp[i++] = a[s2++];}//将临时数组当中的代码放回原数组for (int j = 0; j < temp.length; j++) {a[j+low] = temp[j];}}
}
代码解释
1. main
方法
public static void main(String[] args) {int a[] = {6, 5, 3, 1, 8, 7, 2, 4};mergeSort(a, 0, a.length - 1);System.out.println("排序结果:" + Arrays.toString(a)); }
-
功能:程序的入口。
-
逻辑:
-
定义了一个未排序的整数数组
a
。 -
调用
mergeSort
方法对数组进行排序。 -
打印排序后的数组。
-
2. mergeSort
方法
public static void mergeSort(int[] a, int low, int high) {
// 首先判断 low 和 high 是否指向一个地方
if (low == high) {
return;
}
int mid = (low + high) / 2;
// 先递归左边
mergeSort(a, low, mid);
// 再递归右边
mergeSort(a, mid + 1, high);
// 合并
merge(a, low, mid, high);
System.out.println(Arrays.toString(a));
}
-
功能:实现归并排序的分治逻辑。
-
逻辑:
-
递归终止条件:
-
如果
low == high
,说明当前子数组只有一个元素,无需排序,直接返回。
-
-
计算中间位置:
-
mid = (low + high) / 2
,将数组分成两个子数组。
-
-
递归排序左半部分:
-
调用
mergeSort(a, low, mid)
,对左半部分进行排序。
-
-
递归排序右半部分:
-
调用
mergeSort(a, mid + 1, high)
,对右半部分进行排序。
-
-
合并两个有序子数组:
-
调用
merge(a, low, mid, high)
,将两个有序子数组合并成一个有序数组。
-
-
打印每轮排序后的数组:
-
每轮排序后,打印当前数组的状态。
-
-
3. merge
方法
public static void merge(int[] a, int low, int mid, int high) {
// 定义第一个段的开始
int s1 = low;
// 定义第二个段的开始
int s2 = mid + 1;
// 定义临时数组
int[] temp = new int[high - low + 1];
int i = 0; // 定义临时数组的下标
// 判断大小将数组放入到临时数组当中去
while (s1 <= mid && s2 <= high) {
if (a[s1] <= a[s2]) {
temp[i++] = a[s1++];
} else {
temp[i++] = a[s2++];
}
}
// 判断 s1 当中是否有数据,如果有将其全部拷贝到临时数组当中去
while (s1 <= mid) {
temp[i++] = a[s1++];
}
// 判断 s2 当中是否有数据,如果有将其全部拷贝到临时数组当中去
while (s2 <= high) {
temp[i++] = a[s2++];
}
// 将临时数组当中的数据放回原数组
for (int j = 0; j < temp.length; j++) {
a[j + low] = temp[j];
}
}
-
功能:合并两个有序子数组。
-
逻辑:
-
初始化指针:
-
s1
指向左半部分的起始位置(low
)。 -
s2
指向右半部分的起始位置(mid + 1
)。
-
-
定义临时数组:
-
temp
用于存储合并后的有序数组。
-
-
比较并合并:
-
比较
a[s1]
和a[s2]
,将较小的元素放入temp
中。 -
移动相应的指针(
s1
或s2
)。
-
-
处理剩余元素:
-
如果左半部分还有剩余元素,将其全部拷贝到
temp
中。 -
如果右半部分还有剩余元素,将其全部拷贝到
temp
中。
-
-
将临时数组的数据拷贝回原数组:
-
将
temp
中的数据拷贝回原数组a
的对应位置。
-
-
示例运行过程
初始数组
[6, 5, 3, 1, 8, 7, 2, 4]
每轮排序后的数组
-
第1轮:
-
左半部分排序:
[5, 6]
-
右半部分排序:
[1, 3]
-
合并结果:
[1, 3, 5, 6, 8, 7, 2, 4]
-
-
第2轮:
-
左半部分排序:
[1, 3, 5, 6]
-
右半部分排序:
[2, 4, 7, 8]
-
合并结果:
[1, 2, 3, 4, 5, 6, 7, 8]
-
最终排序结果
[1, 2, 3, 4, 5, 6, 7, 8]
代码总结
-
算法:归并排序。
-
时间复杂度:O(n log n),其中
n
是数组的长度。 -
空间复杂度:O(n),需要额外的临时数组来存储合并结果。
-
优点:稳定排序,时间复杂度较低,适合大规模数据。
-
缺点:需要额外的空间。
相关文章:
八大排序——归并排序
目录 1.基本思想 2.动态图 3.分解的时候我们可以使用递归的方式进行 代码解释 1. main 方法 2. mergeSort 方法 3. merge 方法 示例运行过程 初始数组 每轮排序后的数组 代码总结 合并两个有序序列 1.基本思想 归并排序就是递归得将原始数组递归对半分隔,…...
YOLO算法模型检测利用手机IP摄像头
1.yolo算法训练模型 yolov5训练网络数据集_yolo数据集 csdn-CSDN博客 2.模型检测 检测文件参数:yolov5的detect.py中基础参数分析-CSDN博客 3.进行IP摄像头检测 3.1下载IP摄像头 3.2打开与使用IP摄像头(确保手机与电脑在同一WiFi(局域网…...
前端职业规划
前端开发的职业规划可以根据个人兴趣、技术深度和职业目标来制定。以下是一个典型的前端开发者职业发展路径,涵盖了从初级到高级的不同阶段,以及未来的发展方向: 1. 初级阶段(0-2 年) 目标:掌握基础技能&a…...
百度舆情优化:百度下拉框中的负面如何清除?
百度的下拉词、相关搜索、大家还在搜有负面词条,一直是企业公关经理头疼的问题,小马识途营销顾问深耕网络营销领域十几年,对百度SEO优化、百度下拉框、百度相关搜索、自媒体营销、短视频营销等等技巧方面积累了一定的方法和技巧。 对于百度下…...
Java中如何高效地合并多个对象的List数据:方法与案例解析!
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互…...
【Vue】打包vue3+vite项目发布到github page的完整过程
文章目录 第一步:打包第二步:github仓库设置第三步:安装插件gh-pages第四步:两个配置第五步:上传github其他问题1. 路由2.待补充 参考文章: 环境: vue3vite windows11(使用终端即可&…...
编译和链接【四】链接详解
文章目录 编译和链接【四】链接详解前言系列文章入口符号表和重定位表链接过程分段组装符号决议重定位 编译和链接【四】链接详解 前言 在我大一的时候, 我使用VC6.0对C语言程序进行编译链接和运行 , 然后我接触了VS, Qt creator等众多IDE&…...
C语言进阶——4自定义类型(2)— 位段/枚举/联合体
目录 2. 位段2.1 什么是位段2.2 位段的内存分配2.3 位段的跨平台问题2.4 位段的应用 3. 枚举3.1 枚举类型的定义3.2 枚举的优点3.3 枚举的使用 4. 联合(共用体)4.1 联合类型的定义4.2 联合的特点4.3 联合大小的计算 2. 位段 2.1 什么是位段 位段的声明…...
企业级高可用 Kubernetes 实践:基于青云 LB 搭建容灾与负载均衡集群全攻略
一、前言 在企业生产环境,k8s高可用是一个必不可少的特性,其中最通用的场景就是如何在 k8s 集群宕机一个节点的情况下保障服务依旧可用。部署高可用k8s集群对于企业级云平台来说是一个根本性的原则,容错、服务可用和数据安全是高可用基础设施的关键。本文是在青云上利用青云…...
250213-异常exception
1. 概念 异常的抛出(throw):若在方法运行中出现错误,则方法会生成代表该异常的一个对象,并把它交给运行时系统,这个过程叫做抛出。 异常的捕获(catch):运行时系统接收到…...
MySQL - 索引 - 介绍
索引(Index)是帮助数据库高效获取数据的数据结构. 结构 语法 创建索引 creat [unique] index 索引名 on 表名 (字段名, ...); //创建唯一索引时加上unique, 多个字段用逗号隔开 查看索引 show index from 表名; 删除索引 drop index 索引名 on 表名;...
每日一题——90. 子集 II
题目链接:90. 子集 II - 力扣(LeetCode) 代码: class Solution { private:vector<vector<int>> result;vector<int> path;void traversal(vector<int>& nums,int startindex,vector<bool> …...
Mysql进阶篇(mysqlcheck - 表维护程序)
mysqlcheck的作用 mysqlcheck客户端用于执行表维护,可以对表进行:分析、检查、优化或修复操作。 (1)分析的作用是查看表的关键字分布,能够让 sql 生成正确的执行计划(支持 InnoDB,MyISAM&#x…...
ChartDB:一个基于Web的可视化数据库设计工具
这次给大家介绍一个可视化的数据库设计工具:ChartDB。 ChartDB 是一个免费开源的数据库可视化设计工具,支持的数据库包括 MySQL、MariaDB、PostgreSQL、Microsoft SQL Server、SQLite、ClickHouse 等。 对于已有的数据库,ChartDB 提供了一键…...
Java NIO基础与实战:如何提升IO操作性能
Java NIO 概述 Java NIO(新 I/O)是 Java 提供的一个更为高效的 I/O 处理框架。Java NIO(New I/O)是对传统 I/O(java.io)模型的改进,它引入了非阻塞 I/O 操作和面向缓冲区的数据读写方式&#x…...
Elasticsearch:同义词在 RAG 中重要吗?
作者:来自 Elastic Jeffrey Rengifo 及 Toms Mura 探索 RAG 应用程序中 Elasticsearch 同义词的功能。 同义词允许我们使用具有相同含义的不同词语在文档中搜索,以确保用户无论使用什么确切的词语都能找到他们所寻找的内容。你可能会认为,由于…...
Python - Python正则表达式
正则表达式(Regular Expression),又称规则表达式。正则表达式(Regular Expression)是一组由字母和符号组成的特殊文本,用于从文本中找出满足特定格式的句子。正则表达式通常被用来检索、替换那些符合某个模…...
DeepSeek 指导手册(入门到精通)
第⼀章:准备篇(三分钟上手)1.1 三分钟创建你的 AI 伙伴1.2 认识你的 AI 控制台 第二章:基础对话篇(像交朋友⼀样学交流)2.1 有效提问的五个黄金法则2.2 新手必学魔法指令 第三章:效率飞跃篇&…...
Android adb测试常用命令大全
目录 一、查看最上层成activity名字: 二、查看Activity的任务栈: 三、获取安装包信息 四、性能相关 1、显示CPU信息 : 2、查看CPU使用信息 3、内存信息(meminfo package_name or pid 使用程序的包名或者进程id显示内存信息) 4、电量信…...
【python语言应用】最新全流程Python编程、机器学习与深度学习实践技术应用(帮助你快速了解和入门 Python)
近年来,人工智能领域的飞速发展极大地改变了各个行业的面貌。当前最新的技术动态,如大型语言模型和深度学习技术的发展,展示了深度学习和机器学习技术的强大潜力,成为推动创新和提升竞争力的关键。特别是PyTorch,凭借其…...
在不知道进程的情况下怎么关闭
在不知道具体进程ID(PID)或者进程可能会变动的情况下,关闭MinIO服务器的方法通常依赖于你如何启动MinIO以及你的操作系统环境。以下是一些建议的步骤: 1. 使用系统服务管理工具 如果你将MinIO配置为系统服务(例如在L…...
算力平台 驱动云的使用
驱动云的使用 1 进入官网注册2 上传数据3 上传模型4 创建项目5 开发环境6 停止使用 1 进入官网注册 点击这个进入 可以看到注册之后送十个算力点 如果不训练,仅仅上传数据和模型,那么也是要收费的,因为存储数据要占用驱动云的空间。 2 上…...
高校LabVIEW开发调试中的常见问题
在高校进行LabVIEW开发调试时,常常面临硬件选型不当、方案设计不合理、布线不专业以及人员流动性强等问题。这些问题可能影响项目的进展和质量。本文将总结这些问题,并给出具体的解决方案,帮助学生和团队更高效地开展开发工作。 1. 硬件选…...
数据结构——结构体位域、typedef类型重定义、宏、共用体union、枚举、虚拟内存划分
一、结构体位域 1.1 结构体位域的基础 结构体位域:把结构体字节大小扣到极致的一个类型,以bit单位 格式:struct 位域体名{数据类型 位域名:位域大小;数据类型 位域名:位域大小;...};解析:位域体名:可有可无ÿ…...
git bash删除库中的分支与文件
一、 在 GitHub 上删除非 main 分支的步骤可以分为两部分:首先在本地删除该分支,然后在 GitHub 上删除远程分支。以下是详细的步骤: 1. 删除远程分支(在 GitHub 上删除) 打开 GitHub 仓库页面,进入你的仓…...
连锁收银系统的核心架构与技术选型
在连锁门店的日常运营里,连锁收银系统扮演着极为重要的角色,它不仅承担着交易结算的基础任务,还关联着库存管理、会员服务、数据分析等多个关键环节。一套设计精良的核心架构与合理的技术选型,是保障收银系统高效、稳定运行的基础…...
称呼计算器:智能科技,简化您的计算生活
一款手机应用程序,安卓设备上使用。这款计算器应用以其简洁的界面、实用的功能和良好的用户体验而受到用户的喜爱。 计算器的主要特点包括: 基本计算功能:支持加、减、乘、除等基本运算。 科学计算器模式:提供更高级的数学运算功…...
qt的QMainWindow保存窗口和恢复窗口状态
保存窗口状态 QSettings settings("MyCompany", "MyApp"); // 指定存储的应用信息 settings.setValue("mainWindowState", saveState());saveState() 返回一个 QByteArray,包含 所有停靠窗口和工具栏的状态。QSettings 用于存储数据…...
【mysql】记一次mysql服务挂了后的数据恢复过程
现象 服务器异常,导致mysql服务异常退出,重启后,校验redo log异常 说明 mysql服务是通过docker-compose启动的,serviceName是db磁盘挂载:/var/lib/mysql挂载到本地磁盘/data/mysql 处理过程 备份 查看磁盘挂载列表 docker …...
使用 LangChain 对接硅基流动(SiliconFlow)API:构建一个智能对话系统
文章目录 什么是硅基流动(SiliconFlow)?LangChain 简介在 LangChain 中对接硅基流动步骤 1:安装必要的库步骤 2:设置 API 密钥步骤 3:编写代码代码解析步骤 4:运行代码如何扩展和改进总结 在现代…...
K8s 证书认知(K8s Certificate Awareness)
K8s 证书认知 在谈起 Kubernetes 证书时,总感觉其涵盖的内容繁多,仿佛千头万绪,让人不知该从何处着手阐述。为了更好地理清思路,本文将对相关内容进行系统的梳理和记录。 1、证书及链路关系 Kubeadm部署的集群,K8s …...
iperf
iperf 是一个网络性能测试工具,用于测量TCP和UDP的网络带宽。-c 参数表示客户端模式,用于指定要连接的服务器地址。以下是一些常见的 iperf 客户端命令示例: 基本用法 iperf -c <server_ip> <server_ip>:服务器的IP…...
【FastAPI 使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序】
在本文中,我们将介绍如何使用 FastAPI和uvicorn来同时运行HTTP和HTTPS的 Python应用程序。 简介 FastAPI是一个高性能的Web框架,可以用于构建快速、可靠的API。它基于Python的类型提示和异步支持,使得开发者可以轻松地编写出安全且高效的代…...
Windows系统安装搭建悟空crm客户管理系统 教程
1、在安装悟空 CRM 之前,需要确保你的 Windows 系统上已经安装了以下软件: Web 服务器:推荐使用 Apache 或 Nginx,这里以 Nginx 为例。你可以使用集成环境套件如 XAMPP 来简化安装过程,它包含了 Nginx 、MySQL、PHP 等…...
使用API有效率地管理Dynadot域名,清除某一文件夹中域名的默认DNS设置
关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...
评估多智能体协作网络(MACNET)的性能:COT和AUTOGPT基线方法
评估多智能体协作网络(MACNET)的性能 方法选择:选择COT(思维链,Chain of Thought)、AUTOGPT等作为基线方法。 COT是一种通过在推理过程中生成中间推理步骤,来增强语言模型推理能力的方法,能让模型更好地处理复杂问题,比如在数学问题求解中,展示解题步骤。 AUTOGPT则是…...
(4/100)每日小游戏平台系列
新增一个点击反应速度测试! 点击反应速度测试是一款简单有趣的网页小游戏,旨在测试玩家的反应能力和专注度。通过随机高亮的颜色块,玩家需要快速点击正确的颜色,并在限定时间内挑战自己的反应速度。 📜 游戏规则 游戏开…...
Day42(补)【AI思考】-编译过程中语法分析及递归子程序分析法的系统性解析
文章目录 编译过程中语法分析及递归子程序分析法的系统性解析**一、总览:编译流程中的语法分析****1. 编译过程核心步骤** **二、语法分析的核心任务****1. 核心目标****2. 现实类比** **三、递归子程序分析法的本质****1. 方法分类****2. 递归子程序分析法的运作原…...
AcWing 190. 字串变换 --BFS-双向搜索
已知有两个字串 A, B 及一组字串变换的规则(至多 66 个规则): A1→B1 A2→B2 … 规则的含义为:在 A 中的子串 A1A1 可以变换为 B1、A2 可以变换为 B2…。 例如:A=abcd B=xyz 变换规则为: …...
visual studio导入cmake项目后打开无法删除和回车
通过Cmakelists.txt导入的项目做删除和回车无法响应,需要点击项目,然后选择配置项目就可以了...
【论文笔记】ZeroGS:扩展Spann3R+GS+pose估计
spann3r是利用dust3r做了增量式的点云重建,这里zeroGS在前者的基础上,进行了增量式的GS重建以及进行了pose的联合优化,这是一篇dust3r与GS结合的具有启发意义的工作。 abstract NeRF和3DGS是重建和渲染逼真图像的流行技术。然而,…...
Vue2中常用指令
文章目录 Vue2中常用指令1. v-text 动态渲染纯文本内容1. 作用2. 基本用法3. 示例4. 注意事项 2. v-html 动态渲染 HTML 内容1. 作用2. 基本用法3. 示例4. 注意事项 3. v-bind 动态绑定 HTML 属性1. 作用2. 基本用法3. 示例4. 注意事项5. 绑定class属性的用法6. 绑定style属性的…...
09-轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 方法一:使用额外数组 function rotate(nums: number[], k: number): void {const n nums.length;k k % n; // 处理 k 大于数组长度的情况const newNums new A…...
本地Deepseek-r1:7b模型集成到Google网页中对话
本地Deepseek-r1:7b网页对话 基于上一篇本地部署的Deepseek-r1:7b,使用黑窗口对话不方便,现在将本地模型通过插件集成到Google浏览器中 安装Google插件 在Chrome应用商店中搜索page assis 直接添加至Chrome 修改一下语言 RAG设置本地运行的模型&#…...
算法——结合实例了解广度优先搜索(BFS)搜索
一、广度优先搜索初印象 想象一下,你身处一座陌生的城市,想要从当前位置前往某个景点,你打开手机上的地图导航软件,输入目的地后,导航软件会迅速规划出一条最短路线。这背后,就可能运用到了广度优先搜索&am…...
2025年3月营销灵感日历
2025年的第一场营销大战已经拉开帷幕了! 三月可是全年最值钱的营销黄金月——妇女节、植树节、315消费者日三大爆点连击,还有春分、睡眠日、世界诗歌日等20隐藏流量密码。 道叔连夜扒了18个行业数据,整理了这份《2025年3月营销灵感日历》&a…...
【认证授权FAQ】SSL/TLS证书过期导致的CLS认证失败
问题现象 问题分析 属于Agent操作系统的根认证机构过期问题,需要下载CA然后在系统安装。 DigiCert根证书和中间证书将在未来几年过期,一旦证书过期,基于证书颁发的SSL/TLS证书将不再信任,导致网站无法HTTPs访问。需要迁移到新的根…...
飞书专栏-TEE文档
CSDN学院课程连接:https://edu.csdn.net/course/detail/39573...
自己部署 DeepSeek 助力 Vue 开发:打造丝滑的时间线(Timeline )
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 自己…...
机器学习:集成学习和随机森林
集成学习 集成学习通过构建并合并多个模型来完成学习,从而获得比单一学习模型更显著优越的泛化能力,集成学习就是利用模型的"集体智慧",提升预测的准确率,根据单个模型方式,集成学习可分为两大类: 个体之间存在强依赖关系,其代表为Boosting算法个体之间不存在强依赖…...