复制bitset的复杂性是多少?它是否与位掩码相同?

时间:2017-01-13 01:33:14

标签: c++ bitmask

与bitset相比,我打算知道性能或位掩码的差异。我知道复制一个位掩码将采用O(1),因为它基本上只是一个整数表示,所以对于位集也是如此,其中每个值由1位表示,因此使其与位掩码的大小相同?或者复制一个bitset需要O(N)时间。

我试图测量位掩码的使用效果,特别是在竞争性编程的背景下。

谢谢!

2 个答案:

答案 0 :(得分:2)

当你说某事是 O N )时,你所说的是渐近的复杂性。“渐近”是一个重要的词这里。这意味着你说的实际复杂性接近 N 的某些线性函数,因为 N无限制地增加。

因此,了解 N 是什么非常重要。在位映射集的情况下,它可能是集合中(或不在集合中)的唯一元素的数量。但是,在谈论适合int的数据结构时, N 是什么?在这种情况下, N 如何无限制地增加?

如果事物不能扩展,那么谈论事物的渐近复杂性没有任何意义。 int不能扩展。 int只是int。说int上的操作是 O (1)或 O anythingelse )是没有任何意义的就此而言。

答案 1 :(得分:1)

复制位掩码不是常量时间。它的位数O(n)就像任何其他必须触摸一次结构的每个元素的操作一样。

一般来说,C ++ bitset对象的行为应与手动整数位掩码相当。例如,bitset<32>上的操作应该与uint32_t上的等效按位操作完全相同。