前言:

前一篇文章 《『开源』也顺手写一个 科学计算器:重磅开源》 ,继 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

算法不足:

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

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

最后的总结:

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

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

『设计』Laura.Compute 设计思路的更多相关文章

  1. 『开源』Slithice 2013 服务器集群 设计和源码

    相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...

  2. 『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布

    项目原因: 参与过各种 分布式项目,有 Socket,Remoting,WCF,当然还有最常用的可以跨平台的 WebService. 分布式编码的时间浪费: 但是,无一例外的,开发分布式程序的开发遵循 ...

  3. 『重构--改善既有代码的设计』读书笔记----Extract Method

    在编程中,比较忌讳的一件事情就是长函数.因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚.因此,今天重构第一个手法就是处 ...

  4. 『重构--改善既有代码的设计』读书笔记----Replace Method with Method Object

    有时候,当你遇到一个大型函数,里面的临时变量和参数多的让你觉得根本无法进行Extract Method.重构中也大力的推荐短小函数的好处,它所带来的解释性,复用性让你收益无穷.但如果你遇到上种情况,你 ...

  5. 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支

    下图Github地址:Mask_RCNN       Mask_RCNN_KeyPoints『计算机视觉』Mask-RCNN_论文学习『计算机视觉』Mask-RCNN_项目文档翻译『计算机视觉』Mas ...

  6. 『计算机视觉』Mask-RCNN_训练网络其二:train网络结构&损失函数

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  7. 『计算机视觉』FPN:feature pyramid networks for object detection

    对用卷积神经网络进行目标检测方法的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度.FPN是ResNet或DenseNet等通用特征提取网络的附加组件,可 ...

  8. 『摄影欣赏』16幅 Romantic 风格照片欣赏【组图】

    今天,我们将继续分享人类情感的系列文章.爱是人类最重要的感觉,也可能是各种形式的艺术(电影,音乐,书,画等)最常表达的主题 .这里有40个最美丽的爱的照片,将激励和给你一个全新的视觉角度为这种情绪.我 ...

  9. 『转载』Debussy快速上手(Verdi相似)

    『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...

随机推荐

  1. IE下实现打印功能

    先贴代码: <html> <head> <style type="text/css"> *{margin:0px;padding:0px;} . ...

  2. DP+单调队列 codevs 1748 瑰丽华尔兹(还不是很懂具体的代码实现)

    codevs 1748 瑰丽华尔兹 2005年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解       题目描述 Descripti ...

  3. 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)

    Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...

  4. JS中的基本运动逻辑思想总结

    总结一下自己今天学习运动的基本思想:‘ [1]对于移动的div,使其在某一个位置停止将其封装成一个函数,仅仅改变speed的正负即可 涉及到问题包括: var time=null; function  ...

  5. 第一次使用Android Studio时你应该知道的一切配置(二):新建一个属于自己的工程并安装Genymotion模拟器

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. Unity手机平台播放影片

    播放视频方法 截止到目前的Unity4.2版本,要在手机平台上播放影片,有两种方法: 使用Unity自带的Move Texture http://docs.unity3d.com/Documentat ...

  7. bundle是什么?

    bundle就是一个数据对象,像Map,HashMap一样key-value键值对的方式存放数据.在android中用于应用程序之间数据传输,不过是要靠对象使用的 谢谢,又知道了一种在Activity ...

  8. LoadRunner参数化MySQL

    准备:安装[msql-ODBC驱动] 一.配置数据源 1.Win7,打开控制面板-系统和安全-管理工具,点击“数据源(ODBC)”. 打开数据源(ODBC),在用户DSN选项卡中点击“添加”按钮,弹出 ...

  9. C语言中,&和&&都是做什么的?

    &按位&&逻辑与 逻辑运算符把各个运算的变量(或常量)连接起来组成一个逻辑表达式.逻辑运算符有4个,它们分别是: !(逻辑非). ||(逻辑或).&&(逻辑与) ...

  10. IO流的练习1 —— 随机获取文本中的信息

    需求:一个文本中有几个名字,随机从中获取一个名字 分析: A:首先把文本中的数据读出 B:再把数据存储到集合中 C:产生一个随机的索引 D:打印出这个索引对应的值 public static void ...