社区
C#
帖子详情
挺有难度的数学表达式问题。
xiaoqhuang
2006-10-24 03:40:33
如,有一string 型数学表达式:
1+2 和 2+1,按四则运算法则来说是一样的。
我一数组里有很多数学表达式,有些稍复杂点,如:
(3*5+3*3)
(3*3+3*5)
(5*3+3*3)
(3*3+5*3)
或
(5-1/10)*5
5*(5-1/10)
都是一样的
怎么把这些重复的去掉呢?
编译原理里有个逆波兰表示法,如:a+b写成ab+;(a+b)*c写成ab+c*,这个应该会有帮助。
...全文
218
11
打赏
收藏
挺有难度的数学表达式问题。
如,有一string 型数学表达式: 1+2 和 2+1,按四则运算法则来说是一样的。 我一数组里有很多数学表达式,有些稍复杂点,如: (3*5+3*3) (3*3+3*5) (5*3+3*3) (3*3+5*3) 或 (5-1/10)*5 5*(5-1/10) 都是一样的 怎么把这些重复的去掉呢? 编译原理里有个逆波兰表示法,如:a+b写成ab+;(a+b)*c写成ab+c*,这个应该会有帮助。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoqhuang
2006-10-25
打赏
举报
回复
我的办法是比较+和*运算符2边的数,小的放左边
遇到
(1+2)*3
和
3*(1+2)
这样的,先用JS算出()内的值+0.1,再和后面数比较,小的放前面,所有上面只会是3*(1+2)
呵呵,可能还会有些重复的吧,没仔细测过。
livode
2006-10-24
打赏
举报
回复
刚才给的将逆波尔表示式反推得方法可以实现楼主要的,但是效率太差。
如果比较生成的树,应该会好点。
livode
2006-10-24
打赏
举报
回复
将表达数转换为树,排序叶节点,相同就说明原表达式一样。
转换树方法参阅任意一本编译原理书籍
========================================
不行的,只有叶结点相同,根节点不同也不行的。
逆波尔表示式就是树的后根遍历得到的结果。
xiaoqhuang
2006-10-24
打赏
举报
回复
将表达数转换为树,排序叶节点,相同就说明原表达式一样。
转换树方法参阅任意一本编译原理书籍
=====================================
编译原理忘得差不多了,而且还重修过。
知道编译原理也不知怎么弄到C#里面用。
xiaoqhuang
2006-10-24
打赏
举报
回复
并不是结果一样就要去掉的,只要把能用运算规则替换成相同的表达式去掉。
我现地先用排序,就是左边小于运算符(+、*)右边的数,去掉了一部分。(-、/运算不变)
但还有一部分去不掉。
如:
(1+2)*3
和
3*(1+2)
乘号2边运算的结果都是3
shrinerain
2006-10-24
打赏
举报
回复
将表达数转换为树,排序叶节点,相同就说明原表达式一样。
转换树方法参阅任意一本编译原理书籍
myvicy
2006-10-24
打赏
举报
回复
其实可以直接用js计算出这些表达式的值然后再将相同的去掉。
livode
2006-10-24
打赏
举报
回复
我说个思路:
将(3*5+3*3)进行逆波兰表示,即:35*33*+。然后将此逆波兰表达式反推,当遇到+,*时,生成两个表达式。如:35*33*+ ---> 35* + 33* 和 33* + 35*
| |
/ \ / \
3*5+33* 5*3+33* 3*3+35* 3*3+35*
/ \ / \ / \ / \
3*5+3*3 3*5+3*3 5*3+3*3 5*3+3*3 3*3+3*5 3*3+5*3 3*3+3*5 3*3+5*3
然后将表达式进行匹配。
bobo0124
2006-10-24
打赏
举报
回复
订一个规则: 远算符左面的远算数必须小于等于右面的数
myvicy
2006-10-24
打赏
举报
回复
把复杂的表达式帖几个出来看看。
早起晚睡
2006-10-24
打赏
举报
回复
编译原理里有个逆波兰表示法,如:a+b写成ab+;(a+b)*c写成ab+c*就用这个 但是我也不会
UP一下
联机手写
数学
表达式
识别方法综述
3. **结构复杂度**:复杂的
数学
表达式
包含多个层次的嵌套结构,识别
难度
极大。 4. **噪声处理**:手写过程中不可避免会出现噪声(如多余笔画、抖动等),需要有效的噪声过滤技术。 #### 五、发展趋势 随着人工智能...
c++实现字符串
表达式
求值(逆波兰式)
在程序设计中,可能碰到需要对字符串
数学
表达式
求值的
问题
,常用的方法是解析
表达式
,生成二叉树,然后进行计算。编译器就是使用这种方法来解析程序中的
表达式
的。这种方法实现起来有点
难度
,需要考虑运算符的优先级...
表达式
计算_离散
数学
课程设计
本课程设计的主题是“
表达式
计算”,主要涵盖了
表达式
的识别与转换,这涉及到计算机处理
数学
表达式
的基本方法。我们将深入探讨三种常见的
表达式
表示方式:前缀
表达式
(也称为波兰表示法)、中缀
表达式
(我们日常使用...
Java
表达式
求值2.0
对于
数学
表达式
,可以使用后缀
表达式
(逆波兰表示法)简化计算。对于更复杂的逻辑或条件
表达式
,需要处理逻辑与(&&)、逻辑或(||)以及短路行为。 5. **异常处理**:在处理
表达式
时,可能遇到类型不匹配、除数为...
计算
数学
表达式
的程序设计
计算
数学
表达式
的程序设计
C#
111,097
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章