- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么 cppreference.com 会列出 vectors' push_back() 的分摊时间复杂度但是 unordered containers' insert() 的平均和最差时间复杂度?是否有不需要重新哈希的实现?
最佳答案
分摊的复杂性对于无序关联容器没有意义。
对于 vector ,特定插入的复杂性不取决于被插入元素的值,而仅取决于先前插入和删除的历史记录。因此可以计算摊销复杂度:插入 N 个元素,取整体复杂度并除以 N。其中一些插入非常快,而一些需要重新分配,即 O(size())。摊销复杂度是它们的平均值,不依赖于插入值的分布。
对于无序容器,复杂度可能取决于插入元素的值和容器中已经存在的元素的值。作为一种边缘情况,考虑一个 n 无序集合,其中所有元素的哈希值都相等,并且正在添加另一个具有相同哈希值的元素。该操作是 O(size()) 并且将始终保持 O(size()),无论您添加多少元素。 OTOH 如果插入的元素落入空桶中,则复杂度为 O(1)。在不知道插入值的分布的情况下,您无法对这些情况取平均值。
关于c++ - 为什么 cppreference.com 没有列出无序容器的 insert() 的分摊时间复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70952629/
关于getting started Apple Pay 页面上显示 Apple Pay 支持“分批发货”。这在实践中是如何实现的?我知道如何从成功的 PKPayment 中获取 token 。 获得该
我了解到动态数组,如 std::vector,在达到其容量时将其容量加倍,从而使 push_back 操作 O(1) 摊销时间。 但是,为什么首先需要这样做?在 vector 末尾为一个元素分配空间并
我正在寻找具有以下基本属性的类似集合的容器类: 已摊销 O(1) 插入时间,忽略重复插入 有 O(n) 次迭代时间(特别是 O(capacity) 是 Not Acceptable ) 重用内存/仅在
我是一名优秀的程序员,十分优秀!