贪心算法(入门)字典序最小问题&最小覆盖问题

本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法。编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习)。

字典序最小问题(Best Cow Line, POJ3617)

给定长度为N的字符串S,构造一个新字符串T:

每一步从S的头部或者尾部删除一个字符,加到T的尾部。

要求:T的字典序(在字典中的位置,也就是字母排序)尽可能的小。

例如:

S= “TGH”

T=“HELLO”

1. 如果取S的头字符:

S= “GH”

T=“HELLOT”

1. 如果取S的尾字符:

S= “TG”

T=“HELLOH”

编程技巧:定义2个变量,一个指向数组头,一个指向数组尾部,然后向数组中间遍历。也就是数组中的双指针技巧。


最小覆盖问题( Saruman's Army POJ 3069)

直线上有N个点,从这N个点中选取若干个作为圆心,画半径为R的圆。我们需要选取最少的点, 同时让圆覆盖所有N个点。

解决问题的策略也是贪心算法。


贪心算法的时代局限

假如你穿越到仙界,找到仙丹(重1克,价值150元),仙草(重2克,价值200元),和灵石(重4克,价值300元),可惜纳戒的容量有限,只能装4克仙物。你该如何取舍呢?

最简单的办法是暴力求解:尝试各种可能的组合,找出价值最高的一个。这里总共有3种物品,有种组合,如果有4件物品,就需要计算种组合,如果有100种物品,即使我们每秒可以计算1万种组合,也需要计算年。暴力解法显然行不通,这时候贪心算法往往能得到比较满意的解答。

贪心算法的核心是:活在当下。每一步都选当前所见最优秀的解,也就是局部最优解。这里的贪心策略是每次都选价值最大的物品:首先把最值钱的灵石塞进纳戒,现在纳戒装满了。完美往往是优秀的敌人,贪心算法没有找到最优解:走私仙草和仙丹,价值是350元。(摘自俺的《共演化,一种新的世界观》)

(0)

相关推荐

  • 算法创作 | 冒泡排序问题解决方法

    问题描述问题:当需要将一组乱序的数据排序时应该如何解决?示例:此程序每一次输入一组乱序的数据后,会输出一组排好顺序的从小到大(或从大到小)的数据.输入:[64,34,25,12,22,11,90]输出 ...

  • ​LeetCode刷题实战53:最大子序和

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • 经典动态规划:0-1 背包问题

    前言 经过前面三篇动态规划文章的介绍,相信大家对动态规划.分治.贪心有了充分的理解,对动态规划的 3 个核心问题.其本质也有了了解. 纸上得来终觉浅,绝知此事要躬行. 那么今天开始我们来聊聊具体的那些 ...

  • 贪心算法简介

    贪婪算法 贪心算法(Greedy Algorithm) 简介贪心算法,又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最 ...

  • 小白都能懂的推荐算法入门(三),FM、类别特征以及Embedding

    大家好,上一期文章我们聊了FM模型在推荐系统当中起到的作用,以及它的一些缺点. 今天我们继续来聊FM,不过不是单纯聊FM的原理了,而是聊聊更深层次的方法论,以及FM家族的一些改进策略. Embeddi ...

  • “EDA算法”入门课程与书籍推荐

    作者:西南交通大学研究生导师邸志雄博士. 入门课程与书籍推荐之"EDA算法" --写给对EDA算法开发感兴趣的同学 注:微信公众号不支持非公众号链接,只能把网址附上,不能点击跳转, ...

  • 嵌入式必会!C语言最常用的贪心算法就这么被攻略了

    嵌入式必会!C语言最常用的贪心算法就这么被攻略了

  • 理解贪心算法

    从前有一只鹅,一天可以下两个金蛋,但是直接杀了他可以拿到二十个金蛋. 问在21天内拿到尽量多的金蛋? 动态规划..前20天不杀,最后一天杀.40个 贪心..第一天下蛋,得到一个金蛋 第一天杀,得到20 ...

  • 什么是算法?如何学习算法?算法入门的学习路径

    什么是算法? 有一个很著名的公式 "程序=数据结构 算法". 曾经跟朋友吃饭的时候我问他什么是算法,他说算法嘛,就是一套方法,需要的时候拿过来,套用就可以,我吐槽他,他说的是小学数 ...

  • 算法面试题一:排序算法及贪心算法

    这里介绍排序算法及贪心算法的个人解决方法 题目一:数组排序 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 示例 1: 给定数组 nums = ...

  • 贪心算法:买卖股票的最佳时机II

    贪心有时候比动态规划更巧妙,更好用! 通知:一些录友基础比较薄弱,不知道从哪里开始刷题.可以看一下公众号左下角的「算法汇总」,「算法汇总」已经把题目顺序编排好了,这是全网最详细的刷题顺序了,方便录友们 ...

  • 最全Python算法入门

    本文经AI新媒体量子位(ID:QbitAI)授权转载 问耕 发自 凹非寺 [导读]Github上超过6.8万星标:最全算法及Python实现.该项目的算法包括排序.搜索等经典算法,描述较为详细,对算法 ...