社区
C++ 语言
帖子详情
布尔表达式 快速求值
勉励前行
2008-11-28 12:46:29
例 a b c 為整數:
( (a>b) && (b<c) && 0) || (1 && 0 && 1 && (a> 5) || (a>c)))*(c == b)
如何算最快? 聽說有短路的算法,很快,不知道如何做短路避免多余的測試。
...全文
197
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是在问这个么?
expr:用于Go的
表达式
评估引擎:
快速
,非图灵完整,动态键入,静态键入
表达式
是返回值(主要但不限于
布尔
值)的单行代码。 它旨在简化,提高速度和提高安全性。 该软件包的目的是允许用户使用配置内部的
表达式
来实现更复杂的逻辑。 它是建立业务规则引擎的理想人选。 这个想法是让我们...
程序设计方法(How_To_Design_Programs)-MIT.pdf
8.5
布尔
值
表达式
70 8.6 变量定义 71 8.7 结构体的定义 72 第二部分 任意数目数据的处理 第9章 复合数据类型之二:表 77 9.1 表 77 9.2 任意长的表的数据定义 80 9.3 处理任意长的表 82 9.4 设计自引用数据定义的...
Python 编程基础
从基础的数据类型,如整数、字符串和
布尔
值,到更高级的概念,如正则
表达式
和命名空间,这里都有详尽的解释和示例。 专栏首先介绍了Python的五种基础数据类型,
快速
掌握如何存储和操作数据。将学习到Python的八种...
balancedParentheses:ThoughtWorks的
快速
任务-expressionParser
balancedParentheses检查代码是否将
表达式
作为输入并返回
布尔
值(如果
表达式
具有平衡括号和平衡方括号,则为true,否则为false)
PHP5与MySQL5从入门到精通.rar
2.2.1
布尔
型 2.2.2 整型 2.2.3 浮点型 2.2.4 字符串 2.2.5 数组 2.2.6 对象 2.2.7 资源 2.2.8 NULL 2.2.9 类型转换 2.3 变量 2.3.1 变量的赋值 2.3.2 预定义变量 2.3.3 变量作用域 2.3.4 可变变量 ...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章