1、贪心的定义

  贪心算法是什么意思?举个例子就很清楚了:现在你有一个能装4斤苹果的袋子,苹果有两种,一种3斤一个,一种2斤一个,怎么装才能得到最多苹果?当然我们人考虑的话当然是拿两个2斤的苹果,就刚好装满了,但是如果按贪心算法拿的话,首先就要把最重的苹果拿下(是不是很符合贪心两个字?),但并没有得到最多苹果。

  贪心算法在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

2、贪心的思想

1. 建立数学模型来描述问题;

2. 把求解的问题分成若干个子问题;

3. .对每一子问题求解,得到子问题的局部最优解;

4. 把子问题的解局部最优解合成原来解问题的一个解。

3、贪心的要素

(1)贪心选择

  什么叫贪心选择?从字义上就是贪心也就是目光短线。贪图眼前利益。在算法中就是仅仅依据当前已有的信息就做出选择,并且以后都不会改变这次选择。(这是和动态规划法的主要差别)。

  所以对于一个详细问题。要确定它是否具有贪心选择性质,必须证明每做一步贪心选择是否终于导致问题的总体最优解。
  
(2)最优子结构

  当一个问题的最优解包括其子问题的最优解时,称此问题具有最优子结构性质。

  这个性质和动态规划法的一样,最优子结构性质是可用动态规划算法或贪心算法求解的关键特征。

4、贪心算法的典型应用

  背包问题(物体可切分时的0-1背包问题),Huffman编码,单源最短路径,Prim算法,Kruskal算法等都是贪心算法的经典应用。

  下面是HackerRank中买房问题的demo:

/*
Lauren has a chart of distinct projected prices for a house over the next n years,
where the price of the house in the  year is i.
She wants to purchase and resell the house at a minimal loss according to the following rules:The house cannot be sold at a price greater than or equal to the price it was purchased at
(i.e., it must be resold at a loss).
The house cannot be resold within the same year it was purchased.Find and print the minimum amount of money Lauren must lose if she buys the house and resells
it within the next  years.Note: It's guaranteed that a valid answer exists.Sample Input 1
5
20 7 8 2 5Sample Output 1
2buys the house in year 2, sells it in year 5(7-5=2).
*/#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <utility>
using namespace std;int main(int argc, char const *argv[])
{using llt = long long int;int n;cin >> n;vector<pair<llt, llt>> vec;for (llt i = 0; i < n; ++i){llt j;cin >> j;vec.push_back(make_pair(j, i));}llt y = 100000000;//把房价排序sort(vec.rbegin(), vec.rend());for (llt i = 0; i < n - 1; ++i){if (vec[i].first - vec[i + 1].first < y && vec[i].second < vec[i + 1].second)y = vec[i].first - vec[i + 1].first;}cout << y;return 0;
}

经典算法之贪心(Greedy)相关推荐

  1. 第七讲. 经典算法之贪心选择

    第七讲. 经典算法之贪心选择 1. 简介 2. 从一个简单例题开始 3. 一个稍难的题目 4. 最重要贪心算法(可作模板) 4.1 最小生成树 4.2 最短路 5. 最后说几句 1. 简介 贪心算法, ...

  2. c语言贪心算法背包问题,[算法]背包问题的经典算法和贪心算法解答,C语言实现...

    /*背包问题之经典解法和贪心算法 *code cg *2008 12 24 *调试环境TC ,devC++ */ #include "stdio.h" #include " ...

  3. 五大经典算法之四贪心算法

    基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解.贪心算法没有固定的算法框架,算法设计的关键是贪心 ...

  4. java经典算法思想 贪心_这几道经典例题帮你轻松搞透贪心算法

    贪心算法概念叙述 运用贪心算法求解问题时,会将问题分为若干个子问题,可以将其想象成俄罗斯套娃,利用贪心的原则从内向外依次求出当前子问题的最优解,也就是该算法不会直接从整体考虑问题,而是想要达到局部最优 ...

  5. java贪心算法几个经典例子_经典算法思想5——贪心(greedy algorithm)

    贪心算法,是指在对问题求解时,总是做出再当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是某种意义上的局部最优解. 贪心算法没有固定算法框架,算法设计的关键是贪心策略的选择.必须注 ...

  6. 最短路径算法(一) Dijkstra算法(贪心算法)

    Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题. 其基本原理是 ...

  7. python贪心算法最短路径_dijkstra算法(贪心算法)——解决最短路径问题

    最短路径 给定一张带权图和其中的一个点(作为源点),求源点到其余顶点的最短路径 基本思想 1)源点u,所有顶点的集合V,集合S(S中存有的顶点,他们到源点的最短路径已经确定,源点u默认在S中),集合V ...

  8. 数据结构与算法之美(十四)算法思想——贪心算法

    目录 贪心算法介绍 贪心算法例子 1. 背包 2. 分糖果 3. 钱币找零 4. 区间覆盖 5. 区间覆盖的延伸:任务调度.教师排课 贪心算法经典应用 1. 霍夫曼编码 2. 最小生成树算法 3. 最 ...

  9. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

最新文章

  1. android 自定义天气特效,《Android自定义控件》WindMillView,仿华为天气风车效果
  2. MvvmLight学习心得三
  3. html5 职工入职后台管理系统_ChemCMS是一款基于GO+PHP+MYSQL+HTML5构建的化学内容管理系统
  4. python的常见矩阵除法_Numpy矩阵除法返回所有零
  5. 眼控科技 实习算法工程师面试
  6. html抓取成xml,使用XML包将html表抓取到R数据帧中
  7. 寻找最大的k个数问题
  8. linux互传文件nc命令
  9. 递归法:实现指数型枚举(二叉树递归)
  10. 遍历数组的两种for循环方式以及一种Arrays方式
  11. 一键导出所有微信联系人的小工具,搞私域、搞网销客户交接时可能可以用到,【微信通讯录抽水机】
  12. Vue项目demo汇总
  13. 空间面板数据模型及Stata实现
  14. ps怎么对比原图快捷键_PS图片调色常用快捷键,专为新手整理
  15. 如何修改鼠标指针的样式
  16. 水果店的售价应该怎么来定,水果店怎样确定价格
  17. 10019---层次选择器
  18. 特斯拉Tesla Model 3整体架构解析
  19. 手机连上wif显示无法连接服务器,打开exchange management shell无法连接到服务器
  20. xp usb android,windowsxp系统设置usb手机网络分享的方法

热门文章

  1. CSS实现多行文字两端对齐的效果
  2. 模仿百度“您要找的是不是:”提示功能
  3. FME的ESRI Geodatabase (MDB)格式介绍(一)
  4. html导航栏页面切换的js,js实现页面滚动切换导航栏/点击导航栏跳转到指定位置...
  5. 两会话文明 | 文明的行为,也是最美的风景
  6. Linux下打开chm文件
  7. 圣诞树代码(python)
  8. KITTI如何submit自己的模型效果
  9. Springboot项目install打包-某些输入文件使用了未经检查或不安全的操作。分析与解决
  10. 织梦dedecms 忘记管理员后台密码的解决技巧