- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在WikiPedia Binary Search
的文章中有一个名为Deferred detection of equality
的部分,其中介绍了二进制搜索的某种“优化”版本,如下所示:
int binary_search(int A[], int key, int imin, int imax)
{
while (imax > imin)
{
int imid = (imin + imax) / 2;
if (A[imid] < key)
imin = imid + 1;
else
imax = imid;
}
if((imax == imin) && (A[imin] == key))
return imin;
else
return KEY_NOT_FOUND;
}
据称这是比传统教科书二分查找更好的版本,因为....算法每次迭代只使用一个条件分支
这是真的?我的意思是 if
指令在汇编中被翻译成 CMP
和 Branch
指令,所以我想不出 if-else
优于 if-else if-else
在高级语言中是否存在我应该考虑的差异? “延迟”版本的代码在我看来更紧凑,但是在如何形成 if-else
语句方面是否有优化或惩罚?
最佳答案
关键概念是它每次迭代 使用较少的条件。也就是说,相等性检查已移到 while
循环之外,因此它只运行一次,而在基本版本中,每次都需要检查它¹。
也就是说,我不确定在使用优化形式时是否真的存在可衡量的差异。例如,考虑一下:
注意事项:
¹ 其实是另一种等式比较移出时不需要检查的条件,但概念上没有区别。
关于java - `if else` 和 `if-else if-else` 之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319038/
我觉得 for(int i = 0; i < 2; i++) 和 for(int i = 0; i < 2; ++i) 不应该做同样的事情。对于第二个例子,从循环开始 i 应该等于 1 对我来说更符合
我试图牢牢掌握异常情况,以便改进我的conditional loop implementation .为此,我进行了各种实验,扔东西,看看会被抓到什么。 这个让我惊喜不已: % cat X.hs mo
我只是想回答一个问题,但我遇到了一些我不明白的事情!为什么如果我在文件中使用内联 CSS 或 CSS,如本例中的颜色,结果就不一样! 代码相同,但第一段是绿色,第二段是红色! 我真的不明白为什么? 谢
我目前正在学习 CSS 并进行试验,我偶然发现了输出中的这种差异。所以这是代码: .red-text { color: red;
"""module a.py""" test = "I am test" _test = "I am _test" __test = "I am __test" ============= ~ $ p
在向 Firestore 写入文档时,我经常看到 serverTimestamp() 标记和 new Date() 对象之间的差异不为零。 差异范围从几 秒到几十 分钟。 他们不是在做同样的事情吗?
据我了解,2.675 和 numpy.float64(2.675) 都是相同的数字。然而,round(2.675, 2) 给出 2.67,而 round(np.float64(2.675), 2) 给
问题本身的描述很简单。我正在测试 C++11 中 std::thread 库和 boost::thread 库的区别。 这些的输出: #include #include #include int
我只是想将文本文件读入 pyspark RDD,我注意到 sqlContext.read.load 之间的巨大差异和 sqlContext.read.text . s3_single_file_inp
SC.exe 和 InstallUtil 都可以安装/卸载 Windows 服务。但它们的工作方式似乎并不相同。 有什么区别? 例如,InstallUtil 失败(找不到某些文件或依赖项错误),而 S
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我认为Thread对象就像是带有名称和静态Thread.CurrentThread()的抽象对象,就像访问Thread对象的方式一样。显然,这是错误的假设。。是这样的吗?
我是一名优秀的程序员,十分优秀!