社区
C++ 语言
帖子详情
布尔表达式 快速求值
勉励前行
2008-11-28 12:46:29
例 a b c 為整數:
( (a>b) && (b<c) && 0) || (1 && 0 && 1 && (a> 5) || (a>c)))*(c == b)
如何算最快? 聽說有短路的算法,很快,不知道如何做短路避免多余的測試。
...全文
242
14
打赏
收藏
布尔表达式 快速求值
例 a b c 為整數: ( (a>b) && (b 5) || (a>c)))*(c == b) 如何算最快? 聽說有短路的算法,很快,不知道如何做短路避免多余的測試。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bfhtian
2008-11-28
打赏
举报
回复
表达式不大对吧,(a>b) && (b <c) && 0直接就为0了,后面的那个也是
sagegz
2008-11-28
打赏
举报
回复
7楼正解!
lc19890326
2008-11-28
打赏
举报
回复
避免多余的判断很简单
当&&操作时,将为0概率大的置前
当||操作时,将为1概率大的置前
toadzw
2008-11-28
打赏
举报
回复
短路就是指的你的用的&& || ,这几个运算符就能达到的功能,不要再有什么算法了;
qingkongyihe2008
2008-11-28
打赏
举报
回复
根据与和或的运算性质,设置最容易判断的条件放其首
jakqigle
2008-11-28
打赏
举报
回复
[Quote=引用 7 楼 zmlovelx 的回复:]
利用短路求值.
&&的比如a&&b&&c... 把最小概率为真的放在最前面,大的依次放在后面,这样如果前面求出某条件为假,那么后面条件被短路,不用求了.返回假
||的比如a||b||c.... 则把最大概率为真的放在最前面,小的依次放在后面,前面如果某条件为真,那么后面的条件语句被短路,
不用求了,返回真.
当然如果判断不出概率,就把最简单的条件语句放在最前面,复杂的放后面.
[/Quote]
顶上!
我觉得也应该把简单的并且常容易一次性计算的逻辑放在最前,这样可以避免再计算后面的复杂运算。但是这个还是要具体问题具体分析的。
liaoweixiaoyu
2008-11-28
打赏
举报
回复
一步一步看吧
帅得不敢出门
2008-11-28
打赏
举报
回复
利用短路求值.
&&的比如a&&b&&c... 把最小概率为真的放在最前面,大的依次放在后面,这样如果前面求出某条件为假,那么后面条件被短路,不用求了.返回假
||的比如a||b||c.... 则把最大概率为真的放在最前面,小的依次放在后面,前面如果某条件为真,那么后面的条件语句被短路,
不用求了,返回真.
当然如果判断不出概率,就把最简单的条件语句放在最前面,复杂的放后面.
勉励前行
2008-11-28
打赏
举报
回复
那只是個例子
我想問的是在布爾表達式求值過程中,如何避免多余的計算。這樣求值速度才可能快。
即
string test = "((a>b) && (b <c) && 0) || (1 && 0 && 1 && (a> 5) || (a>c))*(c == b)" ;
bool R = GetResult(test);
//在求值過程中的方法,用什麼方法算得快些。使用棧可以去括號計算表達式,但要執行全部的操作符及比較運算。那樣不快。
就呆在云上
2008-11-28
打赏
举报
回复
[Quote=引用楼主 PPower 的帖子:]
例 a b c 為整數:
( (a>b) && (b <c) && 0) || (1 && 0 && 1 && (a> 5) || (a>c)))*(c == b)
如何算最快? 聽說有短路的算法,很快,不知道如何做短路避免多余的測試。
[/Quote]
我想应该没有什么最快的说法吧,只是有些情况下可以省略一些计算机步骤
比如
||左边出现了1,那么右边放弃计算
&&左边出现了0,那么右边也不再计算
lbjfeng
2008-11-28
打赏
举报
回复
这个有错误吧,老大,
你的C少了一个啊
其实,就是数学里面的公式化简……0&a=0
1||b=1
MAlice
2008-11-28
打赏
举报
回复
7楼的回答得详细
brookmill
2008-11-28
打赏
举报
回复
LZ的表达式多了个),去掉之后结果是0
brookmill
2008-11-28
打赏
举报
回复
一串&&里面有个0,最后结果就是0
一串||里面有个1,最后结果就是1
LZ是在问这个么?
python
布尔
测试_Python
布尔
函数:用真值优化代码
本文详细介绍了Python中的
布尔
类型,包括
布尔
值的特性、它们作为数字的行为、
布尔
运算符及其短路评估,并通过实例展示了如何在代码中有效利用这些特性。
布尔
值True和False被视为
表达式
,可以参与数学运算,也可以用于
快速
计算满足条件的项数。
布尔
运算符如not用于取反,其在计算时会先
求值
。
Ruby
表达式
的
求值
和类型转换
本文介绍了Ruby中
表达式
求值
的规则及类型转换的方法。Ruby作为动态类型语言,其
表达式
求值
遵循运算符优先级,并支持显式和隐式类型转换。文章还提供了示例代码和最佳实践建议,帮助开发者避免常见错误。
Java代码调试高级技巧:断点条件设置与
表达式
求值
本文深入讲解Java调试的两个核心技巧,即条件断点设置和
表达式
求值
。介绍了条件断点的概念、设置方法、应用场景,以及
表达式
求值
的功能、使用方法和高级技巧。还阐述了组合调试技巧、IDE调试功能对比、最佳实践、高级调试场景,并解决了常见调试问题,可提升调试效率。
C++实现
布尔
表达式
真值表:从词法分析到AST
求值
全解析
本文详细阐述了使用C++实现
布尔
表达式
真值表生成器的完整技术路径,涵盖词法分析(Tokenizer)、基于调度场算法的语法分析与抽象语法树(AST)构建、变量枚举与位运算穷举、以及AST递归
求值
等核心环节。项目采用编译器前端经典架构,支持逻辑运算符优先级、括号嵌套及扩展性设计,强调一次解析多次
求值
的高效性与工程健壮性(异常处理、智能指针内存管理、单元测试)。
C++
表达式
求值
优先级、结合律与
求值
顺序(五十九)
本文介绍了C++
表达式
求值
的优先级、结合律与
求值
顺序。阐述了运算符优先级决定结合方式,结合律决定同级运算符结合方向。还说明了
求值
顺序默认不保证,部分运算符有短路
求值
特性。同时介绍了各类运算符特点,透彻理解这些能避免未定义行为,提高代码性能和可读性。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章