首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

贪心算法问题-LeetCode 55、45(贪心算法,跳跃问题

贪心算法问题:LeetCode #55 #45 1 编程题 【LeetCode #55】跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置。...算法原理: 遍历整个nums数组,每次计算从i位置的最大可能到达的距离,然后依次更新这个最大值,如果最大值大于nums的大小nums.size(),那么就返回true, 否则返回false....这就是正常人取求解这个问题的思路,很容易想到的!...说明: 假设你总是可以到达数组的最后一个位置 算法原理: 由于题目中规定总能到达数组的最后一个位置,因此我们在遍历数组时每次都要去找最大的跳跃位置,只有到达了这个最远的边界end,我们才让step进行自加

1.3K60

活动安排问题--贪心算法

活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。该问题要求高效地安排一系列争用某一公共资源的活动。...贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。   ...也就是说,该算法贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。   此算法的效率极高。...贪心算法并不总能求得问题的整体最优解。但对于活动安排问题贪心算法却总能求得的整体最优解,即它最终所确定的相容活动集合A的规模最大。这个结论可以用数学归纳法证明。...A[i] = true; j=i; } else A[i] = false; } } 应用实例: 问题描述

2.7K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    贪心算法之背包问题

    贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。...贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。...完全背包问题:给定n个物品和一个容量为C的背包,物品i的重量是Wi,其价值为Vi,背包问题是如何选择入背包的物品,使得装入背包的物品的总价值最大,与0-1背包的区别是,在完全背包问题中,可以将物品的一部分装入背包...设计算法的思路很简单,计算物品的单位价值,然后尽可能多的将单位重量价值高的物品放入背包中。...python实现代码如下: 1 # coding=gbk 2 # 完全背包问题贪心算法 3 import time 4 __author__ = 'ice' 5 6 7 class

    1.1K60

    贪心算法(集合覆盖问题)

    首先来看一个集合覆盖问题: 假如存在下面需要付费的广播台,以及广播台信号可以覆盖的地区,如何选择最少的广播台,让所有地区都可以接收到信号?...这个问题就是经典的用贪心算法求解的问题贪心算法是指在每一步选择中都采取最优的策略,从而希望能够导致结果是最优的一种算法贪心算法所得到的结果并不一定是最优的解,但都是相对接近最优解的结果。...但是可以使用贪心算法,提高效率。...贪心算法步骤如下: 遍历所有的广播台,找到一个包含了最多当前还未覆盖地区的广播台; 将这个广播台存起来,想办法把该广播台覆盖的地区中下次选择时,用别的广播台代替; 重复上面的步骤直到覆盖了所有的地区。...三、代码实现: 将上面的问题用代码实现出来。

    1.2K20

    图论--最大团问题

    简单来说,极大团是增加任一顶点都不再符合定义的团,最大团是图中含顶点数最多的极大团,最大独立集是除去图中的团后的点集,而最大团问题就是在一个无向图中找出一个点数最多的完全图。...二、常用结论 1、最大团点的数量=补图中最大独立集点的数量 2、二分图中,最大独立集点的数量+最小覆盖点的数量=整个图点的数量 3、二分图中,最小覆盖点的数量=最大匹配的数量 4、图的染色问题中,最少需要的颜色的数量...=最大团点的数量 三、算法实现 毕竟是NP完全问题,所以具体使用,什么算法,区别不是很大,具体体现在剪枝上!...对于弦图来说,求最大团一般使用 MCS 算法,而对于一般图来说,常使用 Bron-Kerbosch 算法 【Bron-Kerbosch 算法】 Bron-Kerbosch 算法用于计算图中的最大的全连通分量...对于基础的算法,由于其递归搜索了所有情况,对其中有些不是最大团的也进行了搜索,效率不高,为了节省时间让算法更快的回溯,可以通过设定关键点来进行搜索。

    2.2K30

    贪心算法之区间调度问题

    什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高。...比如说一个算法问题使用暴力解法需要指数级时间,如果能使用动态规划消除重叠子问题,就可以降到多项式级别的时间,如果满足贪心选择性质,那么可以进一步降低时间复杂度,达到线性级别的。...然而,大部分问题都明显不具有贪心选择性质。比如打斗地主,对手出对儿三,按照贪心策略,你应该出尽可能小的牌刚好压制住对方,但现实情况我们甚至可能会出王炸。...这种情况就不能用贪心算法,而得使用动态规划解决,参见前文 动态规划解决博弈问题。 一、问题概述 言归正传,本文解决一个很经典的贪心算法问题 Interval Scheduling(区间调度问题)。...二、贪心解法 这个问题有许多看起来不错的解决思路,实际上都不能得到正确答案。比如说: 也许我们可以每次选择可选区间中开始最早的那个?

    1.1K10

    大团问题-分支限界

    问题描述:   给定无向图G=(V, E),其中V是非空集合,称为顶点集; E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。   ...G的最大团是指G中所含顶点数最多的团。   如果U∈V且对任意u,v∈U有(u, v)∈E,则称U是G的空子图。G的空子图U是G的独立集当且仅当U不包含在G的更大的空子图中。...特殊地,U是G的最大团当且仅当U是G'的最大独立集。...问题定义:   解空间树中结点类型:bbnode   活结点优先队列中元素类型为 CliqueNode(cn 表示与该节点相应的团的定点数,un表示结点为根的子树中的最大顶点树的上界。...LChild = ch; CliqueNode N; N.cn = cn; N.level = level; N.un = un; N.Insert(N); } 算法核心代码

    1.5K70

    算法笔记(0002) - 【贪心算法】活动安排问题

    算法笔记(0002) - 【贪心算法】活动安排问题 贪心算法 原理 在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。...贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。...能够用贪心算法求解的问题一般具有两个重要特性:贪心选择性质和最优子结构性质。 1、贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。...这是贪心算法可行的第一个基本要素。贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。...ACM–贪心算法–活动安排问题

    1.1K20

    贪心算法如何贪心

    这篇文章就是对于贪心算法的入门介绍 贪心算法 贪心算法(又称贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。...简单的说就是我们在问题处理中,将问题分解为很多步,然后在每一步的求解过程中,“贪婪”的选择最佳操作,并希望通过一系列的最优选择, 能够产生一个问题的(全局的)最优解 算法思路 贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行...最优子结构 当一个问题的最优解包含着它的子问题的最优解时,称此问题具有最优子结构性质。问题所具有的这个性质是该问题可用动态 规划算法贪心算法求解的一个关键特征。...如何选用 贪心算法并不能总求得问题的整体最优解。但对于某些问题,却总能求得整体最优解,这要看问题是什么了。...只要能满足贪心算法的两个性质: 贪心选择性质和最优子结构性质,贪心算法就可以出色地求出问题的整体最优解。即使某些问题贪心算法不能求得整体的最优解,贪心算法 也能求出大概的整体最优解。

    1.1K10

    使用贪心算法解决集合覆盖问题

    在《算法图解》里面有一个蛮有意思的小案例,背景是一个广播节目,要让全美的50个周的听众都能够听到,但是每个电台可能覆盖多个州,每在一个电台播出就需要一笔费用,所以就是从成本的角度来看,怎么尽可能在所有的州都播出...,这是一个典型的集合覆盖的问题,而且在我们的生活中算是比较典型。...比如我们先缩小范围,指定5个州,那么50个州也是同样的算法。...如何使用贪心算法呢,就是选择覆盖尽可能多的州的电台,然后逐步缩小范围。那么覆盖面广的州所对应的电台就优先被选中,依次类推。...当然贪心算法得到的不是精确的结果,即可能不是最优解,算是一种近似算法,能够基本得到的最优解,而且效率很高。

    1.1K20

    【趣学算法贪心算法、海盗古董装船问题

    14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!...文章目录 贪心本质 贪心选择 最优子结构 最优装载问题 sort函数 总结 贪心本质 一个贪心算法总是做出当前最好的选择,也就是说,它期望通过局部最优选择得到全局最优的解决方案。...——《算法导论》 贪心选择 贪心选择是指原问题的整体最优解可以通过一系列局部最优的选择得到,也就是先做出当前最优的选择,将原问题变为一个相似却规模更小的子问题,而后的每一步都是当前最优的选择。...最优子结构 最优子结构是指原问题的最优解包含子问题的最优解。如果原问题的最优解和子问题的最优解没有关系,则求解子问题没有意义,无法采用贪心算法。...3、按照贪心策略找出最优解。

    32420

    算法贪心算法

    贪心算法 概念解释 贪婪算法(贪心算法)是指在对问题求解的时候,每一步选择都采用最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。...贪心算法所得到的结果往往不是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。 贪心算法并没有固定的解发框架,算法的关键是贪心策略的选择,根据不用问题选择不同的策略。...解题思路: 用贪心算法的思想,每一步都用能用的最大纸币即可。...会提示找不开,这种情况下我们使用贪心算法得到的答案就不是最优解,因为我们一直在尝试用最大的纸币来尽可能的使用最少的张数来解决问题。这就不是最优的。 贪心算法没有固定的框架,关键是看你怎么选择。...这种情况就需要调整策略,甚至,就不适用贪心算法贪心算法是尽力找到近似的最优解,注重的是速度,不是精准度,并不是说一定能找到合适的解,或是一定能找到解 。 对应问题根据情况不同选择合适的算法解决。

    25530

    贪心算法

    贪心算法:分阶段的工作,在每个阶段做出当前最好的选择,从而希望得到结果是最好或最优的算法贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择,不能回退。...任务调度问题(简单) 这是一个经典简单的贪心问题,只是题目有点长需要认真读。解决这个问题,重点要想好贪心的策略: 阶段性:每个时间表选择哪一个任务。...贪心策略:根据“误时惩罚”对任务进行排序,优先排惩罚大的任务,如果这个时间点已经被占了,依次向前找,判断任务是否能安排?...阶段性:每个区间选择那两个点 贪心策略:   对于所有的区间按右端点从小到大排序。(根据右端点排序)   从第一个区间开始扫描是否覆盖了两个点?...56 */ 最近做了一些贪心算法的题,感觉贪心算法主要是根据问题的要求想出贪心策略,上面提到了没有涉及到什么数据结构和高精度的问题。所以用到最多的就是排序。

    53630

    【趣学算法】Day3 贪心算法——背包问题

    该篇文章收录专栏—趣学算法 目录 题目描述 问题分析 算法设计  完美图解 算法详解 (1)确定合适的数据结构。 (2)对物体按单位重量价值进行排序。...(3)使用贪心算法求解问题 算法分析 ---- 题目描述         有n种物品,每种物品只有一个,第i种物品的重量为 wi,价值为 vi,背包的容量为 w,物品可以分割。...因此,我们应采用第三种贪心策略——每次从剩下的物品中选单位重量价值最大的物品。 算法设计  (1)确定合适的数据结构并初始化。...return a.p > b.p; // 指定按照物品的单位重量价值进行降序排列 } sort(s, s + n, cmp); //前两个参数分别为待排序数组的首地址和尾地址,cmp为比较函数 (3)使用贪心算法求解问题...0.0; //sum表示已经装入物品的价值之和 double cleft = w; //背包的剩余容量 for(int i = 0; i < n; i++) { //是用贪心算法求解问题

    1.1K30
    领券