插入多组的运行时间

Posted

技术标签:

【中文标题】插入多组的运行时间【英文标题】:Runtime of inserting into multi set 【发布时间】:2014-01-26 01:53:29 【问题描述】:

插入多集合的总体运行时间是多少,假设我要遍历十亿个元素并插入多集合,多集合保持排序。我的最坏情况运行时是多少?

【问题讨论】:

您的意思是复杂性?你的意思是 STL 多组?请更具体一点。单行问题通常很糟糕。 en.cppreference.com/w/cpp/container/multiset/insert#Complexity 如果您的意思是实际运行时间以秒为单位,那么这取决于复制/移动该类型对象需要多长时间,并且无法真正回答问题。运行它看看。如果您的意思是复杂性,那么“十亿”这个数字是完全无关紧要的(尽管它确实排除了在 32 位机器上做它的可能性)。 【参考方案1】:

根据http://www.sgi.com/tech/stl/MultipleAssociativeContainer.html,插入单个元素的复杂度为O(log n);对于插入长度为 N 的序列,它是 O(N log n)。

如果您真的想要时间,而不是渐近复杂度,您可以为不同的值(例如 1000、10,000)计时,然后从那里计算比例常数。实际方程为 t = A n log n + C。

当然,下次您在不同的硬件上运行时,A 和 C 的值会发生变化。

【讨论】:

+ C 部分应该可以忽略不计(假设我们是物理学家:D) "实际方程为t = A n log n + C"——不一定。例如,它可能是A n log n + B n + C,并且仍然是O(n log n)。我猜想,与n 成比例的术语很可能是因为n 是在多重集中创建的元素的数量,并且创建元素(忽略有关查找放置位置的部分)可能大致保持不变成本。正如 Paranaix 所说,C 可能很小:这是将零元素插入多重集所花费的时间:-) 在N的高值的限制下变得可以忽略不计。但是为了计算A的值,你可以使用小得多的N值,然后不忽略拟合会更好C. 是的,可能会有一个与n成比例的术语

以上是关于插入多组的运行时间的主要内容,如果未能解决你的问题,请参考以下文章

跨记录组的时间间隔计算

分区组的SQL运行余额计算

根据早期线程组的结果运行顺序线程组 - JMeter

对多组列求和

初学者需要IPython 与 Jupyter Notebook 吗?

可以为具有更多死元组的表的实时数据库运行真空完整详细命令吗?