社区
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*,这个应该会有帮助。
...全文
195
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*,这个应该会有帮助。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
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一下
相关推荐
第四版组合
数学
习题答案 第四版组合
数学
习题答案
挺
有用的
第四版组合
数学
习题答案 第四版组合
数学
习题答案
挺
有用的第四版组合
数学
习题答案 第四版组合
数学
习题答案
挺
有用的第四版组合
数学
习题答案 第四版组合
数学
习题答案
挺
有用的第四版组合
数学
习题答案 第四版组合
数学
习题答案
挺
有用的第四版组合
数学
习题答案 第四版组合
数学
习题答案
挺
有用的第四版组合
数学
习题答案 第四版组合
数学
习题答案
挺
有用的第四版组合
数学
习题答案 第四版组合
数学
习题答案
挺
有用的
逆波兰式
在程序设计中,可能碰到需要对字符串
数学
表达式
求值的
问题
,常用的方法是解析
表达式
,生成二叉树,然后进行计算。编译器就是使用这种方法来解析程序中的
表达式
的。这种方法实现起来有点
难度
,需要考虑运算符的优先级,括号的配对,堆栈的使用等等。我们正常情况下看到的
数学
表达式
如果用二叉树遍历的话,恰好是中序遍历,故叫做中序
表达式
。除此之外,还有前序
表达式
,后序
表达式
。如:a+b+c(中序),++abc(前序),a...
人工智能数理基础系列公开课——『看得见 』的
数学
计算机是如何识别人脸的?智能机器人是怎样思考的?搜索引擎是如何工作的?人工智能
数学
基础系列公开课通过人工智能热点
问题
开始,引出其中蕴涵的
数学
原理,然后构建解决实际
问题
的
数学
模型和方法,兼具趣味性与实用性,引导大家主动运用
数学
工具思考与解决实践中遇到的
问题
,为人工智能学习之路夯实
数学
基础。
本次公开课特邀从事计算机视觉研究与一线教学20余年的哈工大屈教授,通过计算机视觉领域的实际应用案例引入人工智能常用的
数学
基础知识,其中包含的公式、定理来自不同的
数学
分支,也体现了人工智能的各种思想,怎样更好的理解这些公式,既不陷入纯
数学
推导的细节,又能为人工智能后续的学习提供支撑,屈教授将为大家解惑。
关于逆波兰式
在程序设计中,可能碰到需要对字符串
数学
表达式
求值的
问题
,常用的方法是解析
表达式
,生成二叉树,然后进行计算。编译器就是使用这种方法来解析程序中的
表达式
的。这种方法实现起来有点
难度
,需要考虑运算符的优先级,括号的配对,堆栈的使用等等。我们正常情况下看到的
数学
表达式
如果用二叉树遍历的话,恰好是中序遍历,故叫做中序
表达式
。除此之外,还有前序
表达式
,后序
表达式
。如:a+b+c(中序),++abc(前序),a
发帖
C#
C#
.NET技术 C#
复制链接
扫一扫
10.9w+
社区成员
64.2w+
社区内容
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2006-10-24 03:40
社区公告
让您成为最强悍的C#开发者