Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm RB树:搜索执行时间_Algorithm_Data Structures_Complexity Theory_Time Complexity_Red Black Tree - Fatal编程技术网

Algorithm RB树:搜索执行时间

Algorithm RB树:搜索执行时间,algorithm,data-structures,complexity-theory,time-complexity,red-black-tree,Algorithm,Data Structures,Complexity Theory,Time Complexity,Red Black Tree,我必须为“算法和数据结构”类项目使用RB树实现一个区间树,因此要求它绘制插入和搜索T(n)。我知道这个函数的上界一定是一条对数曲线,事实上,曲线图正好显示了这一点,但我仍然对“奇怪的函数趋势”有些怀疑。我编写了一个循环,插入一个随机间隔,并在同一步中搜索树中的0

我必须为“算法和数据结构”类项目使用RB树实现一个区间树,因此要求它绘制插入和搜索
T(n)
。我知道这个函数的上界一定是一条对数曲线,事实上,曲线图正好显示了这一点,但我仍然对“奇怪的函数趋势”有些怀疑。我编写了一个循环,插入一个随机间隔,并在同一步中搜索树中的
0
,结果如下:


期待类似的趋势是正确的吗?

这是完全合理的预期

插入到红/黑树中有两个组件:一个基线Θ(logn)组件,用于下降到叶子以插入元素,然后一些额外的“修复”工作来维护红/黑树不变量。事实证明,这第二部分是摊销O(1),这意味着平均而言,修复只需要固定的工作量,但修复工作量不时增加

如果您已经看到了红色/黑色树和2-3-4树之间的联系,这可能会更容易理解。2-3-4树中的插入通常只需向叶节点添加一个键即可停止。每隔一段时间,您必须拆分一个4节点,并将密钥传播到树中较高的节点,这通常会立即停止。但是,每隔一段时间,您就必须拆分一片叶子,然后在上面拆分一个节点,然后将一个关键点向上传播两层。当你做这样的插入时,你会得到一个典型的模式,你会得到一系列的快速操作,然后是一个稍微慢一点的操作,然后是一些更快的操作,然后是一个稍微慢一点的操作,然后是一些更快的操作,然后是一个比其他操作更慢的操作,等等。你似乎在你的图中得到了这个,所以我认为这没什么好担心的


希望这有帮助

我忘了说这个图来自于一个测试台版本,在这个版本中,每次搜索函数迭代的时间都是通过增加一个计数器来计算的;这样做是因为运行时环境应该错误地表示实时执行时间,所以我确信,如果存在问题,那就是进入数据结构/testbenchcheck,如果树的最小值为n=2^k-1,因为在这种情况下,树应该完全平衡,因此将有最小的随机搜索时间。当你搜索T(n)时,它应该是大量搜索的平均值。是的,我确信我的树是平衡的,因为insert的T(n)非常接近对数行为。此外,我试图检查每个插入/搜索周期的rb树属性高度,然后您的图形似乎是正常的。我读这篇文章太晚了,但它非常完整…此外,我已经获得了最大投票数,因此图形应该是正确的…所以,请投赞成票,并同样感谢!!!