首页 技术 正文
技术 2022年11月15日
0 收藏 808 点赞 4,725 浏览 1279 个字

前言:

前一篇文章 《『开源』也顺手写一个 科学计算器:重磅开源》 ,继 Laura.Compute 算法开源之后,有 博客园 园友 希望公开一下 Laura.Compute算法 的 设计思路——就是本文了。

算法思想:

模拟人为思考过程的算法 —— 算法没有任何 取巧 的成分;

唯一的优势 在于 算法的抽象思想,算法的架构,算法的 先分析,后运算 的执行模式,还有 算法的 简单的插件扩展方式;

执行过程:

比方说 我们要计算  1 + 2 – 3 * 4 / 5 + LEN(‘ShuXiaolong’), 我们知道 最终结果 是 11.6

算法 初始化: 算法 会 寻找所有 可用的扩展插件——算法内置 插件 就多达 30多个;

算法 分析:

需用插件:      通过关键字,找出 +,-,*,/,LEN 这几个 执行插件——排除多余 不会被用到 执行插件,节省效率;

拆析表达式:   事先分析元数据和参数,按照 运算优先级,一步步 将 表达式 分析为 唯一片段,具体如下:

1 + 2 – 3 * 4 / 5 + LEN(‘ShuXiaolong’)

{Express_0} + {Express_1} – {Express_2} * {Express_3} / {Express_4} + LEN({Express_5})

{Express_0} + {Express_1} – {Express_6} / {Express_4} + LEN({Express_5})

{Express_0} + {Express_1} – {Express_7} + LEN({Express_5})

{Express_0} + {Express_1} – {Express_7} + {Express_8}

{Express_9} – {Express_7} + {Express_8}

{Express_10} + {Express_8}

{Express_11}

算法 执行:

最后的 唯一片段 为 {Express_11},他的 参数片段 为 {Express_10},{Express_8} ,他的 运算插件 为 +;

运算插件+ 需要 先计算 {Express_10}  {Express_8} 的值,

而 {Express_10} 的 参数片段 为 {Express_9},{Express_7},他的 运算插件 为 -;

       以此递归 …

算法抽象:

抽象,是 一种 求同 的过程 —— 在 不同需求逻辑中,找出其共性,并 设计出 最少核心类,最易扩展性 的过程;

于是,根据 上面的 执行过程,我们 的 核心对象就是:

表达式片段对象: {Express_数字} 这是他们的 唯一键值;他具备 参数片段集合;他有 运算插件

运算插件对象:表达式中 的 不同 关键字,对应的 运算方式 —— 还得适应 后期的修改维护;

Ps.算法的王牌之处:运算符(+-*/)函数(LEN) 使用的是 同一抽象对象,同一扩展方式;

算法元数据:

算法元数据类型包括: String,Int,Double,Boolean,Array

算法不足:

算法 最大的 不足 在于:算法 的 元数据类型 是 固定的,算法的分析 是 内置的;

—— 元数据 不具备 扩展性 是 算法 最大的不足;

最后的总结:

其实,上面的 算法拆析过程,想必 各位 已经知道 算法的核心思想了;

而至于 算法 的 内存检索内存排序 这些 高级功能,都只是 基于算法功能 的 额外顺手 实现,并没有多少 技术含量;

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,489
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,904
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,489
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,290