『设计』Laura.Compute 设计思路
前言:
前一篇文章 《『开源』也顺手写一个 科学计算器:重磅开源》 ,继 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
算法不足:
算法 最大的 不足 在于:算法 的 元数据类型 是 固定的,算法的分析 是 内置的;
—— 元数据 不具备 扩展性 是 算法 最大的不足;
最后的总结:
其实,上面的 算法拆析过程,想必 各位 已经知道 算法的核心思想了;
而至于 算法 的 内存检索,内存排序 这些 高级功能,都只是 基于算法功能 的 额外顺手 实现,并没有多少 技术含量;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库