复制位集的复杂度是多少?和位掩码一样吗?

What is the complexity of copying a bitset? Is it the same as that for a bit mask?

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

我正在尝试衡量位掩码的有用性,特别是在竞争性编程的背景下。

谢谢!

复制位掩码不是 constant-time。它的位数为 O(n),就像任何其他必须接触结构的每个元素一次的操作一样。

一般来说,C++ bitset 对象的行为应该与 hand-rolled 整数位掩码相当。例如,对 bitset<32> 的操作应该与对 uint32_t.

的等效按位操作执行相同

当你说某事是 O(N) 时,你是在谈论它的 渐近复杂性。 "Asymptotic" 在这里很重要。这意味着你是说事物的实际复杂性 接近 N 的一些线性函数,因为 N 无限制地增加。

所以,了解 N 是什么很重要。在 bit-mapped 集合的情况下,它可能是可以在(或不在)集合中的唯一元素的数量。但是,当您谈论适合 int 的数据结构时,N 是什么?在那种情况下,N 怎么能无限增加呢?

如果事物不 缩放,则谈论其渐近复杂性没有任何意义。 int 不缩放。 int 就是 int。说 int 上的操作是 O(1) 或 O(anythingelse) 就此而言。