草庐IT

McCabe复杂度

全部标签

c++ - std::includes in c++ 算法的复杂性

std::includes算法采用两个排序范围并检查set2是否在set1中(即set2的每个元素是否包含在set1中)?我想知道为什么eel.is/c++draft说这个算法的复杂度至多是2·(N1+N2-1)比较?相同的声明在:1.cppreference2.cplusplus在我看来,它应该最多只有2·N1比较,最坏的情况是max(set2)>=max(set1)。 最佳答案 我同意你的结论。来自AkiSuihkonen'sanswer的交错集合示例是错误的,因为算法会尽快退出2.cppreference上的示例实现有一个递增

c++ - 检查哪个对象实例化函数调用的复杂测试

我有一个结构(可以是类)并在另一个类中定义,如图所示structA{somedata_A;somespecificimplementation_A(someclass*S1);};classsomeclass{somedata_someclass;Aa;};main(){someclassc1,*c2;c2=&c1;c1.a.somespecificimplementation_A(c2);}如何验证c2确实是c1的引用?请原谅我提出这个例子,因为很明显c2是c1的引用。更新:A不存储指向某个类的指针 最佳答案 如果您对parent

c++ - C++中的make_heap是如何实现到3N复杂度的?

请问C++中make_heap的算法是什么使得复杂度为3*N?我唯一能想到的通过插入元素来制作堆的方法具有O(NLogN)的复杂性。非常感谢! 最佳答案 您将堆表示为一个数组。第i个元素下方的两个元素位于位置2*i+1和2*i+2。如果数组有n个元素,那么从末尾开始,取出每个元素,让它“落”到堆中的正确位置。这是要运行的O(n)。为什么?那么对于n/2元素,没有子元素。对于n/4,有一个高度为1的子树。对于n/8,有一个高度为2的子树。对于n/16,有一个高度为3的子树。依此类推。所以我们得到系列n/22+2*n/23+3*n/24

c++ - 解析 C++ 的复杂性

出于好奇,我想知道关于解析C++的一些“理论”结果是什么。让n成为我的项目的大小(例如,在LOC中,但由于我们将处理big-O它不是很重要)C++的解析时间复杂度是O(n)吗?如果不是,复杂性如何?C(或Java或任何语法意义上更简单的语言)是否在O(n)中解析?C++1x是否会引入更难解析的新特性?非常感谢引用! 最佳答案 我认为出于问题的目的,不同的人以不同的方式解释了“解析”一词。从狭义的技术意义上讲,解析只是验证源代码是否与语法匹配(或者甚至可能构建树)。有一个相当普遍的民间定理,它说您根本无法解析C++(在这个意义上),因

c++ - 密集和稀疏矩阵的高效(时间和空间复杂度)数据结构

我必须读取一个文件,其中存储了一个包含汽车的矩阵(1=BlueCar,2=RedCar,0=Empty)。我需要编写一个算法来移动矩阵中的汽车:蓝色的移动向下;红色的移动向右;有一个轮,所有蓝色的都移动,还有一个轮移动所有的红色。在读取文件之前,我不知道矩阵大小以及它是密集还是稀疏,所以我必须实现两种数据结构(一种用于密集,一种用于稀疏)和两种算法.我需要达到可能的最佳时间和空间复杂度。由于矩阵大小未知,我想将数据存储在堆上。如果矩阵密集,我想使用类似的东西:shortint**M=newshortint*[m];shortint*M_data=newshortint[m*n];for

c++ - C++ 中复杂用户定义类型的 RVO

在我昨天的编程面试中,我必须编写的一个程序最终有这样的东西:structBlob{//basicfieldcontainingimageblobstatistics.};std::vectorfind_blobs(constImage&...){std::vectorblobs;//...returnblobs;}我熟悉returnvalueoptimization(RVO),所以我刚刚提到返回vector不会导致流行编译器上的复制(最后一行有一个return语句,并且在我编写的代码中没有控制路径可以返回另一个对象)。但是,面试官告诉我,自Blob可能是复杂的用户定义类型(UDT),编

Note1: 算法的时间复杂度和空间复杂度

目录---前言1.算法效率1.1算法的复杂度2.时间复杂度2.1 时间复杂度的概念2.2 大O的渐进表示法2.3常见时间复杂度计算举例2.3.1示例12.3.2 示例22.3.3 示例32.3.4 示例42.3.5 示例52.3.6 示例62.3.7 示例72.3.8示例83.空间复杂度3.1示例13.2 示例23.3 示例33.4 示例44.复杂度oj练习4.1消失的数字4.1.1思路4.1.2代码4.2 旋转数组OJ4.2.1思路4.2.2代码---前言本篇文章相对于前面的顺序表和链表而言,比较简单。主要说明算法的时间复杂度和空间复杂度的问题,学习完之后还有一些练习题帮助巩固今天的知识。同

c++ - 为什么C++ STL map容器的复杂度是O(log(n))?

对于vector和list等C++STL容器,查找元素并插入或删除它们的复杂性是不言自明的。然而,对于map容器,尽管我从阅读中知道访问和插入复杂度/性能是O(log(n)),但我无法弄清楚为什么。显然,我对map的理解程度还不够,因此非常感谢对这个主题的一些启发。 最佳答案 映射或集合的元素包含在树结构中;每次检查树的节点时,您都​​会确定要查找/插入的元素是小于还是大于该节点。您需要执行此操作的次数(对于适当平衡的树)是log2(N),因为每次比较都会排除一半的可能性。 关于c++-

c++ - c++ 中的复杂 dynamic_cast

我在C++中有以下情况:抽象基类Abstract1和Abstract2。它们是无关的。类Foo派生自Abstract1和Abstract2我在一个编译单元中,我没有关于类Foo的信息(没有声明,没有定义)。只有Abstract1和Abstract2是已知的。(实际上,Foo甚至定义在一个DLL中)dynamic_cast是否允许从Abstract1*转换为Abstract2*?这是标准吗? 最佳答案 你所描述的是所谓的cross-cast。对于dynamic_cast(v),标准在[expr.dynamic.cast]/8中指定If

c++ - "constant"复杂度的真正含义是什么?时间?复制/移动的数量?

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter为指导。9年前关闭。我可以想到C++中的三个操作,它们在某种意义上可以被描述为具有“恒定”的复杂性。我已经看到一些关于这意味着什么的争论(*),在我看来,我们可以说“所有这些操作都是恒定的,但有些比其他操作更恒定”:-)(编辑2:如果您已经认为自己知道答案,请在过早进入之前阅读此问题的一些辩论:Whatdatastructure,exactly,aredequesinC++?很