javascript-algorithms - 📝用 JavaScript 实现的算法和数据结构,附有详情链接

Created at: 2018-03-24 15:47:04
Language: JavaScript
License: MIT

JavaScript 算法和数据结构

🇺🇦乌克兰正在受到俄罗斯军队的袭击。平民正在被杀害。居民区正在遭到轰炸。


词 科德科夫

该存储库包含许多流行算法和数据结构的基于 JavaScript 的示例。

每种算法和数据结构都有自己单独的自述文件,其中包含相关的解释和进一步阅读的链接(包括YouTube视频的链接)。

用其他语言阅读: 简体中文, 繁體中文한국어日本語波兰语, 法语, 西班牙语葡萄牙语РусскийTürkçe意大利语印度尼西亚语Українська 阿拉伯语越南德语

请注意,此项目仅用于学习和研究目的,用于生产。

数据结构

数据结构是在计算机中组织和存储数据的一种特殊方式,以便可以有效地访问和修改数据。更准确地说,数据结构是数据值、它们之间的关系以及可应用于数据的函数或操作的集合。

B
- 初级, - 高级
A

算法

算法是如何解决一类问题的明确规范。它是一组精确定义操作序列的规则。

B
- 初级, - 高级
A

按主题分类的算法

范式算法

算法范式是一种通用方法或方法,它是一类算法设计的基础。它是高于算法概念的抽象,就像算法是高于计算机程序的抽象一样。

如何使用此存储库

安装所有依赖项

npm install

运行 ESLint

你可能需要运行它来检查代码质量。

npm run lint

运行所有测试

npm test

按名称运行测试

npm test -- 'LinkedList'

故障 排除

如果 linting 或测试失败,请尝试删除该文件夹并重新安装 npm 包:

node_modules

rm -rf ./node_modules
npm i

还要确保你使用的是正确的节点版本 ()。如果你使用 nvm 进行节点版本管理,则可以从项目的根文件夹运行,并且将选取正确的版本。

>=16
nvm use

操场

你可以在文件中使用数据结构和算法,并在 中为其编写测试。

./src/playground/playground.js
./src/playground/__test__/playground.test.js

然后只需运行以下命令即可测试你的操场代码是否按预期工作:

npm test -- 'playground'

有用信息

引用

大O表示法

大 O 表示法用于根据算法的运行时间或空间需求如何随着输入大小的增长而增长对算法进行分类。在下面的图表中,你可能会找到以 Big O 表示法指定的算法最常见的增长顺序。

大 O 图

资料来源:大O备忘单

以下是一些最常用的 Big O 符号列表,以及它们与不同大小的输入数据的性能比较。

大O表示法 类型 10 个元素的计算 100 个元素的计算 1000 个元素的计算
O(1) 不断 1 1 1
O(对数 N) 对数的 3 6 9
O(N) 线性 10 100 1000
O(N log N) n 日志(n) 30 600 9000
O(N^2) 二次 100 10000 1000000
O(2^N) 指数 1024 1.26e+29 1.07e+301
O(N! 阶乘 3628800 9.3e+157 4.02e+2567

数据结构操作复杂性

数据结构 访问 搜索 插入 删除 评论
数组 1 n n n
n n 1 1
队列 n n 1 1
链表 n n 1 n
哈希表 - n n n 在完美哈希函数的情况下,成本将是 O(1)
二叉搜索树 n n n n 在平衡的情况下,树木成本将是O(log(n))
B树 日志(n) 日志(n) 日志(n) 日志(n)
红黑树 日志(n) 日志(n) 日志(n) 日志(n)
AVL 树 日志(n) 日志(n) 日志(n) 日志(n)
布隆过滤器 - 1 1 - 搜索时可能会出现误报

数组排序算法复杂性

名字 最好 平均 糟糕 记忆 稳定 评论
气泡排序 n n2 n2 1 是的
插入排序 n n2 n2 1 是的
选择排序 n2 n2 n2 1
堆排序 n 日志(n) n 日志(n) n 日志(n) 1
合并排序 n 日志(n) n 日志(n) n 日志(n) n 是的
快速排序 n 日志(n) n 日志(n) n2 日志(n) 快速排序通常使用 O(log(n)) 堆栈空间就地完成
外壳排序 n 日志(n) 取决于间隙顺序 n (log(n))2 1
计数排序 n + r n + r n + r n + r 是的 r - 数组中的最大数字
基数排序 n * k n * k n * k n + k 是的 k - 最长键的长度

项目支持者

你可以通过 ️ GitHub❤️️ Patreon 支持❤️此项目。

支持这个项目的人

∑ = 1

作者

@trekhleb

更多关于 JavaScript 和算法的项目和文章 trekhleb.dev