JavaScript 算法与数据结构 [![translate-svg]][translate-list]

March 29, 2019 · View on GitHub

build status codecov


校对✔

进入到 每个算法中 还是 英文, 搞搞

翻译的原文与日期最新更新更多
commit⏰ 2018 7.27last中文翻译

提示: 其实对应, 每个算法里面多数是维基百科, 的内容, 可能自我查找一些中文材料,理解会好一点 ❤

贡献

欢迎 👏 勘误/校对/更新贡献 😊 具体贡献请看

生活

If help, buy me coffee —— 营养跟不上了,给我来瓶营养快线吧! 💰


本仓库包含了多种基于 JavaScript 的算法与数据结构。

每种算法和数据结构都有自己的 README 并提供相关说明以及进一步阅读和 YouTube 视频。

我们正在编写一本书, 详细解释主要算法。 如果您希望在“JavaScript算法”一书中收到通知 发布会, 订阅 这里.

数据结构

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

B - 初学者, A - 进阶

算法

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

算法主题

算法范式

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

如何使用本仓库

安装依赖

npm install

执行测试

npm test

按照名称执行测试

npm test -- 'LinkedList'

Playground

你可以在./src/playground/playground.js文件中操作数据结构与算法, 并在./src/playground/__test__/playground.test.js中编写测试。

然后, 只需运行以下命令来测试你的 Playground 是否按无误:

npm test -- 'playground'

有用的信息

引用

▶ YouTube

大O符号

大O符号中指定的算法的增长顺序。

Big O graphs

源: Big O Cheat Sheet.

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

大O标记法计算10个元素计算100个元素计算1000个元素
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

数据结构操作的复杂性

数据结构连接查找插入删除
数组1nnn
nn11
队列nn11
链表nn11
哈希表-nnn
二分查找树nnnn
B树log(n)log(n)log(n)log(n)
红黑树log(n)log(n)log(n)log(n)
AVL树log(n)log(n)log(n)log(n)

数组排序算法的复杂性

名称最优平均最坏内存稳定
冒泡排序nn^2n^21Yes
插入排序nn^2n^21Yes
选择排序n^2n^2n^21No
堆排序n log(n)n log(n)n log(n)1No
归并排序n log(n)n log(n)n log(n)nYes
快速排序n log(n)n log(n)n^2log(n)No
希尔排序n log(n)取决于差距序列n (log(n))^21No