Google工程师巩朋的算法之路(1)
转载自 http://www.tiantianbianma.com/msra-gong-peng-algorithm-one.html/
引子
严格来说,本文题目应该是 我的数据结构和算法学习之路,但这个写法实在太绕口。况且CS中的算法往往暗指数据结构和算法(例如 算法导论 指的实际上是 数据结构和算法导论),所以我认为本文题目是合理的。
摘要
- 我这些年学习数据结构和算法的总结。
- 一些不错的算法书籍和教程。
- 算法的重要性。
初学
第一次接触数据结构是在大二下学期的数据结构课程。然而这门课程并没有让我入门——当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾——反正最后考试划个重点也能过,于是这门整个计算机专业本科最重要的课程就被傻逼的我直接忽略过去了。
直到大三我才反应过来以后还要找工作——而且大二的折腾证明了我并没有什么商业才能,以后还是得靠码代码混饭吃,我当时惊恐的发现自己对编程序几乎一无所知,于是我给自己制订了一个类似于建国初期五年计划的读书成长计划,其中包括C语言基础、数据结构以及计算机网络等方面的书籍。
读书计划的第一步是选择书籍,我曾向当时我觉得很牛的 “学长” 和 “大神” 请教应该读哪些算法书籍,”学长”们均推荐《算法导论》,还有几个”大神”推荐《计算机程序设计艺术》(现在我疑心他们是否翻过这些书),草草的翻了下这两本书发现实在看不懂。后来经过摸索和总结,总结出一系列的算法好书。
1《数据结构与算法分析——C 语言描述》
《数据结构与算法分析——C 语言描述》 是我学习数据结构的第一本书:当时有很多地方看不懂,于是做记号反复看;代码看不明白,于是抄到本子上反复研读;一些算法想不通,就把它所有的中间状态全画出来然后反复推演。事实证明尽管这种学习方法看起来傻逼而且效率很低,但对于当时同样傻逼的我却效果不错——傻人用傻办法嘛,而且这本书的课后题大多都是经典的面试题目,以至于日后我看到 《编程之美》 的第一反应就是这货的题目不全是抄别人的么。

- 豆瓣评分: 8.9
- 购买链接: 京东
- 推荐指数: 五颗星
至今记得,这本书为了说明算法是多么重要,在开篇就拿最大子序列和作为例子,一路把复杂度从 O(N^3) 杀到 O(N^2) 再到 O(NlgN) 最后到 O(N),当时内心真的是景仰之情如滔滔江水连绵不绝,尼玛为何可以这么屌。
此外,我当时还把这本书里图算法之前的数据结构全手打了一遍,后来找实习还颇为自得的把这件事放到简历里,现在想想真是傻逼无极限。
凭借这个读书成长计划中学到的知识,我总算比较顺利的找到了一份实习工作,这是后话。
入门
我的实习并没有用到什么算法(现在看来就是不停的堆砌已有的 API,编写一堆自己都不知道对不对的代码而已),在发现身边的人工作了几年却还在和我做同样的事情之后,我开始越来越不安。尽管当时我对自己没什么规划,但我清楚这绝壁不是我想做的工作。
2《微软的梦工场》
在这个摇摆不定的时刻,《微软的梦工场》 成了压倒骆驼的最后一支稻草,这本书对微软亚洲研究院的描写让我下定了 “找工作就要这样的公司” 的决心,然而我又悲观的发现无论是以我当时的能力还是文凭,都无法达到微软亚研院的要求,矛盾之下,我彻底推翻了自己”毕业就工作”的想法,辞掉实习,准备考研。
- 豆瓣评分: 7.0
- 购买链接: 京东
- 推荐指数: 四颗星
考研的细节无需赘述,但至今仍清楚的记得自己在复试时惊奇且激动的发现北航宿舍对面就是微软西格玛大厦,那种离理想又进了一步的感觉简直爽到爆。
3《算法设计与分析基础》
我的研究生生涯绝对是一个反面典型——翘课,实习,写水论文,做水研究,但有一点我颇为自得——从头到尾认真听了韩军教授的算法设计与分析课程。

- 豆瓣评分: 8.3
- 购买链接: 京东
- 推荐指数: 五颗星
韩军给我印象最深的有两点:课堂休息时跑到外面和几个学生借火抽烟;讲解算法时的犀利和毫不含糊。
尽管韩军从来没有主动提及,但我敢肯定 《算法设计与分析基础》 就是他算法课程事实上的(de-facto)教材,因为他的课程结构几乎和这本书的组织结构一模一样。
如果 《数据结构与算法分析——C语言描述》 是我的数据结构启蒙,那么韩军的课程 算法设计与分析基础 就是我的算法启蒙,结合课程和书籍,我一一理解并掌握了复杂度分析、分治、减治、变治、动态规划和回溯这些简单但强大的算法工具。
4《算法引论》
《算法引论》 是我这时无意中读到的另一本算法书,和普通的算法书不同,这本书从创造性的角度出发——如果说 《算法导论》 讲的是有哪些算法,那么《算法引论》讲的就是如何创造算法。结合前面的 《算法设计与分析》,这本书把我能解决的算法问题数量扩大了一个数量级。

- 豆瓣评分: 8.9
- 购买链接: 京东
- 推荐指数: 五颗星
之后,在机缘巧合下,我进入微软亚洲工程院实习,离理想又近了一步,自我感觉无限牛逼。
Google工程师巩朋的算法之路(1)的更多相关文章
- Google工程师打造Remix OS系统 桌面版安卓下载
三位前Google工程师打造的Remix OS系统终于来到了PC桌面上,现已可以下载尝鲜. Remix OS for PC基于Android-x86项目,由安卓5.1 Lollipop深度定制而来,不 ...
- 算法之路 level 01 problem set
2992.357000 1000 A+B Problem1214.840000 1002 487-32791070.603000 1004 Financial Management880.192000 ...
- [4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔
题目 插入排序法由未排序的后半部前端取出一个值.插入已排序前半部的适当位置.概念简单但速度不快. 排序要加快的基本原则之中的一个: 是让后一次的排序进行时,尽量利用前一次排序后的结果,以加快排序的速度 ...
- 小白算法之路-非确定性多项式(non-deterministic polynomial,缩写NP)
前端小白的算法之路 时隔多日终于解决了埋在心头的一道难题,霎时云开雾散,今天把一路而来碰到的疑惑和心得都记录下来,也算是开启了自己探索算法的大门. 问题背景 曾经有一个年少轻狂的职场小白,在前端圈 ...
- 深度学习框架Tensorflow应用(Google工程师)
首先在这里给大家分享Google工程师亲授 Tensorflow2.0-入门到进阶教程 有需要的小伙伴可点击进入扣群下载,群内不定期的会分享资料教程,点击直达链接:https://jq.qq.com/ ...
- 从Google工程师到创业CTO,他的8项理念也许可以帮到你
Lan Langworth是前Google软件工程师.O'Reily作者,现在他是Artillery的co-founder/CTO,致力于把游戏机质量的游戏带进网页浏览器.下文是他从Google离职到 ...
- VBA:Google翻译(含tk算法)
完整的tk算法: //源自http://translate.google.cn/ TKK=eval('((function(){var a\x3d618632403;var b\x3d14854840 ...
- Google 工程师:为什么 CDN 对移动客户端加速“没有”效果
王者荣耀是近两年来比较火的手游,不少小伙伴都有玩过.玩这个游戏最怕的不是遇到猪一般的队友,也不是怕遇到神一样的对手.最让我们感到害怕和绝望的是,团战爆发时,而你 460 了.460 是一个玩家常用的词 ...
- [转]Java工程师技术栈--成神之路
一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133http://if ...
随机推荐
- css解决图片拉伸问题
在实际场景中,我们经常会遇到图片大小固定的需求,但是由于原始图片大小,比例不一样,不同图片以相同的大小展示会参差不齐.解决方法就是object-fit或者background-size属性.他们的区别 ...
- JavaScript DOM 高级程序设计读书笔记二
响应用户操作和事件 事件就是操作检测与脚本执行的组合,或者基于检测到的操作类型在某个对象上调用事件侦听器(事件处理程序). 事件的类型 事件可以分为几种类型:对象事件,鼠标事件,键盘事件(只适用于do ...
- django 4.get接口开发
根据上一篇文章,有post,那么就有get请求,其余部分不变,就是把post换成get就可以. #views.py from django.http.response import HttpRespo ...
- codeforces-1136 (div2)
A.读到第i章,就有N - i + 1章还没读. #include <map> #include <set> #include <ctime> #include & ...
- 细说java系列之HashMap原理
目录 类图 源码解读 总结 类图 在正式分析HashMap实现原理之前,先来看看其类图. 源码解读 下面集合HashMap的put(K key, V value)方法探究其实现原理. // 在Hash ...
- uCosII中的任务
任务基本概念 任务是一个接受操作系统管理的独立运行单元,在uCosII中类似与普通平台上的main()函数,需要自己来保护其因调用或中断二产生的断点,所以需要一个自己的私有堆栈,即任务堆栈: 任务有两 ...
- 非阻塞读和写:str_cli函数
void str_cli(FILE *fp, int sockfd) { int maxfdp1, val, stdineof; ssize_t n, nwritten; fd_set rset, w ...
- 使用hql动态创建对象问题
前段时间由于需求要添加报表数据,调整ireport后,打印pdf文件出现数据错位的情况,调试发现不是ireport问题,就查看了后台传送的数据,最后发现传送的对象属性值已经就是错位的,那就是获取对象时 ...
- VLAN原理解释
转发至http://network.51cto.com/art/201409/450885.htm 为什么需要VLAN 1. 什么是VLAN? VLAN(Virtual LAN),翻译成中文是“虚拟局 ...
- mysql字符集设置注意事项
mysql字符集设置必须是在具体的某一个数据库情况下才能进行设置 否则会报错.