JavaScript 中的算法和数据结构
各位读者好!我最近在 GitHub 上发布了 JavaScript算法和数据结构代码库,其中包含一系列用 ES6 JavaScript 实现的经典算法和数据结构,并附有讲解、延伸阅读和 YouTube 视频链接。此外,还有一个“算法和数据结构”YouTube 播放列表,其中包含该代码库中提到的所有视频,大家可以去学习一下这个自制的在线学习课程 :)
所以我猜你已经掌握了该项目的主要思想—— 帮助开发人员学习和实践算法并用 JavaScript 来实现。
为了使这个过程更加顺畅,我尝试为每种算法和数据结构添加一些图形说明,以便人们能够轻松掌握和记忆这些算法背后的想法。
你还可以在根目录的 README 文件中找到一些实用信息,这些信息在你学习时可能会派上用场。这些信息包括:
- 大 O 符号图 ——快速查看哪个更糟糕 O(n!) 或 O(n²)
- 一些最常用的大 O 符号列表及其性能比较 - 了解 10 有多大!(它是 3628800)
- 数据结构操作复杂度 ——不同数据结构的搜索、读取或插入速度有多快
- 排序算法复杂度比较表 ——帮助您根据具体情况选择合适的排序算法
所有代码均经过 100% 测试。这样做不仅是为了确保代码正常运行,也是为了向您展示每个算法或数据结构的工作原理、它们有哪些基本操作(比如轮询堆),以及有哪些边缘情况(如果图是有向的,该怎么办)。
该仓库还包含一个playground。这只是一个小函数模板以及一个空的测试用例,可帮助您在克隆仓库后立即开始测试或处理算法。
目前,涵盖以下数据结构:
- 链表
- 队列
- 堆
- 哈希表
- 堆
- 优先级队列
- 特里树
- 树(二叉搜索树、AVL树)
- 图(有向图和无向图)
- 不相交集
在这些数据结构之上,实现了 50 多种流行算法。其中包括排序、搜索算法、图/树/集合/字符串/数学相关算法。所有算法也按其范式进行分类:
- 蛮力算法 ——考虑所有可能性并选择最佳解决方案
- 贪婪算法 ——选择当前最佳选项,不考虑未来
- 分而治之算法 ——将问题分成更小的部分,然后解决这些部分
- 动态规划算法 ——利用先前找到的子解决方案构建解决方案
- 回溯算法 ——类似于暴力破解,尝试生成所有可能的解,但每次生成解时,都会测试它是否满足所有条件,然后才继续生成后续解。否则,回溯并沿着不同的路径寻找解。
JavaScript 算法和数据结构库仍在积极开发中,更多算法和数据结构即将推出。您也可以贡献您的代码和网络知名算法的实现,成为其中的一员!
希望这个仓库能对你有所帮助!祝你编程愉快!
文章来源:https://dev.to/trekhleb/algorithms-and-data-structs-in-javascript-49i3