JavaScript 算法与数据结构
本仓库包含了多种基于 JavaScript 的算法与数据结构。
每种算法和数据结构都有自己的 README 并提供相关说明以及进一步阅读和 YouTube 视频。
数据结构
数据结构是在计算机中组织和存储数据的一种特殊方式,它可以高效地访问和修改数据。更确切地说,数据结构是数据值的集合,它们之间的关系、函数或操作可以应用于数据。
算法
算法是如何解决一类问题的明确规范。 算法是一组精确定义操作序列的规则。
算法主题
- 数学
- 集合
- 字符串
- 莱温斯坦距离 - 两个序列之间的最小编辑距离
- 汉明距离 - 符号不同的位置数
- 克努斯-莫里斯-普拉特算法 - 子串搜索
- 字符串快速查找 - 子串搜索
- 最长公共子串
- 搜索
- 排序
- 树
- 图
- 深度优先搜索 (DFS)
- 广度优先搜索 (BFS)
- 戴克斯特拉算法m - 找到所有图顶点的最短路径
- 贝尔曼-福特算法 - 找到所有图顶点的最短路径
- 判圈算法 - 对于有向图和无向图(基于DFS和不相交集的版本)
- 普林演算法 - 寻找加权无向图的最小生成树(MST)
- 克鲁斯克尔演算法 - 寻找加权无向图的最小生成树(MST)
- 拓撲排序 - DFS 方法
- 关节点 - Tarjan算法(基于DFS)
- 桥 - 基于DFS的算法
- 欧拉路径与一笔画问题 - Fleury的算法 - 一次访问每个边缘
- 哈密顿图 - 恰好访问每个顶点一次
- 强连通分量 - Kosaraju算法
- 旅行推销员问题 - 尽可能以最短的路线访问每个城市并返回原始城市
- 未分类
算法范式
算法范式是基于类的设计的通用方法或方法的算法。 这是一个比算法概念更高的抽象,就像一个 算法是比计算机程序更高的抽象。
-
BF算法 - 查找所有可能性并选择最佳解决方案
-
贪心法 - 在当前选择最佳选项,不考虑以后情况
-
分治法 - 将问题分成较小的部分,然后解决这些部分
-
动态编程 - 使用以前找到的子解决方案构建解决方案
npm install
执行测试
npm test
按照名称执行测试
npm test -- -t 'LinkedList'
Playground
你可以在./src/playground/playground.js
文件中操作数据结构与算法,并在./src/playground/__test__/playground.test.js
中编写测试。
然后,只需运行以下命令来测试你的 Playground 是否按无误:
npm test -- -t 'playground'
有用的信息
引用
大O符号
大O符号中指定的算法的增长顺序。
以下是一些最常用的 大O标记法 列表以及它们与不同大小输入数据的性能比较。
大O标记法 | 计算10个元素 | 计算100个元素 | 计算1000个元素 |
---|---|---|---|
O(1) | 1 | 1 | 1 |
O(log N) | 3 | 6 | 9 |
O(N) | 10 | 100 | 1000 |
O(N log 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 | 1 |
哈希表 | - | n | n | n |
二分查找树 | n | n | n | n |
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) |
数组排序算法的复杂性
名称 | 最优 | 平均 | 最坏 | 内存 | 稳定 |
---|---|---|---|---|---|
冒泡排序 | n | n^2 | n^2 | 1 | Yes |
插入排序 | n | n^2 | n^2 | 1 | Yes |
选择排序 | n^2 | n^2 | n^2 | 1 | No |
堆排序 | n log(n) | n log(n) | n log(n) | 1 | No |
归并排序 | n log(n) | n log(n) | n log(n) | n | Yes |
快速排序 | n log(n) | n log(n) | n^2 | log(n) | No |
希尔排序 | n log(n) | 取决于差距序列 | n (log(n))^2 | 1 | No |
原文发布时间为:2018年05月25日
原文作者:掘金
本文来源: 掘金 如需转载请联系原作者

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python的三大神器,你知道是哪三大吗?史上最详细的入门教程!
Python的三大神器:装饰器.迭代器与生成器!这就是Python的三大神器,好了废话不多说。直接来上干货吧! 生成器 仅仅拥有生成某种东西的能力,如果不用__next__方法是获取不到值得。 创建一个生成器函数 >>> def scq():... print("11")# 当函数代码块中遇到yield关键字的时候,这个函数就是一个生成器函数... yield 1... print("22")... yield 2... print("33")... yield 3... 把生成器赋值给一个对象 >>> r = scq() 查看r的苏剧类型并且输出r的值 >>> print(type(r),r)<class 'generator'> <generator object scq at 0x000001F117D8DF10> 当执行生成器的__next__的时候,代码会按照顺序去执行,当执行到yield时会返回并提出,yield后面的值就是返回值,然后记录代码执行的位置,并退出 执行结果 C:Python35py...
- 下一篇
大道至简、大智若愚—GO语言最佳详解实践
导读:2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语言来取代C++,这就是Golang。出现在21世纪的GO语言,虽然不能如愿对C++取而代之,但是其近C的执行性能和近解析型语言的开发效率以及近乎于完美的编译速度,已经风靡全球。特别是在云项目中,大部分都使用了Golang来开发,不得不说,Golang早已深入人心。而对于一个没有历史负担的新项目,Golang或许就是个不二的选择。 被称为GO语言之父的Rob Pike说,你是否同意GO语言,取决于你是认可少就是多,还是少就是少(Less is more or lessis less)。Rob Pike以一种非常朴素的方式,概括了GO语言的整个设计哲学--将简单、实用体现得淋漓尽致。 很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东西。 本文大纲: GO语言的发展与现状 发展历史 开发团队 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库