复制位集的复杂性有多大?它和位掩码一样吗?

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

本文关键字:掩码 一样 复杂性 复制      更新时间:2023-10-16

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

我试图衡量位屏蔽的有用性,特别是在竞争性编程的背景下。

谢谢!

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

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

当你说某物是ON)时,你是在谈论它的渐近复杂性。 "渐近"在这里是一个重要的词。 这意味着你说事物的实际复杂度接近 N 的某个线性函数,因为 N 无界增加。

因此,知道N是什么很重要。 对于位映射集,它可能是可以在集合中(或不在集中)的唯一元素的数量。 但是,当您谈论适合int的数据结构时,N是什么? 在这种情况下,N怎么能无限制地增加呢?

如果一个事物不可扩展,那么谈论事物的渐近复杂性就没有任何意义 int无法缩放。 int只是一个int. 说int上的操作是 O(1) 或 O任何其他)是没有任何意义的。