Skip to content

yuanzhongqiao/javascript-algorithms

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CI 代码科夫 回购规模

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

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

阅读其他语言版本: 简体中文繁体中文한국어日本语波兰语法语西班牙语葡萄牙语Русский土耳其语意大利语印度尼西亚语Українська阿拉伯语Tiếng Việt德语

☝ 请注意,该项目仅用于学习和研究目的,并不用于生产。

数据结构

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

B- 初级,A- 高级

算法

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

B- 初级,A- 高级

按主题分类的算法

范式算法

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

如何使用这个存储库

安装所有依赖项

npm install

运行 ESLint

您可能想运行它来检查代码质量。

npm run lint

运行所有测试

npm test

按名称运行测试

npm test -- 'LinkedList'

故障排除

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

rm -rf ./node_modules
npm i

另请确保您使用的是正确的 Node 版本 ( >=16)。如果您使用nvm进行 Node 版本管理,您可以nvm use从项目的根文件夹运行,并且将会选择正确的版本。

操场

您可以在文件中使用数据结构和算法,./src/playground/playground.js并在./src/playground/__test__/playground.test.js.

然后只需运行以下命令来测试您的 Playground 代码是否按预期工作:

npm test -- 'playground'

有用的信息

参考

大 O 表示法

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

大O图

资料来源:Big O 备忘单

下面列出了一些最常用的 Big O 表示法以及它们与不同大小的输入数据的性能比较。

大 O 表示法 类型 10 个元素的计算 100 个元素的计算 1000 个元素的计算
复杂度(1) 持续的 1 1 1
O(logN) 对数 3 6 9
在) 线性 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
在!) 阶乘 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 n 2 n 2 1 是的
插入排序 n n 2 n 2 1 是的
选择排序 n 2 n 2 n 2 1
堆排序 n 对数(n) n 对数(n) n 对数(n) 1
归并排序 n 对数(n) n 对数(n) n 对数(n) n 是的
快速排序 n 对数(n) n 对数(n) n 2 日志(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

trekhleb.dev上还有一些有关 JavaScript 和算法的项目文章

About

用 Ja​​vaScript 实现的算法和数据结构,并附有解释和进一步阅读的链接

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%