dfs深度优先的搜索
1.设计简单:不会涉及到对象之间复杂的交互,而交互就容易带来问题
2.非常可靠:这是一种广泛使用的语法分析方法,可以相信它的拓展能力
qwe
```x * x+x * x```求导
先从后向前找到第一个`+`
分解为`x * x`与`x * x`
左式从后向前找到第一个*分解为$x$与$x$
右式从后向前找到第一个*分解为$x$与$x$
左式的左边执行求导发现是基本项$x$求导为$1$
同理左式的右边,右式的左边,右式的右边也被求导
左式乘法合并就是$$ x * 1 + 1 * x $$
右式乘法合并就是$$ x * 1 + 1 * x $$
整个式子合并就是左式加右式
1.整个函数叫parse的话。分解出左式右式后执行 parse(左式) prase(右式) 并根据中间的符号合并
2.我们能执行到找乘法的for的已经先把所有的加减法都去除了,能执行到找乘法的$ for $之后的已经先把所有的乘除法都去除了,还能执行的只有基本情况了比如 $ 1 $ , $ x $ , $ sin(x) $ 这种。
** (但我实现上先判断的基本情况,可以减少之后特判的压力) **
3.这其中显然合并的过程需要维护项才能进行高效合并,这怎么设计,需要什么对象,对象要有什么属相,什么方法,当然有能力的同学也可建起表达式树然后启发式搜索合并,但一般简化处理即可
4.分解的过程面向对象的设计,需要将找+,找*的过程写成addFinder等。之后基本情况的处理也可以分开成各各专家。
Main | 5.444444444444445 | 49.0 |
ParsePare | 1.9166666666666667 | 23.0 |
StringHelper | 2.3076923076923075 | 30.0 |
Term | 2.935483870967742 | 91.0 |
Tester | 3.6666666666666665 | 11.0 |
Total | 204.0 | |
Average | 3.0 | 40.8 |
原文:https://www.cnblogs.com/woafrnraetns/p/12520429.html