最佳(optimal)置换算法_JavaScript 算法与数据结构

0d7bbc2f432fda4d4f2476d700bca9e4.gif更多精彩,请点击上方蓝字关注我们!

f92b246ee5616811ede866c49d15f956.png

83930b61f42419b417bd29018a011d0e.png

README.md

JavaScript 算法与数据结构

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

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

数据结构

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

  • 链表

  • 队列

  • 哈希表

  • 优先队列

  • 字典树

  • 二分查找

  • AVL 树

  • 红黑树

  • 图 (有向图与无向图)

  • 并查集

算法

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

算法主题

  • 数学

    • 阶乘

    • 斐波那契数

    • 素数检测 (排除法)

    • 欧几里得算法 - 计算最大公约数(GCD)

    • 最小公倍数 (LCM)

    • 整数拆分

  • 集合

    • 笛卡尔积 - 多集合结果

    • 幂集 - 该集合的所有子集

    • 排列 (有/无重复)

    • 组合 (有/无重复)

    • 洗牌算法 - 随机置换有限序列

    • 最长公共子序列 (LCS)

    • 最长递增子序列

    • Shortest Common Supersequence (SCS)

    • 背包问题 - "0/1" and "Unbound" ones

    • 最大子数列问题 - BF算法 与 动态编程

  • 字符串

    • 莱温斯坦距离 - 两个序列之间的最小编辑距离

    • 汉明距离 - 符号不同的位置数

    • 克努斯-莫里斯-普拉特算法 - 子串搜索

    • 字符串快速查找 - 子串搜索

    • 最长公共子串

  • 搜索

    • 二分查找

  • 排序

    • 冒泡排序

    • 选择排序

    • 插入排序

    • 堆排序

    • 归并排序

    • 快速排序

    • 希尔排序

    • 深度优先搜索 (DFS)

    • 广度优先搜索 (BFS)

    • 深度优先搜索 (DFS)

    • 广度优先搜索 (BFS)

    • 戴克斯特拉算法m - 找到所有图顶点的最短路径

    • 贝尔曼-福特算法 - 找到所有图顶点的最短路径

    • 判圈算法 - 对于有向图和无向图(基于DFS和不相交集的版本)

    • 普林演算法 - 寻找加权无向图的最小生成树(MST)

    • 克鲁斯克尔演算法 - 寻找加权无向图的最小生成树(MST)

    • 拓撲排序 - DFS 方法

    • 关节点 - Tarjan算法(基于DFS)

    • 桥 - 基于DFS的算法

    • 欧拉路径与一笔画问题 - Fleury的算法 - 一次访问每个边缘

    • 哈密顿图 - 恰好访问每个顶点一次

    • 强连通分量 - Kosaraju算法

    • 旅行推销员问题 - 尽可能以最短的路线访问每个城市并返回原始城市    

  • 未分类

    • 汉诺塔

    • 八皇后问题

    • 骑士巡逻

    

算法范式

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

BF算法 - 查找所有可能性并选择最佳解决方案

  • 最大子数列

  • 旅行推销员问题 - 尽可能以最短的路线访问每个城市并返回原始城市

  • 贪心法 - 在当前选择最佳选项,不考虑以后情况

背包问题

  • 戴克斯特拉算法 - 找到所有图顶点的最短路径

  • 普里姆算法 - 寻找加权无向图的最小生成树(MST)

  • 克鲁斯卡尔算法 - 寻找加权无向图的最小生成树(MST)

分治法 - 将问题分成较小的部分,然后解决这些部分

  • 二分查找

  • 汉诺塔

  • 欧几里得算法 - 计算最大公约数(GCD)

  • 排列 (有/无重复)

  • 组合 (有/无重复)

  • 归并排序

  • Quicksort

  • 树深度优先搜索 (DFS)

  • 图深度优先搜索 (DFS)

动态编程 - 使用以前找到的子解决方案构建解决方案

  • 斐波那契数

  • 莱温斯坦距离 - 两个序列之间的最小编辑距离

  • 最长公共子序列 (LCS)

  • 最长公共子串

  • 最长递增子序列

  • 最短公共子序列

  • 0-1背包问题

  • 整数拆分

  • 最大子数列

  • 贝尔曼-福特算法 - 找到所有图顶点的最短路径

回溯法 - 类似于 BF算法 试图产生所有可能的解决方案,但每次生成解决方案测试如果它满足所有条件,那么只有继续生成后续解决方案。否则回溯并继续寻找不同路径的解决方案。

  • 哈密顿图 - 恰好访问每个顶点一次

  • 八皇后问题

  • 骑士巡逻

B & B

如何使用本仓库

安装依赖

npm install

执行测试

npm test

按照名称执行测试

npm test -- -t 'LinkedList'

Playground

你可以在 ./src/playground/playground.js

文件中操作数据结构与算法,并在

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

中编写测试。

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

npm test -- -t 'playground'

有用信息

大O符号

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

28661f9f75ee97dbcd0536c8ebcb3826.png

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

1e29f5a3a7edd48bc012761aafde9602.png

数据结构操作的复杂性

49550a7eb3bbc6680fde193de4652b99.png

数组排序算法的复杂性

92714867fe969b80cb2d8e94f0542528.png

996967dd969d239cc5cadc3418286ca4.pngEND

48389fcf59545cba4772e8a6b8089ba5.png

碧茂课堂精彩课程推荐:

1.Cloudera数据分析课;

2.Spark和Hadoop开发员培训;

3.大数据机器学习之推荐系统;

4.Python数据分析与机器学习实战;

8c374ba2fc59252fd5d66115dd7852cd.png

详情请关注我们公众号:碧茂大数据-课程产品-碧茂课堂

现在注册互动得海量学币,大量精品课程免费送!

f03f6571ed1b21df5b22a55c62f2b282.png

关注最新行业动态,

加群进行技术交流!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值