首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中复制变量的复杂性是多少?

在C++中复制变量的复杂性是多少?
EN

Stack Overflow用户
提问于 2017-01-07 10:26:59
回答 3查看 2.9K关注 0票数 1

我的一位朋友说,位掩码比位集更好,因为复制位集需要O(N)时间,而复制位掩码只需O(1)时间,这样对于动态编程之类的应用程序来说要快得多。所以我想知道所有其他数据类型都是一样的吗?

例如,这段代码的复杂性是什么?

代码语言:javascript
运行
复制
vector <int> vec1 = {1,2,3,4,5,6,7,8,9,10};
vector <int> vec2 = vec1;

如果是O(N),为甚麽呢?应该是O(1)就像做这样的事情

代码语言:javascript
运行
复制
int x = 530210;
int y = x;

会是吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-07 10:44:33

你有vec1,它是一辆std::vector<T>,由这辆卡车代表,它的拖车上有一个黑色集装箱。

(资料来源: bigcommerce.com)

现在,它的黑容器里有数以百万计的文件(用黑色容器,std::vector<T>对元素的记忆)。现在,你想把这些文件复制到另一种类似的工具,vec2。你怎样才能做到最好?照片-复制的复杂性是什么?它将是O(论文的数量)。

现在,假设你想移动的内容.std::vector所需要做的就是把它的黑色容器从卡车上分离出来,然后把它连接到另一辆卡车上.这使得将容器的复杂性移动为O(1)。

票数 8
EN

Stack Overflow用户

发布于 2017-01-07 12:35:50

要理解操作的复杂性,首先必须定义计算模型。特别是,您必须定义哪些操作是O(1),哪些操作是免费的。

例如,如果您正在查看需要大量硬盘访问的程序,您将只考虑将一个块从磁盘读取为一个操作,而将内存访问视为空闲。

在位掩码和位集的示例中,您可能正在计算内存块复制操作。然后,复制一个适合于一个内存块的位掩码只需要一个内存副本。但是,复制位掩码在这个模型中仍然是O(N),因为一个大位掩码将跨越许多内存块。更准确地说,如果b是一个内存块中的位数,N是位掩码中的位数,那么您需要ceil(N/b)内存块复制操作来复制位掩码。

票数 1
EN

Stack Overflow用户

发布于 2017-01-07 12:41:55

复制长度为N的向量可以通过以下几种方法来测量:

  • O(1)向量复制操作
  • O(N)元素复制操作
  • O(NT)度量单位,如果元素复制操作为O(T)

顺便说一句,你的朋友对bitset的看法是错误的,或者你误解了。bitset的优点是对数据结构进行了优化,以利用可以由单个线程执行的低级别并行执行形式--即64位整数操作可以同时在64位上工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41520379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档