无分支搜索程序技术解析
1. 实验设定
在所有实验中,操作的元素为 4 字节整数,且确保输入元素是唯一的。执行时间使用 C 标准库中的 gettimeofday 函数测量,分支预测错误和缓存缺失的测量则借助 valgrind(版本 3.7.0)中的模拟器完成。每个实验重复 10⁶ 次,并报告所有测试运行的平均值。实验主要用于初步验证,而非对搜索程序进行全面的实验评估。将程序移植到其他计算机上,其行为与测试计算机上相似,但运行时间高度依赖于计算机架构、编译器和操作系统等环境因素,有兴趣的读者可在自己的平台上验证结果。
2. 搜索程序
- 节点结构 :假设二叉搜索树的节点存储一个元素和三个指针,分别指向左子节点、右子节点和父节点。对于节点
x,用(*x).element()、(*x).left()、(*x).right()和(*x).parent()表示这四个字段的值。 - 比较方式 :传统搜索算法常依赖三向比较(小于、大于或等于),但这里假设只能进行双向比较,模拟三向比较需要两次双向比较。使用双向分支的搜索程序仅在每一层进行一次元素比较。
- 搜索逻辑 :假设搜索元素
v,测试是否向左移动(当v < (*x).element()),若不满足则可能相等,
超级会员免费看
订阅专栏 解锁全文
5090

被折叠的 条评论
为什么被折叠?



