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

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

【问题讨论】:

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

标签: c++ performance algorithm multiset


【解决方案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成比例的术语
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 2020-06-24
  • 2017-08-18
  • 2020-12-13
  • 2021-01-28
  • 1970-01-01
相关资源
最近更新 更多