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 获取更多工具。

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

     

  • 相关阅读:
    < java.util >-- Set接口
    Codeforces 627 A. XOR Equation (数学)
    Codeforces 161 B. Discounts (贪心)
    Codeforces 161 D. Distance in Tree (树dp)
    HDU 5534 Partial Tree (完全背包变形)
    HDU 5927 Auxiliary Set (dfs)
    Codeforces 27E. Number With The Given Amount Of Divisors (暴力)
    lght oj 1257
    Codeforces 219D. Choosing Capital for Treeland (树dp)
    Codeforces 479E. Riding in a Lift (dp + 前缀和优化)
  • 原文地址:https://www.cnblogs.com/duma/p/12687736.html
Copyright © 2011-2022 走看看