Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@hai2007/algorithm

hai2007125MIT0.7.6

🔪 一些前端常用的算法实现合集。

hai2007, algorithm

readme

🔪 algorithm.js - 一些前端常用的算法实现合集

downloads install size CDN Version License GitHub repo stars

Issues

使用的时候遇到任何问题或有好的建议,请点击进入issue,欢迎参与维护!

How to use?

首先你需要通过命令行安装,就像这样:

npm install --save @hai2007/algorithm

安装好了以后,然后引入你需要的算法即可(在具体方法的开头会说明),除此之外,你还可以直接引入全部方法:

import algorithm from '@hai2007/algorithm';

<script src='https://cdn.jsdelivr.net/npm/@hai2007/algorithm@0'></script>

如果是node.js环境,请使用这种方式引入:

let algorithm = require('@hai2007/algorithm');

可以使用的接口

  • algorithm.tree() : 一个可以帮助你快速绘制可视化树图的辅助计算
  • algorithm.xhtmlToJson() : 帮你把一段html字符串变成任意操作的json对象
  • ......等

当然,考虑到web应用打包体积的问题,比如我们希望求解一个字符串表达式的值,我们有algorithm.evalExpress方法,那么,更小提交的引入方式是:

import { evalExpress } from '@hai2007/algorithm/value.js';

evalExpress({a:2},"a+10"); // 结果是数字12

具体的使用你可以查阅文档哦~

如果在使用的时候,发现文档中有的方法无法使用,可能是你的版本过低导致的,你可以点击此处查看版本日志。

算法思想

  • 递归与分治策略

把一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同,递归的解这些子问题,然后把各个子问题的解合并得到原问题的解。

<< 查看例子代码

  • 动态规划

和分治法基本思想有共同的地方,不同的是子问题往往不是独立的,有时母问题要借助子问题的解来判断,因此把已经计算好的问题记录在表格中,后续如果需要查询一下,可以避免重复计算,这是动态规划的基本思想。

不过动态规划具体实现起来多种多样,不过都具有相同的填表格式,通常按照下面步骤设计算法:

1)找出最优解的性质,并刻画其结构特征;

2)递归的定义最优值;

3)以自底向上的方式计算出最优值;

4)通过计算最优值时刻意记录的判断结果来构造最优解。

可以使用该算法思想设计算法的问题一般会具有两个决定性的性质:

1)最优子结构性质;

2)子问题重叠性质。

<< 查看例子代码

  • 备忘录算法

和上面的算法思想差不多,不同的是备忘录为每个解过的子问题建立备忘录以备需要的时候查看,避免了相同的问题计算多次。

一般来说,当一个问题的所有子问题都至少要解一次时,用动态规划比备忘录要好,因为不会有任务暂存且没有多余的计算;当子问题空间中部分问题不必解时,用备忘录比较好。

不过上面不是绝对的,这样说只是想区别一下两个思想的不同,具体的时候还是要根据业务场景来在保证可行的前提下选择更好的方法。

<< 查看例子代码

  • 贪心算法

算法思想很简单,和字面意思一样,每次都选择对自己最有利的,不过这是有条件的,只有在满足条件下每次选择最有利自己的才可以获取最优解。

贪心选择性质和最优子结构性质是该思想最重要的性质:

1)贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择达到。

2)最优子结构性质:当一个问题的最优解包含其子问题的最优解时,称此问题具有此性质。

<< 查看例子代码

  • 回溯法

说的直白点就是深度优先方式系统搜索问题的算法。

<< 查看例子代码

  • 分支限界法

对比回溯法就很容易思考,用广度优先的办法,不断扩大当前节点的孩子为当前节点,主要是求解一个最优解,算法相比回溯法要简单些。

<< 查看例子代码

更多内容,你可以查看在线书籍《算法设计与分析》进行学习~

开源协议

MIT

Copyright (c) 2020-present hai2007 走一步,再走一步。

changelog

v0.1.0: date:2020-11-15 changes:

  -  初始化版本
  -  添加 “基本的树结构位置生成算法” tree.js

v0.1.1: date:2020-11-15 changes:

  -  修复tree.js对于只有一个根节点不兼容问题

v0.1.2: date:2020-11-17 changes:

  -  添加banner打包头说明文字

v0.2.0: date:2020-11-21 changes:

  -  添加 “解析xhtmljson对象返回” xhtmlToJson.js

v0.4.0: date:2020-11-24 changes:

  -  添加 “设置或获取指定对象上字符串表达式对应的值” value.js

v0.4.1: date:2020-11-25 changes:

  -value.js进行一些bug修复
   (
        1.toPath.js中去中括号方法未及时重置需要提前处理记录
        2.analyseExpress.js中添加对于特殊情况的后处理,比如-1等
    )

v0.4.2: date:2020-11-25 changes:

  -  对value.js/evalExpress方法,去掉打印语句
    (去掉打印语句前后执行效率完全不一样,因此有重新发布的价值)

v0.5.0: date:2020-12-06 changes:

  -  为了更好的服务于实际需求,源码采用ES5-语法和接口

v0.5.1: date:2021-01-16 changes:

  -  增加 “xhtmlToJson.js” 对错误的html的兼容能力

v0.6.0: date:2021-06-13 changes:

  -  增加 “把 SCSS 解析成 CSS 的算法实现” scss.js

v0.6.2: date:2021-06-14 changes:

  -  修复 “scss.js” 中选择器空格问题

v0.6.3: date:2021-06-20 changes:

  -  添加算法练习册 ```workbook``` 到发布包中

v0.7.0: date:2021-09-24 changes:

  -  添加 “把一段字符串变成json返回” json.js

v0.7.1: date:2021-09-24 changes:

  -  toJSON方法优化类型转换

v0.7.2: date:2021-10-26 changes:

  -  优化toJSON方法
    (
        1.修复字符串格式错误导致的死循环
        2.兼容js代码注释
    )

v0.7.3: date:2021-12-02 changes:

  -  对 “解析xhtmljson对象返回” xhtmlToJson.js 进行一些优化升级,兼容标签名直接换行错误

v0.7.4: date:2022-02-27 changes:

  -  对底层依赖进行一次必要的升级

v0.7.5: date:2022-03-01 changes:

  -  修复```setValue```中缺失值判断错误

v0.7.6: date:2022-03-23 changes:

  -  优化```toJSON```对一些特殊值的类型判断