我很好奇是否有人能向我解释无分支二进制搜索实现。我在最近的question中看到过它,但我无法想象它是如何实现的。我认为如果项目数量非常大,可以避免分支。
答案 0 :(得分:6)
我将假设您正在讨论句子“在您想要支持的域中创建所有完美正方形的static const
数组,并对其执行快速无分支二进制搜索。”在this answer中找到。
“无分支”二进制搜索基本上只是一个展开的二进制搜索循环。只有事先知道要搜索的数组中的项目数(如果它是static const
),这才有效。如果手动编写的时间太长,您可以编写一个程序来编写展开的代码。
然后,您必须基准您的解决方案,看它是否真的比循环更快。如果你的无分支代码太大,它将不适合CPU的快速指令缓存,并且运行时间比等效循环要长。
答案 1 :(得分:1)
如果一个函数根据正确项目与当前项目的位置返回+1,-1或0,则可以将位置初始化为列表大小/ 2,并逐步调整到位置/ 2,然后每次比较后做位置+ =方向*步长;步长=步长/ 2。迭代直到stepsize为零。