一看就懂的贪心算法

别再死记硬背了!图解贪心算法:从排会议室到装轮船,一看就懂的思路解析 本文通过生活化场景和直观图解,深入浅出地解析贪心算法的核心思想与应用。从活动安排问题到最优装载问题,再到单源最短路问题,详细演示了贪心算法如何通过局部最优选择实现全局最优解,帮助读者轻松掌握这一精妙算法。 阅读详情

写在前面的话

今天我介绍的主题是贪心算法。这是相对比较容易的一种算法。我这里不给出定义,因为大家可以自行网络搜索。咱们直接看例子。

贪心算法,如果不用手动证明一个问题的数学性质的话,其实是比较简单的。看这样一个例子:假设有一个背包,其最大容量是50KG,现在有各种不同价值的液体,比方说,有水,其价值是10 每千克,共100KG;酒精,其价值是20 每千克,共30KG;有油,价值25每千克,共30KG。问什么样的方案才能使得背包里装的液体的总价值最大?显然,这是一道小学生都会的题目,拣贵的装呗。这谁不会。那就是把30KG油先装了,因为油最贵嘛,剩下20KG的容量装酒精,因为酒精比水贵。

好,那么,这个思维过程就是贪心:每一阶段做决策都找出当前条件下的最优解。当然这个问题,这种解法的正确性显而易见,贪心类的问题最难的地方在于正确性无法证明。这个我们先不管。毕竟我们不是在做算法研究,我们只要能用贪心去解决具体的编程问题就行了。

再看一个简单的例子。

在商店找零,比如说,售货员要找给你37块钱,那什么样的方案才是找钱的张数最少的方案呢?肯定是找回的零钱面值越大,最后的张数越少。所以我们可以使用贪心的方法来解决这个问题。先找一张20的,如果再找一张20的,那就超过37了,这不行,所以就再找一张10块的,然后是5块的和两张一块的。最终的方案就得到了,这也是一次典型的贪心计算方案。

排序

在贪心的思想的指导下,也设计了一种排序算法,这种算法被称为选择排序。排序的思想很简单。既然我的目标是把一堆数字从小到大排,那么我按阶段解决这个问题不就好了么?第一步找到最小的那个数把它放到第一位,第二步在剩下的所有数里再找最小的,把它放到第二位,依次类推。

public class ChooseSort implements  Sorter {
    public void sort(int[] arr) {
        int pivot, pos = -1;

        for (int i = 0; i < arr.length; i++) {
            pivot = Integer.MAX_VALUE;
            for (int j = i; j < arr.length; j++) {
                if (pivot > arr[j]) {
                    pivot = arr[j];
                    pos = j;
                }
            }
            arr[pos] = arr[i];
            arr[i] = pivot;
        }
    }
}

我们从第一趟迭代开始看,这时 i 为0,内部的那个循环,就是从 0 到数组的末尾找到数组中的最小值。然后把这个最小值与第 i 位,这里就是第 0 位,交换。这样,我们就把第一小的数放到数组的第0位了。

第二趟迭代呢,就把从第一位到数组末尾最小的数放到了数组的第1位。

这个过程不断地进行,直到完成 n 趟迭代。明显的,选择排序的时间复杂度是O(n^2)。

看,从算法设计的角度来看排序的问题,是不是感觉排序问题一下子就有章可循了。

五大常用算法入门(一)——贪心算法 文章目录1.贪心算法简介1.1 基本定义1.2 贪心算法案例3.贪心算法的基本思路2.贪心算法最优性证明2.1 贪心算法的前提2.2 最优子结构2.3 贪心算法与动态规划的区别3.贪心算法的经典问题3.1 近似解3.2 最优解参考资料 1.贪心算法简介 1.1 基本定义 在贪婪算法(greedy method) 中,我们要逐步构造一个最优解。每一步,我们都在一定的标准下,做出一个最优决策。做出决策... 阅读详情

相关推荐

贪心算法(一)

解决最优化问题的算法一般包含一系列的步骤,每一步都有若干的选择。对于很多最优化问题,只需要采用简单的贪心算法就可以解决,而不需要采用动态规划方法。贪心算法使所做的局部选择看起来都是当前最佳的,通过局部的最优化选择来产生全局最优解。本文将介绍贪心算法的理论基础和一些简单应用。 一般地,可以根据以下步骤来设计贪心算法: 将最优化问题转化为这样一个问题,即先做出选择,再解决剩下的一个子问题。 证明...

siqian-huang的博客 7070

贪心算法

前缀树一、贪心算法介绍二、贪心问题举例1、字符串连接 一、贪心算法介绍 贪心算法,也就是可以通过局部的最优得到全局最优,其证明很多时候是复杂的。 注意点: 很多贪心算法使用的时候需要进行排序,这个时候需要我们规定排序灯的规则,那么要保证规定的排序方式是有传递性的,也就是正确的 二、贪心问题举例 1、字符串连接 题目描述:给定一个字符串类型的数组strs,找一种拼接的方式,使得把所有的字符串拼起...

TRIE图之躲不开的病毒,三种实现方法 450

用AI生成React/Vue页面?实测Locofy等5款工具,教你选最适合的

本文深度评测了2024年五大AI生成前端页面工具,包括Locofy、Builder.io等,从代码质量、可视化编辑器成本到企业级落地方案进行全面分析。通过实测数据和实战案例,揭示如何利用AI生成技术高效创建React/Vue页面,提升开发效率并优化性能。

m5n6o7的博客 606

力扣---排序题目-- 贪心算法

贪心算法:是在求解的时候不考虑整体是否为最优解,只考虑当前情况,让当前为最优的解。 406. 根据身高重建队列 假设有打乱顺序的一群人站成一个队列,数组people表示队列中一些人的属性(不一定按顺序)。每个people[i] = [hi, ki]表示第i个人的身高为hi,前面正好有ki个身高大于或等于hi的人。 请你重新构造并返回输入数组people所表示的队列。返回的队列应该格式化为数组queue,其中queue[j] = [hj, kj]...

weixin_45063957的博客 653

一文搞懂深度学习:最全神经网络介绍

本文是深度学习系列文章的第二篇,我们将深入探讨各种类型的人工神经网络,探索它们独特的特性和应用。

2402_82802238的博客 2799

Ansys Electronics Desktop仿真——HFSS线圈寄生电阻,电感

Ansys Electronics Desktop仿真——HFSS线圈寄生电阻,电感

冲击10w 1万+

贪心算法——排序类

贪心算法——排序类

2302_77024013的博客 598

基于NB-IoT的智慧路灯监控系统(NB-IoT专栏—实战篇1:项目简介)

基于NB-IoT技术的城市道路智慧路灯监控系统,在每个照明节点上安装一个集成了NB-IoT模组的单灯控制器,单灯控制器再经运营商的网络,与路灯控制平台实现双向通信,路灯控制平台直接对每个灯进行控制,包括开关灯控制、光照检测、自动调节明暗、电耗分析等操作。

不脱发的程序猿 5万+

贪心算法(壹)

目录 ​ 简介 案例分析 选择排序 平衡字符串 ​ 买卖股票最佳时机 ​ 最大跳跃长度 简介 下面的简介可看可不看 ①贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 ②贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素。 ③当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。运用贪心.

花落因为花开过的博客 814

yolov26改进 | 融合改进篇 | 基于 MobileNetV4 和双向特征金字塔网络BiFPN的融合改进(全网独家首发)

本文介绍BiFPN与MobileNetV4融合改进的YOLOv26。许多模块单独使用能够涨点,但直接叠加后可能因功能重复、通道不匹配、尺度冲突而掉点,因此融合前必须理解各模块作用。MobileNetV4利用UIB与Mobile MQA构建轻量主干,提升特征提取能力;BiFPN通过可学习权重完成双向多尺度融合,强化大、中、小目标的信息交互。两者优化Backbone与Neck,功能互补、结构冲突较少。本文提供代码、配置、消融对比及Codex修改思路,MobileNetV4也可替换其他主干,便于组合实验与二次创新

Snu77的博客 239

Python与CAD系列基础篇(二)创建点和直线并修改样式

①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件。创建和编辑点和直线的方法,并演示如何修改它们的样式、颜色和线型。

weixin_43894929的博客 3036

数据结构中排序算法总结之一(贪心算法)

最近学习了数据结构中排序算法,总结出了是一种

1252

Python 爬虫实战:在房天下抓取房产信息,分析房价走势

通过本次 Python 爬虫实战,我们成功地从房天下爬取了房产信息,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分区域的房产数据,且未对房产的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多区域的房产数据,并深入分析房产的多媒体内容、用户行为模式等,为购房者和房地产从业者提供更有价值的数据支持。

u014481728的博客 1366

一看就懂的贪心算法,不懂打我

一看就懂的贪心算法,不懂打我 文章目录一看就懂的贪心算法,不懂打我贪心算法的概念在贪心中如何选择贪心例题题目:加工生产调度思路代码小结 贪心(贪婪)算法是一种非常神奇的算法,下面讲解一下: 贪心算法的概念 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的...

jerry20183的博客 987

c语言实现求一个矩阵特征值和特征向量

前言 求矩阵的特征值,主要是用的QR分解,在我的有一次博客里,我已经详细地给出了计算的过程,大家有兴趣可以去看下,经过几天的钻研,终于完成了整个的eig算法。下面我将把我的整个代码附上,有不懂的可以问我,欢迎一起讨论学习! 这是对上一次的修改版,上一次写的程序是在C++编译环境下编译的,所以放在c里面编译有些会出错。 最后,如果有不对的地方希望大...

qq_36417014的博客 2万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【js算法】贪心算法----跳跃游戏(一看就懂)

【思想 】 在对问题求解时,总是做出在当前看来是最好的选择。 也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解最优解 【题目】 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 【思路】 例如这样一个数组,我们需要判断的是,它的位置+它位置所对应的值是否等于数组的长度而已 [2,3,1,1,4] [3,2,1,0,4] var canJump = function(nums) { let k

qq_41409353的博客 1098

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

别再死记硬背了!图解贪心算法:从背包问题到区间覆盖,一看就懂

本文通过图解方式深入浅出地讲解贪心算法,从背包问题到区间覆盖,帮助读者直观理解其核心思想与应用场景。文章详细分析了贪心算法的适用条件、经典问题解法及与动态规划的对比,并提供了实战训练技巧和常见误区,适合算法初学者和面试备考者提升问题解决直觉。

weixin_42692935的博客 381

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

别再死记硬背了!图解贪心算法解决多机调度,一看就懂(从生活例子到代码)

本文通过快递员排班的生活实例,生动图解贪心算法在多机调度问题中的应用。从问题本质分析到Python代码实现,详细展示了如何用贪心策略优化任务分配,实现最短完成时间目标,并讨论了算法的适用条件和性能优化方案。

weixin_26938645的博客 222

【贪心算法】贪心算法一

【贪心算法】贪心算法一

fight_p的博客 2248

贪心算法详细讲解(附例题,一看就会)

概念 贪心算法(Greedy Alogorithm)又叫登山算法,它的根本思想是逐步到达山顶,即逐步获得最优解,是解决最优化问题时的一种简单但是适用范围有限的策略。 贪心算法没有固定的框架,算法设计的关键是贪婪策略的选择。贪心策略要无后向性,也就是说某状态以后的过程不会影响以前的状态,至于当前状态有关。 贪心算法是对某些求解最优解问题的最简单、最迅速的技术。某些问题的最优解可以通过一系列的最优的选择即贪心选择来达到。但局部最优并不总能获得整体最优解,但通常能获得近似最优解。 在每一部贪心选择中,只考虑当前对

qq_44398094的博客 2万+

贪心算法一

贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

AAlykk的博客 2459

【贪心算法】贪心算法

【贪心算法】贪心算法

fight_p的博客 1万+

【贪心算法】(一)贪心算法理论及基础习题

整理总结代码随想录贪心算法章节,介绍贪心算法的理论基础与思想,通过基础习题巩固贪心算法的核心思想,分析各题的局部最优解与全局最优解,同时引入一类存在两个维度的案例。

weixin_46216674的博客 1622
上一篇: 腾讯面试题:有了二叉查找树、平衡树为啥还需要红黑树?
下一篇: 删除排序数组中的重复项(I和 II)
dreamispossible
博客等级 码龄9年 265粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值