【问题标题】:What is the complexity of C++ bitset constructor that converts from long?从 long 转换的 C++ bitset 构造函数的复杂性是多少?
【发布时间】:2019-02-02 01:55:44
【问题描述】:

我的猜测是 O(n),其中 n 是数字。位。或者它是恒定的 w.r.t. n?我的意思是它不应该只是能够从内存中复制位吗?

【问题讨论】:

  • 我认为没有指定任何复杂性,但 O(n) 听起来很合理。我有点好奇你为什么要问?只是单纯的好奇,还是您有更具体的问题?
  • 但是long 在编译时有固定的给定位数,那么如果 n 总是相同的数字,O(n) 和恒定复杂度之间有什么区别?
  • 我假设它是恒定的,只要 bitset 的大小小于或等于unsigned long long的大小
  • 它可能会根据实现而改变,因此了解您的编译器会有所帮助。例如,the source of the GNU STL 表明它是 O(1)。
  • @Foon:这听起来绝对是过早的优化。

标签: c++ time-complexity bitset std-bitset


【解决方案1】:

从数学上讲,long 有一个固定的长度,因此复制它的内容是恒定时间的操作。另一方面,您需要将 bitset 中的其余位清零,并且您无法在相对于 bit_set 的长度小于线性的时间内完成。所以,理论上你不能比 O(n) 做得更好,其中 n 是位集的长度。

我想从渐近复杂度的角度来看,您可以放心地假设构造函数的复杂度与将分配的内存清零相同。

然而,这种分析仅对 n 的巨大值具有一定的价值,并且对我来说使用长构造函数来初始化百万位的位集没有多大意义。因此,如果 bitset 的大小与 long 的大小相同,则它实际上是恒定时间。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2014-11-08
    • 2022-06-13
    • 2012-09-09
    • 2011-11-11
    • 2013-01-04
    相关资源
    最近更新 更多