集合的复杂性::插入

complexity of set::insert

本文关键字:插入 复杂性 集合      更新时间:2023-10-16

我读到集合中的插入操作只需要log(n)时间。这怎么可能?

要插入,首先我们在排序数组中找到新元素必须所在的位置。使用二叉搜索,它需要log(n)。然后,要插入该位置,所有跟随它的元素都应向右移动一个位置。再过一会儿。

我的

怀疑是基于我的理解,即集合是作为数组实现的,元素按排序顺序存储。如果我的理解是错误的,请纠正我。

>std::set通常实现为红黑二叉搜索树。 在此数据结构上插入具有 O(log(n)) 复杂性的最坏情况,因为树保持平衡。

插入到集合时,内容不会移动。它通常不存储为向量或数组,而是存储为二叉树。您要做的就是添加一个新的叶节点,这需要 O(1)。所以在总插入中需要 O(log(n))<</p>

div class="answers">

中间数据结构 红黑树 |||插入 1 个元素 log(n) 时间 |||n 元素 nlog(n) 时间