复制位集的复杂性有多大?它和位掩码一样吗?
What is the complexity of copying a bitset? Is it the same as that for a bit mask?
我打算了解与位集相比性能或位掩码的差异。我知道复制位掩码会占用 O(1),因为它基本上只是表示为整数,所以位集也是如此,其中每个值由 1 位表示,因此使其大小与位掩码相同?或者复制位集需要 O(N) 时间。
我试图衡量位屏蔽的有用性,特别是在竞争性编程的背景下。
谢谢!
复制位掩码不是恒定时间。它在位数上O(n)
,就像任何其他必须接触结构的每个元素一次的操作一样。
一般来说,C++ bitset
对象的行为应与手动卷制的整数位掩码相当。例如,对bitset<32>
的操作应与对uint32_t
执行等效的按位运算相同。
当你说某物是O(N)时,你是在谈论它的渐近复杂性。 "渐近"在这里是一个重要的词。 这意味着你说事物的实际复杂度接近 N 的某个线性函数,因为 N 无界增加。
因此,知道N是什么很重要。 对于位映射集,它可能是可以在集合中(或不在集中)的唯一元素的数量。 但是,当您谈论适合int
的数据结构时,N是什么? 在这种情况下,N怎么能无限制地增加呢?
如果一个事物不可扩展,那么谈论事物的渐近复杂性就没有任何意义。 int
无法缩放。 int
只是一个int
. 说int
上的操作是 O(1) 或 O(任何其他)是没有任何意义的。
相关文章:
- 位移操作和位掩码未检测到重复字符
- OpenCV - 带有掩码的absdiff
- 生成前缀位掩码
- 如何从__m64值的 lsb 创建 8 位掩码?
- 如何对无符号长 int 进行位掩码?
- 删除K的背景掩码-意味着Python或C++中的集群/
- 如何在C++中优雅地处理位掩码
- 将uint64_t位掩码转换为 std::布尔数组
- 使输入二进制掩码适应 ITK 网格生成器
- 如何从 getifaddr 读取子网掩码
- 优化从子位掩码生成父位掩码
- 基于模式创建位掩码作为 constexpr
- 使用二进制掩码 C++ ITK 获取感兴趣区域
- C++中的运行时位复制(位掩码)
- 根据 IP 和掩码C++打印所有 IP
- C++设置"blank"或重置 ifstrean (ios) 的异常掩码
- OpenCV 检测带有掩码的斑点
- OPENCV:如何创建多边形形状的掩码
- 递归函数,用于使用位掩码 c++ 显示集合的所有子集
- 复制位集的复杂性有多大?它和位掩码一样吗?