点击上方蓝色字体,关注程序员zhenguo

你好,我是zhenguo

在讲述程序员必知的40个算法前,我想拿出相当一段篇幅阐述怎样学习算法,以及算法学习切记不能怎么样做。对于每一位程序员或许都有一点用,建议看完并收藏这篇文章。

多久能搞定算法面试题?

我隔三差五的就会收到私信询问这类问题,我的回复一般大概是这样:

算法很有必要学习,建议你制定一个短期计划和长期计划。短期为了应付面试有一套策略,但面试过了,也要长期学习它。

任何事情都有规律性,我们得尊重基本的规律,尊重基本的实事。就像足球得按照规律办事,老想投机取巧,老想急功近利,最后往往是办不好的。

学习算法就像搞足球一样,也得按照规律做事,心急不得!

能做到真正吃透这40个常见的算法,一定是一件非常周期长的事情,也许1年、2年或5年,得有这种心理预期,打持久战的准备。

你或许看过我的一个专栏:60天精通Python技术栈,但我绝不会去写:60天精通40个程序员必知算法:

这是很不负责任的!

会让学习者变得很焦躁,让他们形成一些说大不大、说小不小的感觉:

我他妈的当时都看懂答案了,为啥一到面试就写不出来!是我的记性不好吗?

ai,压根和记性没关系,什么时候学算法也变成背模板、记小抄诸如此类的活动呢?

这是学习算法非常大的误区!

掌握算法,绝不是短时间就能做到的。

我们应该放平心态,我做算法5年有余,看到某些算法书,实话讲,理解也没有太好,依然还得和大家一起学习。

学算法到底要学啥?

从零学算法该怎么做?比如这是一个行之有效的学习算法的路线:

  1. 学习基础算法,比如学习排序算法、搜索算法、贪心算法

  2. 学习非监督机器学习算法,如聚类,数据降维,关联规则挖掘

  3. 学习传统监督算法,如分类和回归

  4. 神经网络相关算法

  5. 推荐、NLP等相关算法

知道这些,依然没有毛用!

还要建立一个更重要的思维意识,学习上面每一个算法时该思考哪些问题:

  1. 这个算法解决了什么问题,它的输入是什么?输出是什么?

  2. 这个算法的时间性能如何?能不能应对高并发或大数据量输入?

  3. 空间性能又如何?

  4. 最好情况是什么?最坏情况是什么?

  5. 这个算法能并行吗?

如何设计1个算法?

接下来,在上面学习了这么多算法后,开始设计算法。先来看看算法设计的目标:

Designing an algorithm is an effort to create a mathematical recipe in the most efficient way that can effectively be used to solve a real-world problem

翻译过来:

设计一个算法就是努力用最高效的方法创造一个数学配方,确保它能有效的求解现实问题。

解决某个问题的算法设计步骤是什么?比如最简单的就拿leetcode上某道题目来说,通常包括:

  1. 首先理解需求。理解待解决的问题,及问题的每一个细节

  2. 设计并确定使用的算法,考虑准确度和时间性能2个维度。

就leetcode上的题目而言,一般都能求出精确解,只考虑优化求解方法即可。但现实世界,鱼和熊掌往往不可兼得,要面临两者选择,比如短时间内求出近似解。

  1. 编码,使用一门语言编程步骤2形成的算法伪代码。

  2. 测试并部署到线上生产环境

程序员必知的40个算法

40 Algorithms Every Programmer Should Know

这是我见过最好的一本算法书:从第一性原理出发,如贪心策略、动规、分治,一直平滑过渡到监督、非监督、NLP,推荐等算法,一共40个程序员必知的算法,全书使用的编程语言是Python,作者是Ahmad博士。

  1. 首先要掌握基础算法,培养算法思维,比如先掌握排序算法、搜索算法、贪心算法

  2. 学习非监督机器学习算法,如聚类,数据降维,关联规则挖掘

  3. 学习传统监督算法,如分类和回归

  4. 神经网络相关算法

  5. 推荐、NLP等相关算法

这本书已放到我的知识星球,自愿加入获取完整PDF,同时我会在星球里继续拆这本书,提问较多的解答也会同步到公众号里。

时间永远都是稀缺的,所以读书我选择只读经典。


zhenguo原创精华PDF,倾情奉献给你,后台回复对应关键词下载,给文章点个赞:

Python专题 | 数据分析手册 | 算法刷题100

程序员必知的40个算法相关推荐

  1. 【新书速递】程序员必会的40种算法

    算法是计算科学的核心,在求解实际问题的过程中发挥着重要作用.程序员.算法设计师.架构师.数据分析师等信息技术相关从业人员都应学习算法设计基础知识,积累基础算法,掌握典型的机器学习算法.自然语言处理算法 ...

  2. java程序员基础算法_java程序员必知的十种程序算法

    <java程序员必知的十种程序算法>由会员分享,可在线阅读,更多相关<java程序员必知的十种程序算法(11页珍藏版)>请在人人文库网上搜索. 1.java程序员必学的十种程序 ...

  3. 程序员必知8大排序3大查找(一)

    每天都在叫嚣自己会什么技术,什么框架,可否意识到你每天都在被这些新名词.新技术所迷惑,.NET.XML等等技术固然诱人,可是如果自己的基础不扎实,就像是在云里雾里行走一样,只能看到眼前,不能看到更远的 ...

  4. 程序员必知8大排序3大查找(三)

    前两篇 <程序员必知8大排序3大查找(一)> <程序员必知8大排序3大查找(二)> 三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表(以后谈) 一.顺序查找的基 ...

  5. 程序员必知必会之blog篇

    程序员必知必会之blog篇 网易广州       赖勇浩(http://blog.csdn.net/lanphaday) 本文最初发表于恋花蝶的博客(http://blog.csdn.net/lanp ...

  6. 每个程序员必知之SEO

    似乎因为受这篇文章的影响 http://katemats.com/what-every-programmer-should-know-about-seo/ 于是我也觉得我应该写一个每个程序员必知之SE ...

  7. 英:程序员必知单词、语句、英文缩写汇总

    转自: 程序员必知单词.语句.英文缩写汇总 程序员必知单词.语句.英文缩写汇总 2018年11月06日 14:02:52 牟垚 阅读数:180 综述:便于类,函数命名,工作文档阅读而做的单词积累,还是 ...

  8. 专业程序员必知的技巧:敲打代码

    文/ Josh Myself to 40's http://www.embassyofperu.org/ products investment the using cheap canadian vi ...

  9. 程序员必知的操作系统知识点

    这是一本关于程序员必知的操作系统,可以看一下目录. 内容涉及 认识操作系统 进程和线程 内存管理 文件管理 I/O 死锁 操作系统面试题 操作系统核心概念 字是一个一个敲的,图是一笔一笔画的. 可以看 ...

最新文章

  1. 一部后现代文学的“奇书”:《烟草经纪人》
  2. centos7 安装 nvm
  3. 华硕双屏笔记本windows系统驱动安装
  4. win10虚拟机怎么连接服务器,win10自带虚拟机怎么链接服务器
  5. 中标麒麟mysql 安装_在中标麒麟上安装达梦数据库V8
  6. Python骇客帝国弹幕1.0
  7. SpringBoot 如何异步编程,老鸟们都这么玩的
  8. C语言经典例题100道(求素数最全的方法在这里!!!)
  9. VisionTransformer(三)BIT—— 基于孪生网络的变化检测结构分析
  10. 服务器多线程定时发送消息,C++Socket 多线程编程 定时和定量发送数据
  11. ElasticSearch6.5.4三中文以及拼音的搜索
  12. 激光SLAM-地图边界噪点的处理(地图的美化)--图像处理的方法
  13. linux终端关闭xmanager,关于使用Xmanager进行对linux远程桌面控制
  14. win7下逻辑备份任务
  15. @Builder使用
  16. 美化win10 PowerShell
  17. ArcGIS栅格计算器
  18. oracle缓冲区溢出,Oracle缓冲区溢出漏洞,聚铭网络CSV系统支持一键检测
  19. JS计算数组(几个数字)中的最大值
  20. Python线程池、进程池的介绍与使用

热门文章

  1. 关于筹码理论的一些知识
  2. 深度强化学习系列(2): ERROR: GLEW initalization error: Missing GL version
  3. AI外呼机器人系统搭建和私有云部署
  4. 004-JDK的下载和安装
  5. 中国历史“四大谜案”
  6. redis相关 主从架构
  7. ib中文素养课学习经验介绍,我是怎么学习IB中文的?
  8. resetlogs,noresetlogs,完全恢复,不完全恢复
  9. nodemcu写入HTML,(一)nodemcu进阶:从Web浏览器控制LED
  10. HDU 2209 翻纸牌游戏(DFS)