注册 登录
爱吱声 返回首页

gordon的个人空间 http://aswetalk.net/bbs/?663 [收藏] [复制] [分享] [RSS]

日志

成功者往往走更多的路—— 最短路径方法

热度 7已有 824 次阅读2013-6-28 11:36 | 成功者

       施一公在《优秀博士如何养成》一文的开头这么说,所有成功的科学家一定具有的共同点,就是他们必须付出大量的时间和心血。这是一条真理。实际上,无论社会上哪一种职业,要想成为本行业中的佼佼者,都必须付出比常人多的时间。

       这是一条真理,问题在于如何更聪明的去做

       你知道我的智力不是很好,总想找一个聪明人帮助一下。“功夫不负有心人”,俺在网上又找到一篇文章《程序算法与人生选择》,是一个叫 陈皓 的人写的,不过他的文章是讲选择的。

        但如果你知道如何去做选择,就知道如何更聪明的去做,这两种说法是等价的

       当我们在面对各种对选择的影响因子的时候,如:城市,公司规模,公司性质,薪水,项目,户口,技术,方向,眼界…… 你总会发现,你会在几个公司中纠结一些东西,举几个例子:

    某网友和我说,他们去上海腾讯,因为腾讯的规模很大,但却发现薪水待遇没有豆瓣高(低的还不是一点),如果以后要换工作的话,起薪点直接关系到了以后的高工资。我说那就去豆瓣吧,他说豆瓣在北京,污染那么严重,又没有户口,生存环境不好。我说去腾讯吧,他说腾讯最近组织调整,不稳定。我说那就去豆瓣吧,慢公司,发展很稳当。他说,豆瓣的盈利不清楚,而且用Python,自己不喜欢。我说,那就去腾讯吧,……

    还有一网友和我说,他想回老家,因为老家的人脉关系比较好,能混得好。但又想留在大城市,因为大城市可以开眼界。

    另一网友和我说,他想进外企,练练英语,开开眼界,但是又怕在外企里当个螺丝钉,想法得不到实施。朋友拉他去创业,觉得创业挺好的,锻炼大,但是朋友做的那个不知道能不能做好。

    还有一些朋友问题我应该学什么技术?不应该学什么技术?或是怎么学会学得最快,技术的路径应该是什么?有的说只做后端不做前端,有的说,只做算法研究,不做工程,等等,等等。因为他们觉得人生有限,术业有专攻。

    等等,等等……

    那么我们应该怎么做选择呢

(1)排序算法

    你不可能要所有的东西,所以你只能要你最重要的东西,你要知道什么东西最重要,你就需要对你心内的那些欲望和抱负有清楚的认识,不然,你就会在纠结中度过。

    所以,在选择中纠结的人有必要参考一下排序算法。

    首先,你最需要参考的就是“冒泡排序”——这种算法的思路就是每次冒泡出一个最大的数。所以,你有必要问问你自己,面对那些影响你选择的因子,如果你只能要一个的话,你会要哪个?而剩下的都可以放弃。于是,当你把最大的数,一个一个冒泡出来的时候,并用这个决策因子来过滤选项的时候,你就能比较容易地知道知道你应该选什么了。这个算法告诉我们,人的杂念越少,就越容易做出选择。

    好吧,可能你已茫然到了怎么比较两个决策因子的大小,比如:你分不清楚,工资>业务前景吗?业务前景>能力提升吗?所以你完全没有办法进行冒泡法。那你,你不妨参考一个“快速排序”的思路——这个算法告诉我们,我们一开始并不需要找到最大的数,我们只需要把你价值观中的某个标准拿出来,然后,把可以满足这个价值的放到右边,不能的放到左边去比如,你的标准是:工资大于5000元 并且 业务前景长于3年的公司,你可以用这个标准来过滤你的选项。然后,你可以再调整这个标准再继续递归下去。这个算法告诉我们,我们的选择标准越清晰,我们就越容易做出选择

    这是排序算法中最经典的两个算法了,相信你已烂熟于心中了。所以,我觉得你把这个算法应用于你的人生选择也应该不是什么问题。关于在于,你是否知道自己想要的是什么?

    排序算法的核心思想就是,让你帮助你认清自己最需要的是什么,认清自己最想要的是什么,然后根据这个去做选择。

(2)贪婪算法

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

对于人类来说,一般人在行为处事的时候都会使用到贪婪算法,

    比如在找零钱的时候,如果要找补36元,我们一般会按这样的顺序找钱:20元,10元,5元,1元。

    或者我们在过十字路口的时候,要从到对角线的那个街区时,我们也会使用贪婪算法——哪边的绿灯先亮了我们就先过到那边去,然后再转身90度等红灯再过街。

这样的例子有很多。对于选择中,大多数人都会选用贪婪算法,因为这是一个比较简单的算法,未来太复杂了,只能走一步看一步,在当前的状况下做出最利于自己的判断和选择即可。

    有的人会贪婪薪水,有的人会贪婪做的项目,有的人会贪婪业务,有的人会贪婪职位,有的人会贪婪自己的兴趣……这些都没什么问题。贪婪算法并没有错,虽然不是全局最优解,但其可以让你找到局部最优解或是次优解。其实,有次优解也不错了。贪婪算法基本上是一种急功近利的算法,但是并不代表这种算法不好,如果贪婪的是一种长远和持续,又未尝不可呢?。

(3)动态规划

    但是我们知道,对于大部分的问题,贪婪法通常都不能找出最优解,因为他们一般没有测试所有可能的解。因为贪婪算法是一种短视的行为,只会跟据当前的形式做判断,也就是过早做决定,因而没法达到最佳解。

    动态规划和贪婪算法的最大不同是,贪婪算法做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。

动态规划算法至少告诉我们两个事:

1)承前启后非常重要,当你准备去做遍历的时候,你的上次的经历不但能开启你以后的经历,而且还能为后面的经历所用。你的每一步都没有浪费。

2)是否可以回退也很重要。这意思是——如果你面前有两个选择,一个是A公司一个是B公司,如果今天你错失了B公司,那到你明天还能不能找回来?

比如说:你有两个offer,一个是Yahoo,一个是Baidu,上述的第一点会让我们思考,Yahoo和Baidu谁能给我们开启更大的平台?上述的第二点告诉我们,是进入Yahoo后如果没有选好,是否还能回退到Baidu公司?还是进入Baidu公司后能容易回退到Yahoo公司?

(4)Dijkstra最短路径

最短路径是一个贪婪算法 + 动态规划 的算法。相当经典。这个算法的大意如下:

    在初始化的时候,所有的结点都和我是无穷大,默认是达不到的。
    从离自己最近的结点开始贪婪。
    走过去,看看又能到达什么样的结点,计算并更新到所有目标点的距离。
    再贪婪与原点最短的结点,如此反复。

这个算法给我们带来了一些这样的启示:

       有朋友和我说过他想成为一个架构师,或是某技术领域的专家,并会踏踏实实的向这个目标前进,永不放弃。我还是鼓励了他,但我也告诉他了这个著名的算法,我说,这个算法告诉你,架构师或某领域的专家对你来说目前的距离是无穷大,他们放在心中,先看看你能够得着的东西。所谓踏实,并不是踏踏实实追求你的目标,而是踏踏实实把你够得着看得见的就在身边的东西干好。我还记得我刚参加工作,从老家出来的时候,从来没有想过要成为一个技术牛人,也从来没有想过我的博客会那么的有影响力,在做自己力所能及,看得见摸得着的事情,我就看见什么技术就学什么,学着学着就知道怎么学更轻松,怎么学更扎实,这也许就是我的最短路径

       有很多朋友问我要不要学C++,或是问我学Python还是学Ruby,是不是不用学前端,等等。这些朋友告诉我,他们不可能学习多个语言,学了 不用也就忘了,而且术业有专攻。这并没有什么不对的,只是我个人觉得,学习一个东西没有必要只有两种状态,一种是不学,另一种是精通。了解一个技术其实花 不了多少时间,我学C++的目的其实是为了更懂Java,学TCP/IP协议其实是为了更懂Socket编程,很多东西都是连通和相辅相成的,学好了C /C++/Unix/TCP等这些基础技术后,我发现到达别的技术路径一下缩短了(这就是为什么我用两天时间就可以了解Go语言的原因)。这就好像这个算法一样,算法效率不高,也许达到你的目标,你在一开始花了很长时间,遍历了很多地方,但是,这也许这就是你的最短路径

选择就是Trade-Off

    你根本没有办法能得到所有你想得到的东西,任何的选择都意味着放弃——当你要去获得一个东西的时候,你总是需要放弃一些东西。

    就象人们常说的那样,“年轻时,用命换钱;到老了,用钱换命。”你总是要用某种东西去交易某种东西。

    我们总是在用我们有的某种东西去交换另一种东西,所以,先有是最重要的,这也是 Dijkstra最短路径 方法的真谛。

    每个人有每个人的算法,每个算法都有每个算法的意图,就算大家都在用同样的算法,但是每个人算法中的那些变量、开关和条件都不一样,得到的结果也不一样。我们就是生活在Matrix(母体)里的一段程序,我们每个人的算法决定着我们每个人的选择,我们的选择决定了我们的人生。

    Good Luck!!!


注:“ Dijkstra最短路径” 方法 ,这个其实就是以前俺说的那个 “挖斜井偷油 + 高速公路”  的方法。

        对照着个人经历,就知道需要什么了;单单 “ 认清自己最需要的是什么,认清自己最想要的是什么” 就需要很多时间,整个工作工程量之大,超乎想象。

        游戏之作,不要当真。

××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××




1

膜拜

鸡蛋
4

鲜花
1

路过

雷人

开心

感动

难过

刚表态过的朋友 (6 人)

发表评论 评论 (3 个评论)

回复 山菊 2013-6-29 01:51
算计太多,选择的时机会被错过~~~
回复 gordon 2013-6-29 06:41
山菊: 算计太多,选择的时机会被错过~~~
时机稍纵即逝,不未雨绸缪,其实很难把握的住。对于老手来说,根本就不存在什么时机,就像吃饭喝水一样,不过是日常的功课而已。

其实真正应该注意的是运气,有些人有好运,有些人没有,有好运气是一种本事。

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

不是选择的时机会错过,而是局部最优,并不一定会导致整体最优,甚至会导致整个系统功能紊乱。
回复 钓者任公子 2013-6-29 11:50
未来不可测,trail and error 最好。象谁动了我的奶酪小老鼠

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

手机版|小黑屋|Archiver|网站错误报告|爱吱声   

GMT+8, 2025-2-21 18:43 , Processed in 0.028754 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部