社区
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*,这个应该会有帮助。
...全文
246
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写文章
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一下
喊出
数学
表达式
该博客要求使用C++编写代码,输出C++中
数学
表达式
的运算结果。本题无输入,只需输出
表达式
运算结果。还给出了参考代码,
难度
为1,因
难度
低可能存在较多重复代码。
数学
表达式
的计算——如何捕捉异常
本文介绍了在Delphi中使用异常的方法。Borland已定义很多异常类,可直接使用。文中介绍两种常用异常捕捉方法:TRY...EXCEPT...END和TRY....FINALLY....END,还给出计算
数学
表达式
的程序,支持多种运算,合理运用异常类可简化编程,让程序思路更清晰。
【动态规划】【C++算法】1335 工作计划的最低
难度
本文介绍了一种使用动态规划方法解决工作计划
问题
,计算在给定工作依赖关系和天数下,如何安排任务以达到总
难度
最小。通过实例和代码展示了如何计算每天完成任务的最小
难度
,以及如何处理任务数量小于天数的情况。
关于1+2,有点
难度
的
问题
本文探讨了如何通过字符串拼接实现
数学
表达式
的计算,并提供了两种不同的方法来解决这一
问题
。一种方法是从博客中摘录的,另一种则是为了提高效率而提出的替代方案。
Transformer直接预测完整
数学
表达式
,推理速度提高多个数量级
Meta AI等研究者提出E2E模型,让Transformer直接预测完整
数学
表达式
,通过嵌入器处理输入,经训练后在实验中取得较好结果。此外,作者作为资深码农分享大模型学习经验,提供AGI大模型系统学习路线、视频教程等资料。
C#
111,132
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章