我的一位朋友说,位掩码比位集更好,因为复制位集需要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;会是吗?
发布于 2017-01-07 10:44:33
你有vec1,它是一辆std::vector<T>,由这辆卡车代表,它的拖车上有一个黑色集装箱。

(资料来源: bigcommerce.com)
现在,它的黑容器里有数以百万计的文件(用黑色容器,std::vector<T>对元素的记忆)。现在,你想把这些文件复制到另一种类似的工具,vec2。你怎样才能做到最好?照片-复制的复杂性是什么?它将是O(论文的数量)。
现在,假设你想移动的内容.std::vector所需要做的就是把它的黑色容器从卡车上分离出来,然后把它连接到另一辆卡车上.这使得将容器的复杂性移动为O(1)。
发布于 2017-01-07 12:35:50
要理解操作的复杂性,首先必须定义计算模型。特别是,您必须定义哪些操作是O(1),哪些操作是免费的。
例如,如果您正在查看需要大量硬盘访问的程序,您将只考虑将一个块从磁盘读取为一个操作,而将内存访问视为空闲。
在位掩码和位集的示例中,您可能正在计算内存块复制操作。然后,复制一个适合于一个内存块的位掩码只需要一个内存副本。但是,复制位掩码在这个模型中仍然是O(N),因为一个大位掩码将跨越许多内存块。更准确地说,如果b是一个内存块中的位数,N是位掩码中的位数,那么您需要ceil(N/b)内存块复制操作来复制位掩码。
发布于 2017-01-07 12:41:55
复制长度为N的向量可以通过以下几种方法来测量:
O(1)向量复制操作O(N)元素复制操作O(NT)度量单位,如果元素复制操作为O(T)顺便说一句,你的朋友对bitset的看法是错误的,或者你误解了。bitset的优点是对数据结构进行了优化,以利用可以由单个线程执行的低级别并行执行形式--即64位整数操作可以同时在64位上工作。
https://stackoverflow.com/questions/41520379
复制相似问题