美文网首页
一个简单的贪心算法问题

一个简单的贪心算法问题

作者: 问问你是谁 | 来源:发表于2020-02-24 10:30 被阅读0次

        什么是贪心算法?先抄一段定义吧~

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法有很多经典的应用,比如霍夫曼编码(Huffman Coding)、Prim 和 Kruskal 最小生成树算法、还有 Dijkstra 单源最短路径算法等等。

        这里简单介绍一个用贪心算法解决邮局位置的问题。

题目是这样的:

在一条街上有 n 所房子,H[i] (1 ≤ i ≤ n) 是第 i 所房子离街道起点处的距离(以米为单位),假定 H[1] < H[2] < · · · < H[n]。目前该街道上还没有一所邮局,现计划新建若干所邮局,使得每所房子到最近的邮局距离在 100 米以内。试设计一个时间复杂度为 O(n) 的算法,计算出新建邮局的位置,即每所新建邮局离街道起点处的距离 P[j](1 ≤ j ≤ m),同时确保新建邮局个数 m 最小。

贪心算法解题思路:

  1. 确定第一所邮局位置应为 P[1] = H[1] + 100;
  2. 从 H[2] 开始检查每个 H[i],若 H[i] > P[m] + 100,则 m 增 1,P[m] = H[i] + 100,否则继续检查下一所房子位置 H[i + 1];
  3. 如果 P[m] > H[n],则令 P[m] = H[n]

伪代码:

PostOfficePos(H[], n) {
    P[1] = H[1] + 100; 
    m = 1;
    for i = 2 to n {
        if H[i] > P[m] + 100 then
        m = m + 1; 
        P[m] = H[i] + 100; 
    }
    if P[m] > H[n] then P[m] = H[n];
    return (P, m);  
}

相关文章

  • 【算法打卡60天】Day29贪心算法:如何用贪心算法实现Huff

    Day29学习内容 :贪心算法:如何用贪心算法实现Huffman压缩编码? 1.如何理解贪心算法?贪心算法解决问题...

  • 递归详解

    ----------- 首先说明一个问题,简单阐述一下递归,分治算法,动态规划,贪心算法这几个东西的区别和联系,心...

  • 算法策略的总结

    策略是面向问题的,算法是面向实现的。 一、不同算法策略特点小结 1、贪心策略 贪心策略一方面是求解过程比较简单的...

  • 一个简单的贪心算法问题

    什么是贪心算法?先抄一段定义吧~ 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也...

  • 模拟退火

    模拟退火 一:概括1.爬山算法所谓的爬山算法实际上就是简单的贪心算法,贪心算法通过从当前解的临近空间选择一个最优的...

  • 只需9步,直接拿下贪心算法

    今天为大家分享的是贪心算法。 贪心算法:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选...

  • 可用贪心算法解决的几个基本问题

    可用贪心算法解决的几个基本问题 关键:看问题有没有贪心选择性质和最优子结构性质。有些问题看似是可以用贪心算法,但是...

  • 算法理论 | 贪心算法

    贪心算法 贪心算法,又称贪婪算法(Greedy Algorithm),是指在对问题求解时,总是做出在当前看来是最好...

  • GREEDY ALGORITHM

    贪心算法原理 贪心算法以动态规划方法为基础,区别于贪心算法在每一次做出贪心选择后,子问题之一为空,下一步只需继续分...

  • (三) 贪心算法

    # 引例 —— 钱币找零问题 贪心算法的思想非常简单且算法效率很高,在一些问题的解决上有着明显的优势。 假设有3种...

网友评论

      本文标题:一个简单的贪心算法问题

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