学习数据结构和算法的两个利器

数据结构和算法的重要性想必各位在江湖上早就有所耳闻。它对我们最直接的影响就是面试,一般来说,程序员一面都会涉及数据结构和算法知识,尤其是当前找工作比较难的情况下,各个公司会更加重视对候选人基本能力的考察。另外的影响是工作,以我为例,最开始在一家小公司做大数据的时候,由于数据量较大而计算资源不足,所以需要想尽各种办法优化软件的性能。最难解决的问题就是空间搜索效率,当时用了kd-tree这种数据结构,以及最短路径算法(SPFA)。当然大部分情况下像这种常见的算法调用现有的包即可,但有些时候需要结合业务做一些改进,这时候有扎实的基本功就显得尤为重要了。

正好最近关注到学习数据结构和算法的两个工具,特别好用。下面我就分别介绍下这两个工具,各位可以收藏一下,说不定以后能用到。

第一个工具是数据结构和算法可视化工具——Data Structure Visualizations。该工具由旧金山大学开发,地址:

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

它的作用是将数据结构和算法用可视化的方式展现出来,方便我们理解其中的原理。类似的工具还挺多的,我对比了四五个之后,觉得这个是最好的。内容丰富、容易操作、访问速度快且容易理解。虽然网站是英文的,但英文并不多,且都是些容易理解的术语。(可以关注公众号 渡码 回复关键字 ds 获取其他工具的链接)。下面我就带大家体验简单体验一下该工具如何使用。首先,来看看该工具包含多少内容

这只截取了部分,可以看到其中包含了各种树(二叉搜索树、红黑树、B树)、各种排序(归并排序、快速排序、堆排序)以及各种图算法(最短路径、最小生成树算法)。基本上涵盖了我们平时常见的数据结构和算法。

下面再来看看该工具是如何操作的

上图左边是我用工具建立的一颗红黑树,右边是一颗B+树。可以看到页面上没有过多的冗余信息,只是包含了插入、删除、打印相关的按钮以及选项,学习成本特别低。在做插入和删除时会有相应的动画,来帮助我们了解数据结构本身的原理,下面录了个小短视频让大家体验一下。(这里直接贴视频确实没整明白,放了个链接,大家可以在链接中找到)

红黑树(链接中第一个视频):https://mp.weixin.qq.com/s?__biz=MjM5MjcwMjk4OA==&mid=2247484282&idx=1&sn=36685ee078f892223b2daeb11ead96f9&chksm=a6a3741991d4fd0f33cba3598e50b021ad5cf9a215c00c36f656b2bcd4396804d4b48b73d05d&token=1458642456&lang=zh_CN#rd

B+树(链接中第二个视频):https://mp.weixin.qq.com/s?__biz=MjM5MjcwMjk4OA==&mid=2247484282&idx=1&sn=36685ee078f892223b2daeb11ead96f9&chksm=a6a3741991d4fd0f33cba3598e50b021ad5cf9a215c00c36f656b2bcd4396804d4b48b73d05d&token=1458642456&lang=zh_CN#rd

其实从这里我们也能大概看出红黑树和B+树的一些区别,上图B+树中的元素比红黑树多,然而树的高度却比红黑树低。这一特点就决定了在数据库场景中,不可能用红黑树做索引,那会导致树高度非常高。这种可视化的方式体感很强。

上面介绍了可视化工具,下面再介绍一个数据结构和算法的代码库,地址:

https://github.com/TheAlgorithms/Pythonhttps://github.com/TheAlgorithms/Javascripthttps://github.com/TheAlgorithms/Javahttps://github.com/TheAlgorithms/C

有各种语言的版本。先来看看都包含什么内容

这里只是截取了部分内容,跟可视化工具一样,常见的数据结构和算法基本都包含。

最后,用二分查找的小例子,来将这两个工具结合起来。二分查找算法很简单,它是我出去找工作面试中出现频率最高的一道题。虽然简单但也别小看它,我做面试官的时候,仍然遇到有好多人写不出来。Python版算法库代码地址:

https://github.com/TheAlgorithms/Python/blob/master/searches/binary_search.py

我自己也实现了一下,代码如下:

二分查找过程如下(链接中第三个视频):

https://mp.weixin.qq.com/s?__biz=MjM5MjcwMjk4OA==&mid=2247484282&idx=1&sn=36685ee078f892223b2daeb11ead96f9&chksm=a6a3741991d4fd0f33cba3598e50b021ad5cf9a215c00c36f656b2bcd4396804d4b48b73d05d&token=1458642456&lang=zh_CN#rd

这里既包含了查找过程,又包含了每一步查找对应的执行代码,非常方便学习。

有可视化工具和代码,再结合原理相信没有学不会的数据结构和算法。希望这两个工具对你有用。回复关键字 ds 获取更多工具。

原文地址:https://www.cnblogs.com/keystone/p/12689649.html

时间: 2024-09-30 15:00:12

学习数据结构和算法的两个利器的相关文章

我是如何学习数据结构与算法的?

数据结构与算法的地位对于一个程序员来说不言而喻.今天这篇文章不是来劝你们学习数据结构与算法的,也不是来和你们说数据结构与算法有多重要.主要是最近几天后台有读者问我是如何学习数据结构与算法的,有没有什么捷径,是要看视频还是看书,去哪刷题等-..而且有些还是大三大四的,搞的我都替你们着急.担心-..所以我今天就分享下自己平时都是怎么学习的. 学习算法的捷径就是多刷题 说实话,要说捷径,我觉得就是脚踏实地着多动手去刷题,多刷题.但是,如果你是小白,也就是说,你连常见的数据结构,如链表.树以及常见的算法

在Object-C中学习数据结构与算法之排序算法

笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速排序 双路快速排序 三路快速排序 堆排序 总结与收获 参考与阅读 选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n2) 的时间复杂度.所以用到它的时候,数据规模越小越好.唯一的好处可能就是不占用额外的内存空间了吧. 1.算法步骤 首先在未排序序列中找到最小(大)元素,存放到排

如何高效、系统地学习数据结构与算法?

数据结构与算法的应用在计算机编程领域非常广泛,甚至可以说无处不在,比如图像视频处理.数据压缩.数据库.游戏开发.操作系统.编译器.搜索引擎.AR.VR.人工智能.区块链等等领域,都是以数据结构与算法为基石.很多程序员在初次接触到算法之后因为其知识点多.复杂.思考太过艰深选择放弃,但是数据结构与算法对于程序员的重要性不言而喻,不管是提升代码质量还是面试,可以说都是必备技能.那么,如何才能快速.清晰地学好数据结构与算法呢?iOS两大流行开源框架作者,小码哥教育创始人李明杰老师特意联合汇丰银行技术总监

算法入门《数据结构与算法图解》+《我的第一本算法书》+《学习JavaScript数据结构与算法第3版》

最近几年学前端的人会越来越多,再加上前端的范围越来越广,从前端发展为全栈,数据结构和算法的功底要求势必将越来越高. <数据结构与算法图解>电子书及代码是数据结构与算法的入门指南,不局限于某种特定语言,略过复杂的数学公式,用通俗易懂的方式针对编程初学者介绍数据结构与算法的基本概念,培养编程逻辑.主要内容包括:为什么要了解数据结构与算法,大O表示法及其代码优化利用,栈.队列等的合理使用,等等. <算法图解>电子书非常的体贴,看起来也很快,用图来解释算法是非常好的想法,可作为学习数据结构

第一章:数据结构与算法javascript描述

在前端工程师中,常常有一种声音,我们为什么要学数据结构与算法,没有数据结构与算法,我们一样很好的完成工作.实际上,算法是一个宽泛的概念,我们写的任何程序都可以称为算法,甚至往冰箱里放大象,也要通过开门,放入,关门这样的规划,我们也可以视作为一种算法.可以说:简单的算法是人类的本能.而算法的知识的学习则是吸取前人的经验.对于复杂的问题进行归类,抽象,帮助我们脱离刀耕火种的时代,系统掌握一个算法的过程. 随着自身知识的增长,不论是做前端,服务端还是客户端,任何一个程序员都会开始面对更加复杂的问题,算

【系列文章】数据结构与算法——图

---恢复内容开始--- 接触C语言是很早以前的事了,大概是在初中二年级.后来发现只学语言,不学算法根本没用,于是乎萌发了学习数据结构和算法的想法,但一直没有什么实际进展.直到今天,才决定好好研究一番(ps:今年大一,甚是惭愧),顺便把学习过程记录在这一系列文章之中.好了,废话不多说,开始我这一系列的文章.文中可能有错误,如果你发现了,我恳请你帮我指出.谢谢. 图——图能很方便的描述一些实际问题,常用于寻找最优解类型的问题.其他相关概念,百度百科说的很清楚了. 学习图大概有以下几个过程. 一.创

javascript数据结构和算法 零(前记+序言)

前记 这本书Data Structure and Algorithm with Javascript 我将其翻译成<< javascript 数据结构和算法>> 为什么这么翻译?而不是翻译成"用javascript实现数据结构和算法" 原因有二: 一个,我觉的它更加简洁,第二个,我是想强调我们在这里使用的是javascript. 我不喜欢一些翻译的人把一个简单的语句进行加工,搞得晦涩难懂.我更喜欢外国人写书的 那种原汁原味.同样,我很喜欢外国人的那种分享精神,它

1 为什么要学习数据结构与算法

学习算法并不是为了记住几个排序.二分查找.二叉树遍历,他还能锻炼你的逻辑思维.性能意识, 而且,如果你写代码能力还有欠缺,你还可以通过把学到的数据结构和算法都实现一遍, 这是一种很好很好的锻炼编程能力的方法.所以不要过度追求一定要在项目里手写快排.手写二叉树才能算是用上. 其实,我觉得,数据结构和算法这个东西,如果你不去学,可能真的这辈子都用不到,也感受不到它的好.但是一旦掌握,你就会常常被它的强大威力所折服.之前你可能需要费很大劲儿来优化的代码,需要花很多心思来设计的架构,用了数据结构和算法之

Java数据结构和算法(一):简介

本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程.但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度.那么爬坡时使用1档,便可以获得更大的牵引力:下坡时便使用低档限制车的行驶速度.回到编程而言,比如将一个班级的学生名字要临时存储在内存中,你会选择什么数据结构来存储,数