Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 如何增加所有键的值谁';s大于或等于O中红黑树中的K乘以D(lgn)_Algorithm_Data Structures_Tree_Binary Search Tree_Red Black Tree - Fatal编程技术网

Algorithm 如何增加所有键的值谁';s大于或等于O中红黑树中的K乘以D(lgn)

Algorithm 如何增加所有键的值谁';s大于或等于O中红黑树中的K乘以D(lgn),algorithm,data-structures,tree,binary-search-tree,red-black-tree,Algorithm,Data Structures,Tree,Binary Search Tree,Red Black Tree,im学习算法atm和我有一个问题,如何在O(lgn)中增加红黑树中大于或等于K乘以D的所有键值 假设红黑树有n个称为S的节点 从(S,K,D)递增二叉搜索树的特性是,对于给定节点,左子树中的所有节点都将小于右子树中的节点,且右子树中的所有节点都将更大。因此,让我们假设根的值为K。然后右子树中的每个节点都需要增加,因为树是平衡的(红黑树)将包含大约一半的节点。因此,您需要执行n/2递增操作或O(n)操作 因此,您所要求的是不可能的如果树中的值与其父级相加,则可以这样做。把这棵树从树上摘下来 所以

im学习算法atm和我有一个问题,如何在O(lgn)中增加红黑树中大于或等于K乘以D的所有键值

假设红黑树有n个称为S的节点


从(S,K,D)递增

二叉搜索树的特性是,对于给定节点,左子树中的所有节点都将小于右子树中的节点,且右子树中的所有节点都将更大。因此,让我们假设根的值为K。然后右子树中的每个节点都需要增加,因为树是平衡的(红黑树)将包含大约一半的节点。因此,您需要执行n/2递增操作或O(n)操作


因此,您所要求的是不可能的

如果树中的值与其父级相加,则可以这样做。把这棵树从树上摘下来

所以13是父项,17是17-13=4,15是15-17=-1。这意味着,当需要实际值时,需要对父节点求和,因此要得到15,需要取13->4->2 13+4-2=15

这样,您就可以在日志n时间内修改大于x的节点

如果我们想用+4修改所有大于23的值,我们先到17,然后到25,也就是>23,然后在25-17=8的相对值上加上4,再增加到12,现在它的所有子项都大了4,然后我们到了22,它更小,所以我们从-3的相对值中减去4,然后得到-7,当我们到达按钮时,我们就完成了。那么节点的值是多少,最初是27,它的13+4+(8+4)+2=31


但是我不想在添加或删除节点时编写代码来重新平衡树。

好吧,伙计,我确实有可能在我即将进行的测试中看到这个问题,这是一个棘手的问题,可以肯定的是,有一条线索说“也许可以保存两个节点之间的差异”@ DOR更好地考虑一棵树,其中所有节点都是“代码> >=K/CODE”>您希望如何访问<代码> N>代码>节点> <代码>日志n>代码>time@dor不,这是不可能的。这个问题有可能比你贴的内容更重要吗?这就是问题所在吗?但如果在上面的树中,您希望将所有大于8的值都增加12,那么当前值为11的节点现在将具有值19,这使其大于根。因此,必须重新平衡树。@JimMischel这是正确的,但这只需要花费logn,它将操作保持在logn。