![](/img/trans.png)
[英]What is the Time Complexity, Space complexity and Algorithm for strstr() function in C++?
[英]What is the complexity of copying a variable in C++
我的一个朋友说,位掩码比位集更好,因为复制位集需要O(N)时间,而复制位掩码只需要O(1)时间,因此对于动态编程等应用程序来说,它要快得多。 所以我想知道所有其他数据类型是否相同?
例如,此代码块的复杂性是什么?
vector <int> vec1 = {1,2,3,4,5,6,7,8,9,10};
vector <int> vec2 = vec1;
如果是O(N),为什么会这样呢? 不应该像做某件事一样是O(1)
int x = 530210;
int y = x;
将会?
要了解操作的复杂性,首先必须定义您的计算模型。 特别是,您必须定义哪些操作是O(1)以及哪些操作是免费的。
例如,如果您正在查看需要大量硬盘访问的程序,则只会考虑从磁盘读取一个块作为一项操作,而对内存的访问则是免费的。
在位掩码和位集的示例中,您可能正在计算内存块复制操作。 然后,复制适合一个内存块的位掩码仅花费一份内存副本。 但是,在此模型中,复制位掩码仍然为O(N),因为大的位掩码将跨越许多存储块。 更准确地说,如果b是一个内存块中的位数,而N是位掩码中的位数,那么您需要ceil(N / b)存储块复制操作来复制位掩码。
复制长度为N
的向量的方法有几种:
O(1)
向量复制操作 O(N)
元素复制操作 O(T)
,则为O(NT)
个度量单位 顺便说一句,您的朋友关于bitset
是错误的,否则您会误解。 的优点bitset
是数据结构被优化以利用并行执行的低水平的形式,可以由单个线程来完成的优点-即64位整数运算可以用来在64个不同的位同时工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.