【发布时间】:2011-02-08 18:53:43
【问题描述】:
我很好奇是否有人可以向我解释无分支二进制搜索实现。我在最近的question 中看到了它,但我无法想象它会如何实现。如果项目数量很大,我认为避免分支可能很有用。
【问题讨论】:
标签: algorithm
我很好奇是否有人可以向我解释无分支二进制搜索实现。我在最近的question 中看到了它,但我无法想象它会如何实现。如果项目数量很大,我认为避免分支可能很有用。
【问题讨论】:
标签: algorithm
我将假设您正在谈论“在您想要支持的域中创建一个包含所有完美正方形的static const 数组,并对其执行快速无分支二进制搜索”这句话。发现于this answer。
“无分支”二分搜索基本上只是展开的二分搜索循环。这仅在您事先知道要搜索的数组中的项目数时才有效(就像您在 static const 时一样)。展开的代码如果太长,手工写不出来,你可以写一个程序来写。
然后,您必须对您的解决方案进行基准测试,看看它是否真的比循环更快。如果您的无分支代码太大,它将无法放入 CPU 的快速指令缓存中,并且运行时间会比等效循环更长。
【讨论】:
如果有一个函数根据正确项目相对于当前项目的位置返回 +1、-1 或 0,则可以将位置初始化为列表大小/2,并将步长初始化为位置/2,然后每次比较后做位置+=方向*步长;步长=步长/2。迭代直到步长为零。
【讨论】: