关于平衡树区间删除
  • 板块学术版
  • 楼主__Allen_123__
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/1/22 19:05
  • 上次更新2023/10/24 03:19:26
查看原帖
关于平衡树区间删除
710031
__Allen_123__楼主2023/1/22 19:05

rt,这是别人让我帮忙问的,我没有达到这个实力。


我想手写 STL,实现 set 中的平衡树时遇到了问题。 set 有一个 erase(first,last) 的函数,可以删除 [first,last)[\mathrm{first},\mathrm{last}) 的结点,cppreference 说它的复杂度是 O(logn+d)\mathcal O(\log n+d)nnset 的大小,dd 是两个迭代器的距离) 但是我看了标准库的实现(stl_tree.h),是这样的:

template<typename _Key, typename _Val, typename _KeyOfValue,
           typename _Compare, typename _Alloc>
    void
    _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
    _M_erase_aux(const_iterator __first, const_iterator __last)
    {
      if (__first == begin() && __last == end())
    clear();
      else
    while (__first != __last)
      erase(__first++);
    }

我觉得这是 O(d×logn)\mathcal O(d\times \log n),很可能是我分析错了。 就想问一下这个为什么是 O(d+logn)\mathcal O(d+\log n)

2023/1/22 19:05
加载中...