美文网首页
贪婪算法-js

贪婪算法-js

作者: 疯狂吸猫 | 来源:发表于2020-04-20 01:26 被阅读0次

参考:算法分析与设计-贪婪心&动归

还在浪费时间学贪婪心算法么?告诉你三个不需要学习贪婪心算法的理由!

每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法

介绍:

贪婪算法是一种每一步选择中都采取在当前状态下最有利的选择,从而希望导致结果是最好或最优的算法

找钱例子:

题目:人民币面额为100元、50元、20元、10元、5元、2元、1元,现在每种数额都有无数多张。

输入需要找零的金额,请以最少的货币张数找零。

例子:

​ 输入:17

​ 输出:[10,5,2]

分析:以最少的货币张数找零,那么就要尽量先选择最大的面额进行找零。选择到一张面额之后,再对差额再此进行找零。

// 找零
function changeFund (num) {
  let money = [100, 50, 20, 10, 5, 2, 1]
  let pay = []
  while (num) {
    for (let i = 0; i < money.length; i++) {
      if (money[i] <= num) {
        pay.push(money[i])
        num -= money[i]
        break
      }
    }
  }
  return pay
}
console.log(changeFund(17))
console.log(changeFund(232))

贪婪的局限性:

贪婪算法是采取当前的最优解,希望求得在全局得最优解。但是局部最优解不一定能导致全局的最优解。

只有选择的贪婪策略具有无后效性,当前的选择、状态并不会影响到以后的状态。

比如上面找零的例子,[100, 50, 20, 10, 5, 2, 1]任意一张面额的金额大小都大于等于两张比他小的面额之和。

例如5> 2+1; 100=50+50;50>20+20

​ 假如人民币的面额为[10,7,5,3,1]那么找零12应选择[7,5]而不是以上算法找出的[10,1,1]

关于贪婪算法的局限性与贪婪心算法需要学到什么程度可以阅读此博客自行考虑。还在浪费时间学贪婪心算法么?告诉你三个不需要学习贪婪心算法的理由!

个人觉得还是有必要了解基础题型

相关文章

  • 贪婪算法-js

    参考:算法分析与设计-贪婪心&动归 还在浪费时间学贪婪心算法么?告诉你三个不需要学习贪婪心算法的理由! 每一步选择...

  • 代码小工蚁的#《算法图解》#学习笔记-C8贪婪算法

    代码小工蚁的#《算法图解》#学习笔记-C8贪婪算法C8 贪婪算法greedy algorithms 一、贪婪算法 ...

  • 贪婪、分治、回溯和动态规划,四种算法的比较

    贪婪算法 贪婪算法,也被称为“贪心算法”。贪婪算法分阶段地工作。在每一个阶段,都可以认为所作决定是好的,而不考虑将...

  • 读书笔记

    读书笔记/人生算法之无知、衰朽和贪婪 【标题】人生算法之无知、衰朽和贪婪 【书籍】人生算法 【01】人生算法之无知...

  • 贪婪算法

    1.贪婪算法: 每一步都采用当前局部的(这里是重点)最优的做法,最终得到全局最优解;这是一种完美算法,要找到最优的...

  • 贪婪算法

    3.集合覆盖问题 现在有个广播节目,需要让全美50个州的听众收听。每个广播台都覆盖特定的区域,不同广播台覆盖区域可...

  • 贪婪算法

    1.教室调度问题 一间教室的课程表如上所示,现在如果尽可能在这个教室上最多的课,需要怎么安排课程呢?由于课程之间有...

  • 贪婪算法

    贪婪算法(Greedy Algorithm)也叫算贪心法,贪婪法.它是一个遵循启发式解决问题的算法范式.它的核心思...

  • 贪婪算法

    贪婪算法:选择局部最优解达到全局最优 区间调度问题 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不...

  • 贪婪算法

    假设某节目要覆盖以下省份: 各个电视台的覆盖范围如下: 解决思路: step1: 选出一个覆盖了最多未覆盖省份的电...

网友评论

      本文标题:贪婪算法-js

      本文链接:https://www.haomeiwen.com/subject/ynjivhtx.html