学习数据结构和算法读什么书labuladong

我的推荐不会直接甩一大堆书目,而是会联系实际生活,讲一些书中有趣有用的知识,无论你最后会不会去看这本书,本文都会给你带来一些收获。

首先这本书是适合初学者的。总是有很多读者问,我只会C语言,能不能看《算法4》?学算法最好用什么语言?诸如此类的问题。

《算法4》看起来挺厚的,但是前面几十页是教你Java的;每章后面还有习题,占了不少页数;每章还有一些数学证明,这些都可以忽略。这样算下来,剩下的就是基础知识和疑难解答之类的内容,含金量很高,把这些基础知识动手实践一遍,真的就可以达到不错的水平了。

我觉得这本书之所以能有这么高的评分,一个是因为讲解详细,还有大量配图,另一个原因就是书中把一些算法和现实生活中的使用场景联系起来,你不仅知道某个算法怎么实现,也知道它大概能运用到什么场景,下面我就来介绍两个图算法的简单应用。

我想举的第一个例子是二分图。简单来说,二分图就是一幅拥有特殊性质的图:能够用两种颜色为所有顶点着色,使得任何一条边的两个顶点颜色不同。

明白了二分图是什么,能解决什么实际问题呢?算法方面,常见的操作是如何判定一幅图是不是二分图。比如说下面这道LeetCode题目:

你想想,如果我们把每个人视为一个顶点,边代表讨厌;相互讨厌的两个人之间连接一条边,就可以形成一幅图。那么根据刚才二分图的定义,如果这幅图是一幅二分图,就说明这些人可以被分为两组,否则的话就不行。

这是判定二分图算法的一个应用,其实二分图在数据结构方面也有一些不错的特性。

比如说我们需要一种数据结构来储存电影和演员之间的关系:某一部电影肯定是由多位演员出演的,且某一位演员可能会出演多部电影。你使用什么数据结构来存储这种关系呢?

既然是存储映射关系,最简单的不就是使用哈希表嘛,我们可以使用一个HashMap>来存储电影到演员列表的映射,如果给一部电影的名字,就能快速得到出演该电影的演员。

但是如果给出一个演员的名字,我们想快速得到该演员演出的所有电影,怎么办呢?这就需要「反向索引」,对之前的哈希表进行一些操作,新建另一个哈希表,把演员作为键,把电影列表作为值。

对于上面这个例子,可以使用二分图来取代哈希表。电影和演员是具有二分图性质的:如果把电影和演员视为图中的顶点,出演关系作为边,那么与电影顶点相连的一定是演员,与演员相邻的一定是电影,不存在演员和演员相连,电影和电影相连的情况。

回顾二分图的定义,如果对演员和电影顶点着色,肯定就是一幅二分图:

如果这幅图构建完成,就不需要反向索引,对于演员顶点,其直接连接的顶点就是他出演的电影,对于电影顶点,其直接连接的顶点就是出演演员。

当然,对于这个问题,书中还提到了一些其他有趣的玩法,比如说社交网络中「间隔度数」的计算(六度空间理论应该听说过)等等,其实就是一个BFS广度优先搜索寻找最短路径的问题,具体代码实现这里就不展开了。

如果我们说货币A到货币B的汇率是10,意思就是1单位的货币A可以换10单位货币B。如果我们把每种货币视为一幅图的顶点,货币之间的汇率视为加权有向边,那么整个汇率市场就是一幅「完全加权有向图」。

一旦把现实生活中的情景抽象成图,就有可能运用算法解决一些问题。比如说图中可能存在下面的情况:

图中的加权有向边代表汇率,我们可以发现如果把100单位的货币A换成B,再换成C,最后换回A,就可以得到100×0.9×0.8×1.4=100.8单位的A!如果交易的金额大一些的话,赚的钱是很可观的,这种空手套白狼的操作就是套汇。

现实中交易会有种种限制,而且市场瞬息万变,但是套汇的利润还是很高的,关键就在于如何快速找到这种套汇机会呢?

借助图的抽象,我们发现套汇机会其实就是一个环,且这个环上的权重之积大于1,只要在顺着这个环交易一圈就能空手套白狼。

《算法4》就介绍到这里,关于上面两个例子的具体内容,可以自己去看书,公众号后台回复关键词「算法4」就有PDF。

首先,前文说对于数学证明、章后习题可以忽略,可能有人要抬杠了:难道习题和数学证明不重要吗?

这也是我从来不推荐《算法导论》这本书的原因。如果有人给你推荐这本书,只可能有两个原因,要么他是真大佬,要么他在装大佬。《算法导论》中充斥大量数学证明,而且很多数据结构是很少用到的,顶多当个字典用。你说你学了那些有啥用呢,饶过自己呗。

THE END
1.算法你知道什么是算法吗?今天的内容会让你重新认识算法……一、算法 1.1 什么是算法? 1.2 例题求解 二叉树拓展 1.3 个人对算法的理解 1.4 个人观点的由来 结语 导读 大家好,很高兴又和大家见面啦!!! 今天我们将会开始咱们编程学习过程中的一个非常重要的内容学习——算法(algorithm)。 说到算法,相比大家应该不会陌生了,在【数据结构】专栏的绪论部分中,我们就有介绍过算https://blog.csdn.net/2301_79458548/article/details/143206088
2.深度学习算法简介深度学习算法是什么深度学习算法有哪些深度学习算法简介 深度学习算法是什么?深度学习算法有哪些? 作为一种现代化、前沿化的技术,深度学习已经在很多领域得到了广泛的应用,其能够不断地从数据中提取最基本的特征,从而对大量的信息进行机器学习。深度学习算法作为其中的重要组成部分,不仅可以为诸如人工智能、图像识别以及自然语言处理等领域提供支持,同时也受到https://m.elecfans.com/article/2216210.html
3.什么是机器学习算法?IBM机器学习算法是 AI 系统用来执行任务的一套规则或流程,最常见的用途是发现新的数据洞察或模式,或者从一组给定输入变量中预测输出值。机器学习 (ML) 利用算法来学习。 行业分析师一致认同机器学习及其底层算法至关重要。Forrester 指出:“机器学习算法的进步让营销数据的分析更加精确深入,可帮助营销人员了解营销细节(如https://www.ibm.com/cn-zh/topics/machine-learning-algorithms
4.什么是集成学习算法51CTO博客什么是集成学习算法 经过前面的学习,我们认识了机器学习中的常用回归算法、分类算法和聚类算法,在众多的算法中,除神经网络算法之外,没有一款算法模型预测准确率达到 100%,因此如何提高预测模型的准确率成为业界研究的重点。通过前面内容的学习,你可能会迅速想到一些方法,比如选择一款适合的算法,然后反复调整各种参数,其实https://blog.51cto.com/u_12480926/8170971
5.机器学习参数和非参数机器学习算法腾讯云开发者社区什么是参数机器学习算法并且它与非参数机器学习算法有什么不同? 本文中你将了解到参数和非参数机器学习算法的区别。 让我们开始吧。 学习函数 机器学习可以总结为学习一个函数(f)(f),其将输入变量(X)(X)映射为输出变量(Y)(Y)。 Y=f(x)Y=f(x) https://cloud.tencent.com/developer/article/1046475
6.什么是数据结构?什么是算法?怎么学习数据结构与算法?什么是算法?怎么学习数据结构与算法? 01 前言 学习算法,我们不需要死记硬背那些冗长复杂的背景知识、底层原理、指令语法……需要做的是领悟算法思想、理解算法对内存空间和性能的影响,以及开动脑筋去寻求解决问题的最佳方案。相比编程领域的其他技术,算法更纯粹,更接近数学,也更具有趣味性。https://maimai.cn/article/detail?fid=1744039689&efid=u2sSJyH6RePBrCh7o1dCfA
7.算法的本质是什么?学算法有什么用?算法的本质是解决问题的方法,是思想 在早期的时候,人们遇到新问题,必须要去解决它,经过“冥思苦想”,“反复探索尝试”, 最后总结归纳。这才形成了今天我们学习的各种算法。如果无法领会到解决问题的思想,无法总结归纳,就会有:“学算法有什么用?”。不知道为什么学,自然会认为学了没意义,没https://zhidao.baidu.com/question/1968979639194552900.html
8.一文看懂机器学习「3种学习方法+7个实操步骤+15种常见算法」机器学习、人工智能、深度学习是什么关系? 1956 年提出 AI 概念,短短3年后(1959)Arthur Samuel就提出了机器学习的概念: Field of study that gives computers the ability to learn without being explicitly programmed. 机器学习研究和构建的是一种特殊算法(而非某一个特定的算法),能够让计算机自己在数据中学习从https://easyai.tech/ai-definition/machine-learning/
9.统计学习方法(豆瓣)—— 引自章节:第一篇 监督学习 算法2.2 (感知机学习算法的对偶形式) (3) 如果 y_i(\sum_{j=1}^N \alpha_j y_j x_j \dot x_i+b) \le 0, \alpha_i \leftarrow \alpha_i+\eta b \leftarrow b + \eta y_i (查看原文) https://book.douban.com/subject/10590856/
10.《常用算法之智能计算(三)》:机器学习计算在给出机器学习计算各种算法之前,最好是先研究一下什么是机器学习和如何对机器学习进行分类,才能更好的理解和掌握一些具体的机器学习算法并将其用于实际问题的计算和处理。 学习是人类具有的一种重要智能行为,但究竟什么是学习,长期以来却众说纷纭。社会学家、逻辑学家和心理学家都各有自己不同的看法和说法。比如,http://www.kepu.net/blog/zhangjianzhong/201903/t20190327_475625.html
11.算法工程师,到底要学些什么?算法工程师可以说简单也可以说复杂,主要在于你想做到什么地步。一个优秀的算法工程师可以处理很多深层次的东西,而一个经验不足的算法工程师可能就只会使用工具包来解决问题。 算法工程师需要掌握的技能和知识点是非常广泛的,不仅仅包含算法和数据结构,还包括机器学习、深度学https://mp.weixin.qq.com/s?__biz=MzU2NjU3OTc5NA==&mid=2247573272&idx=1&sn=ab6406176511fdaafbaea44623343e6b&chksm=fca9d825cbde5133aaae4ee88b4792247f197ea9b01b90ee4638e84107951611ec92067000d7&scene=27