数据结构域算法系列之二 贪婪算法和人生规划

前几天和苯螃蟹聊天,谈到对未来的规划。螃蟹说自己要在5年以后做到像某大牛那样熟知一切专业知识并且做到写文章信手拈来。说完自己的,就来问我“5年内的职业规划是什么?”我其实是那种平时想事情根本不过脑子的人,怎么会整天没事琢磨5年规划?于是我老实告诉她:“我没有5年规划,我觉得只要做好自己遇到的每一件事,就自然能够通向最好的结果。”

苯螃蟹听了以后大惊:“你怎么能够没有规划呢?!”

难怪苯螃蟹会惊讶万分。因为是我告诉了她读者文摘上那个关于怎样规划自己的人生成为画家的故事,还举一反三了怎样成为百万富婆的故事来加深印象。现在我又告诉她,我说了那么多,骗她相信规划人生的妙用,其实自己是不承认的了!但是我确实是觉得5年规划是没有用的。于是我又花费了很多口舌来向她描述APR用到的一种算法:“贪婪算法”,以实例来说明自己的观点。大概的意思就是,5年规划的目的看起来很明确,但是需要做无数存在变数的事情才能抵达最终的目的。每做一件事情的时候都存在选择,与最终目的间隔5年时间的我们永远也不知道每一个细小选择背后的路到底通向哪里。那么与其在迷失方向的森林里朝着自以为是的方向前进,不如选择去做目光所及之处的最重要的事情。当然诸葛亮的目光会亮一些,猪哥俩的目光暗淡一些。

其实我确实是那种平时脑子里什么也没有的人,做事情凭直觉的居多。不过我想这应该不是一种返祖现象。当有人问我这些我自己从来也不想的东东的时候,我就会按照当时的语境现编一个出来。因为几十年的生活告诉我,要是我告诉人家我没想法,那人家要不以为我是个傻子就会以为我看不起他。至于我自己到底相信什么说法,那个真是鬼知道了。我都不会去想,又怎么知道自己是怎么想的?但是苯螃蟹的的确确是一个意志坚定的人。尽管我把贪婪算法说的天花乱坠,她还是坚信5年规划的妙用,以及一定要有一个目的存在才能有发展这个道理。看来只能等5年以后见分晓了。看到时候第一个5年计划完成的时候,绵羊家姓羊还是姓蟹,就知道了。哈哈。不过说实话,我高度怀疑,苯螃蟹这么相信
5年规划的妙用,是我上回讲如何嫁给百万富翁的时候超水平发挥了。

##########我是分隔线##########

参考文献1:

故事大概是这样的。一个人问自己的朋友怎么在5年能够成为能够谋生的有名的画家。朋友告诉他,要在5年后成为画家,并且能够谋生,第4年的时候应该已经卖出了第一幅画,并且有很多作品在画廊里办画展了;第3年的时候应该已经有很多完成的画作了,并且有一些画廊的朋友;那么第2年的时候应该已经掌握了绘画艺术,在进行艺术创作了;为了达成第二年的目的,现在就应该辞职,搬到艺术家聚居区去,报名艺术学院学习绘画了。为了让苯螃蟹能够深入理解,俺还特意举一反三的给苯螃蟹假设了怎样在5年以内成为百万富婆的人生规划。

如果5年后要成为百万富婆,最简捷的方式就是嫁给百万富翁。

那么在第4年半的时候一定会有一个百万富翁结婚对象,并每天用各种方式接近目标;第4年的时候你要用自己的魅力和气质来结识百万富翁,并得到几个不错的候选;如果要结识百万富翁的话,那么在第3年的时候应该在百万富翁出入的地方出入,当然在那里打工的也是可以;那么第2年的时候应该已经在百万富翁出入的会所和俱乐部打工了,而且不能是刷盘子的工作;为了提高命中率和回头率,那么在第1年的时候应该去一家女子学校学习礼仪、形体、文秘,还要兼修艺术和音乐,以提升魅力和气质;那么现在就应该好好努力工作,攒够去女子学校的学费。苯螃蟹听完这个故事以后深以为然,还特意把这两个故事都记载在自己的BLOG上。

##########我是分隔线##########

参考文献三2:

算法非我所长。贪婪算法的大概意思就是,需要解决一个需要巨大运算量来求解的问题的时候,不费心费力去寻找最优解,而是采用逐步构造最优解的方法。在每个阶段,都作出一个看上去最优的决策(在一定的标准下)。作出贪婪决策的依据称为贪婪准则。决策一旦作出,就不可再更改。贪婪算法通过逐步逼近的方法来的得到解,不一定是最优解,但总是很快找到一个解决方法。这个算法在IC
design中可以用来解决自动布线中的最短路径问题:在一大堆点中,从某一个点出发,用最短的线把这一堆点串起来。

时间: 2024-10-06 06:52:47

数据结构域算法系列之二 贪婪算法和人生规划的相关文章

算法系列之二十三:离散傅立叶变换之音频播放与频谱显示

算法系列之二十三:离散傅立叶变换之音频播放与频谱显示 算法系列之二十三离散傅立叶变换之音频播放与频谱显示 导语 什么是频谱 1 频谱的原理 2 频谱的选择 3 频谱的计算 显示动态频谱 1 实现方法 2 杂项说明 结果展示 导语 频谱和均衡器,几乎是媒体播放程序的必备物件,没有这两个功能的媒体播放程序会被认为不够专业,现在主流的播放器都具备这两个功能,foobar 2000的十八段均衡器就曾经让很多人着迷.在上一篇对离散傅立叶变换介绍的基础上,本篇就进一步介绍一下频谱是怎么回事儿,下一篇继续介绍

[算法系列之二十四]后缀树(Suffix Tree)

之前有篇文章([算法系列之二十]字典树(Trie))我们详细的介绍了字典树.有了这些基础我们就能更好的理解后缀树了. 一 引言 模式匹配问题 给定一个文本text[0-n-1], 和一个模式串 pattern[0-m-1],写一个函数 search(char pattern[], char text[]), 打印出pattern在text中出现的所有位置(n > m). 这个问题已经有两个经典的算法:KMP算法 ,有限自动机,前者是对模式串pattern做预处理,后者是对待查证文本text做预处

白话经典算法系列之二 直接插入排序的三种实现

分类: 白话经典算法系列 2011-08-06 19:27 52070人阅读 评论(58) 收藏 举报 算法 直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止. 设数组为a[0…n-1]. 1.      初始时,a[0]自成1个有序区,无序区为a[1..n-1].令i=1 2.      将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间. 3.      i+

算法系列之二十四:离散傅立叶变换之音频播放与均衡器

导语 在算法系列的第二十二篇,我们介绍了离散傅立叶变换算法的实现,将时域的音频信号转换到频域进行分析,获取拨号音频的频率特征.这一篇我们将介绍一种频域均衡器的实现方法,所谓的频域均衡器,就是在频域信号的基础上对音频数据进行调整,然后再将频域信号转换成时域信号在回放设备上播放,从而达到音色调节的目的.将频域信号转换成时域信号的算法,就是离散傅立叶逆变换算法. 1 离散傅立叶逆变换 有从时域转换到频域的方法,就必然有从频域转换到时域的方法,相对于离散傅里叶变换,这个反向转换就是离散傅里叶逆变换(ID

[算法系列之二十]字典树(Trie)

一 概述 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计. 二 优点 利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高. 三 性质 (1)根节点不包含字符,除根节点外每一个节点都只包含一个字符: (2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串: (3)每个节点的所有子节点包含的字符都不相同. 单词列表为"apps&

[算法系列之二十六]字符串匹配之KMP算法

一 简介 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的. 二 基于部分匹配表的KMP算法 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含搜索串"ABCDABD"? 步骤1:字符串"BBC ABC

[算法系列之二十二]包含T全部元素的最小子窗口

题目描述 给定一个包含一系列字符的集合T和字符串S,请在字符串S中找到一个最小的窗口,这个窗口中必须包含T中的所有字符. 例如, S = "ADOBECODEBANC" T = "ABC" 最小窗口是"BANC" 分析 这是一个有趣的问题,这个有趣的问题有多种方法来解决,最好的方法是非常简单,美丽的. 在这篇文章中,我首先说明了一个方法,是我第一次遇见这个问题时想到的.我的第一个方法有点复杂,同时也不是最好的解决方案(时间复杂度为O(NlgM))

数据结构与算法系列研究二——栈和队列

栈和队列的相关问题分析 一.栈和队列定义 栈和队列是两种重要的数据结构.从结构特性角度看,栈和队列也是线性表,其特殊性在于它们的基本操作是线性表的子集,是操作受限的线性表,可称为限定性的数据结构:从数据类型角度看,其操作规则与线性表大不相同,是完全不同于线性表的抽象数据类型.                    图1 栈的结构                                                 图2 队列的结构   1.1.栈是限定在表的一端进行插入和删除操作的线性

[算法系列之二十八]并查集(不相交集合)

一 概述 并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题. 有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构: Find:确定元素属于哪一个子集.它可以被用来确定两个元素是否属于同一子集. Union:将两个子集合并成同一个集合. 因为它支持这两种操作,一个不相交集也常被称为联合-查找数据结构(union-find data structur