龙空技术网

程序员必知的40个算法

程序员zhenguo 1637

前言:

此刻看官们对“编程的算法有哪些”可能比较珍视,看官们都想要了解一些“编程的算法有哪些”的相关知识。那么小编在网络上网罗了一些对于“编程的算法有哪些””的相关资讯,希望小伙伴们能喜欢,咱们一起来学习一下吧!

你好,我是zhenguo

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

多久能搞定算法面试题?

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

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

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

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

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

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

这是很不负责任的!

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

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

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

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

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

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

学算法到底要学啥?

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

学习基础算法,比如学习排序算法、搜索算法、贪心算法学习非监督机器学习算法,如聚类,数据降维,关联规则挖掘学习传统监督算法,如分类和回归神经网络相关算法推荐、NLP等相关算法

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

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

这个算法解决了什么问题,它的输入是什么?输出是什么?这个算法的时间性能如何?能不能应对高并发或大数据量输入?空间性能又如何?最好情况是什么?最坏情况是什么?这个算法能并行吗?如何设计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上某道题目来说,通常包括:

首先理解需求。理解待解决的问题,及问题的每一个细节设计并确定使用的算法,考虑准确度和时间性能2个维度。

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

编码,使用一门语言编程步骤2形成的算法伪代码。测试并部署到线上生产环境程序员必知的40个算法

40 Algorithms Every Programmer Should Know

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

首先要掌握基础算法,培养算法思维,比如先掌握排序算法、搜索算法、贪心算法学习非监督机器学习算法,如聚类,数据降维,关联规则挖掘学习传统监督算法,如分类和回归神经网络相关算法推荐、NLP等相关算法

如果你感兴趣,私信我哈,周末愉快~

标签: #编程的算法有哪些