集合的复杂性::插入
complexity of set::insert
我读到集合中的插入操作只需要log(n)时间。这怎么可能?
要插入,首先我们在排序数组中找到新元素必须所在的位置。使用二叉搜索,它需要log(n)。然后,要插入该位置,所有跟随它的元素都应向右移动一个位置。再过一会儿。
我的怀疑是基于我的理解,即集合是作为数组实现的,元素按排序顺序存储。如果我的理解是错误的,请纠正我。
>std::set
通常实现为红黑二叉搜索树。 在此数据结构上插入具有 O(log(n)) 复杂性的最坏情况,因为树保持平衡。
插入到集合时,内容不会移动。它通常不存储为向量或数组,而是存储为二叉树。您要做的就是添加一个新的叶节点,这需要 O(1)。所以在总插入中需要 O(log(n))<</p>
中间数据结构 红黑树 |||插入 1 个元素 log(n) 时间 |||n 元素 nlog(n) 时间
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如何在c++中只将键插入到bimap的一侧
- 如何将结构插入到集合中并打印集合的成员
- C++json插入数组
- Visual Studio 2019:插入多个C++风格的单行注释
- nlohmann-json将一个数组插入到另一个数组中
- 有效地使用std::unordered_map来插入或增加键的值
- 具有未知值时的时间复杂性
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 在使用链接列表实施队列时,为什么插入复杂性o(1)
- 此插入方法的时间和空间复杂性
- 提高插入排序的运行时复杂性
- 集合的复杂性::插入
- 将排序范围插入关联容器的复杂性
- map/set :: 插入是否提供了正确的迭代器提示,它的复杂性是多少?
- 将N个项插入到空std::映射的复杂性
- 标准::unordered_multiset插入的复杂性