Clrs提出了用于间隔搜索的伪代码,该伪代码用于查找与树T中的间隔i重叠的间隔。但是我发现,通过我自己的一些修改,它可以以恒定因子运行得更快。
clrs伪代码类似于
INTERVAL-SEARCH(T, i)
x = T.root
while x != T.nil and i does not overlap x.int
if x.left != T.nil and x.left.max ≥ i.low
x = x.left
else x = x.right
return x
但是,我知道您是否将其更改为
INTERVAL-SEARCH(T, i)
x = T.root
while x != T.nil and i does not overlap x.int
if x.left != T.nil and x.left.max ≥ i.low
x = x.left
else if i.high > x.int.low and x.right.max ≥ i.low
x = x.right
else x = T.nil
return x
由于代码向右移动,所以它的左移时间不再重要,因为它的T.nil或x.left.max x.high 如果是前者,则向右走是有意义的,因为右侧仍然可以找到x.high≥i.low的间隔,但是如果是后者,则右侧没有间隔将改变以下事实: x.low> i.high。同样,如果x.right.max 我知道它不会改变渐近的运行时间,但是我很好奇,因为我不理解为什么书不只陈述最优化的伪代码,因为这样看来更优化。而且,如果代码很早就进入x.right,它可能会以更快的速度运行。