Download presentation
Presentation is loading. Please wait.
1
表达式树构建实例与扩展 Stardust D.L. 2017/11/6
2
代码实现(C#)-树结构
3
代码实现(C#)-核心算法 见MathExpr.cs
4
表达式树可视化 如果我们让计算机把表达式树画出来是不是好理解了呢? Let’s go!
5
扩展1-表达式树的形状 你发现了什么?
6
扩展2-基于表达式树的运算 有了表达式树,计算表达式的值就非常容易 每个节点先递归进入子节点,计算子节点的结果 计算完成后,再计算当前节点
递归完成后,根节点的结果就是答案
7
扩展3-核心算法与操作项的关系 我们把表达式中的每个数值,每个运算符称作操作项。 核心算法与运算符具体是什么有关吗?
核心算法关心运算符的什么性质? 核心算法与具体数值有关吗? 核心算法对数值项的要求是什么?
8
抽象! 当我们发现核心算法并不关系具体操作项时 我们便可以将操作项抽象 只需保证核心算法要求的特点不被破坏即可!
9
扩展4-抽象化 我们重新设计算法(此处涉及少量面向对象思想(封装))-伪码
Def build_exprtree(expr, symbols, variables): Divide the expr into items Deal each item 这样有什么好处?
10
Code Version 2 (Simple OOP Design Mode)
11
数学表达式的运算符配置
12
扩展5-解析逻辑表达式 我们现在拥有了这样一个利器,为什么只用它来计算数学表达式呢? 只要我们稍稍改一下运算符的配置……
前段时间折磨人的逻辑表达式难道不是很容易搞定吗?
13
扩展6-逻辑表达式的真值表 别忘了我们还能用变量代替具体数值 只要我们遍历所有变量取值,不就……
14
总结 数学表达式解析->抽象->逻辑表达式等表达式解析 抱歉时间有点长,希望能让大家有所启发 谢谢大家!
Similar presentations