zoukankan      html  css  js  c++  java
  • 学习数据结构和算法的两个利器|良心推荐

    数据结构和算法的重要性想必各位在江湖上早就有所耳闻。它对我们最直接的影响就是面试,一般来说,程序员一面都会涉及数据结构和算法知识,尤其是当前找工作比较难的情况下,各个公司会更加重视对候选人基本能力的考察。另外的影响是工作,以我为例,最开始在一家小公司做大数据的时候,由于数据量较大而计算资源不足,所以需要想尽各种办法优化软件的性能。最难解决的问题就是空间搜索效率,当时用了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 获取更多工具。

    欢迎公众号「渡码」,输出别地儿看不到的干货。

     

  • 相关阅读:
    Intersection
    B-number
    Intersecting Lines
    Segments
    G. Swapping Places
    Toy Storage
    TOYS
    哈密顿绕行世界问题
    java试题复盘——11月25日
    java试题复盘——11月13日
  • 原文地址:https://www.cnblogs.com/duma/p/12687736.html
Copyright © 2011-2022 走看看