草庐IT

complexity-theory

全部标签

c++ - C++去除字符串中连续重复的字符

这是一个字符串问题。首先删除所有重复的长度为1的连续子串,然后删除长度为2的子串,依此类推...例如,如果我们有这样的字符串->abcababceccced删除长度为1的子串后,我们将得到abcababceced删除长度为2的子串后,我们将得到abcabced删除长度为3的子串后,我们将得到abced这将是最终的输出我设计了一个算法,但是它有O(n3)的复杂度,这是不可取的。我的算法如下charstr[20]="abcababceccced";intlen=strlen(a);for(i=1;i如果有人能用C++为这个特定问题提出一个不太复杂的算法,我将不胜感激。

c++ - 使用求和预测算法的理论平均情况效率和增长顺序

我需要使用求和/西格玛表示法预测算法相对于其输入大小的平均案例效率,以得出最终答案。许多资源使用求和来预测最坏情况,但我找不到有人解释如何预测平均情况,因此不胜感激分步回答。该算法包含一个嵌套的for循环,最内层循环中的基本操作:[代码编辑]编辑:如果进入第二个for循环并且没有break或return语句,则基本操作的执行将始终在第二个for循环内执行。但是:第一个for循环的末尾有return语句,它取决于基本操作中产生的值,因此数组的内容确实会影响算法每次运行时基本操作将执行的总次数。传递给算法的数组具有随机生成的内容我认为预测的平均案例效率是(n^2)/2,使其增长n^2阶/n

c++ - 测试我正在编写的程序

干草!我想创建一个测试来找出程序的复杂性(时间和空间)。功能功能...我想到了使用库“time”这样做,并在运行大量“n”的函数时计算秒数。有没有人有更好的主意?也许它已经存在?:)谢谢!阿米哈伊 最佳答案 看起来是一个非常合理的方法,至少在时间复杂度上是这样。确保您的程序以有用的格式输出,例如CSV或制表符分隔,以便您可以轻松地将其复制/加载到电子表格中。要获得可靠的空间复杂度可能有点棘手。为此,您可能想要修改您的函数,以便它们返回有用的指标。例如,如果算法的主要数据结构是固定元素的映射,那么在运行期间返回映射的最大大小将为您提供

c++ - inplace_merge : What causes a complexity of N*log(N) vs. N-1?

根据关于inplace_merge的C++文档,该算法的复杂度是“如果使用内部缓冲区,则比较线性(N-1),否则为NlogN(其中N是范围[first,last)中的数字元素)”.它们所说的内部缓冲区是什么意思,是什么导致了O(N-1)与O(NlogN)的复杂性? 最佳答案 扩展其他答案:至少在libstdc++和libc++中,“内部缓冲区”是通过调用std::get_temporary_buffer提供的,STL中一个晦涩但标准的例程。此例程已在C++17中弃用,主要是因为它令人困惑且有点愚蠢。参见thisquestion有关详

c++ - 这个程序的复杂度是多少

我在HackerEarth上解决了一个问题。问题是Phineas正在他的后院build一座城堡来打动Isabella(很奇怪,不是吗?)。他已经把所有东西都准备好了。甚至一楼也已经完工。现在是时候制作上半部分了。这就是事情变得有趣的地方。由于Ferb在粉刷栅栏一整天后正在屋子里sleep(你们帮了他,不是吗!),Phineas必须自己完成所有工作。他很擅长这个,他要你做的就是操作迷你起重机来吊起石头。围墙的石头已经切割好了,等着你去搬。现在我们没有Ferb来操作小型起重机,他是这方面的专家,我们必须尽快完成这项工作。我们给出了起重机的最大起重能力,以及每block石头的重量。由于它是一

c++ - 创建一个函数,检查数组是否具有两个相反的元素,复杂度小于 n^2。 (C++)

创建一个函数来检查一个数组是否有两个相反的元素,复杂度小于n^2。让我们使用数字。显然最简单的方法是:boolopposite(int*arr,intn)//n-arraylength{for(inti=0;i请问各位有没有想出一个复杂度小于n^2的算法。我的第一个想法如下:1)排序数组(最坏情况复杂度算法:n.log(n))2)创建两个新数组,填充原始数组中的负数和正数(到目前为止我们有->n.log(n)+n+n=n.log(n))3)...以某种方式比较两个新数组以确定它们是否具有相反的数字我不太确定我的想法是否正确,但我愿意接受建议。 最佳答案

c++ - 可以使用 memset 来填充一组 std::complex<float> 吗?

具体来说,我想知道这一行是否:memset(cjzyp,(0,0),size_cjzy*sizeof(std::complex));将填写cjzyp,complex的数组s,具有复数零值((0,0))。 最佳答案 std::memset将转换为unsignedchar的int作为第二个参数,它不会工作。使用std::fill代替http://www.cplusplus.com/reference/algorithm/fill/cjzyp=newstd::complex[100]std::fill(cjzyp,cjzyp+100,st

c++ - 为什么我得到 "recursive type or function dependency context too complex"?

为什么此代码在VisualC++中会产生以下错误?是编译器的错误还是代码无效?templateinttest(int=sizeof(test()));templateinttest(int);intmain(){returnsizeof(test());}Recursivetypeorfunctiondependencycontexttoocomplex 最佳答案 test在您使用它时尚未声明。C++11中经常出现类似的问题:templateautotest()->decltype(test());templateautotest(

c++ - 从模板函数返回 double 或 complex<double>

我正在编写一些函数模板来重载*矩阵类的运算符。我用double类型的矩阵做了很多工作和complex.是否可以编写一个返回正确类型的模板函数?例如:templatematrixoperator*(constTa,constmatrixA){matrixB(A.size(1),A.size(2));for(intii=0;ii我想要返回类型V由T*U的自然结果决定.这可能吗?编辑:后续question我提出的问题收到的答案提供了适用于此处的额外信息。 最佳答案 在C++11中,您可以使用替代函数声明语法:#include//forde

c++ - std::multimap::equal_range 的时间复杂度

下午好,我想知道std::multimap::equal_range的时间复杂度是多少?它是Big-O(n)还是BIG-0(logn)。我记得读过std::multimap::erase的时间复杂度“是被删除序列长度的对数加上线性时间。”http://frank.mtsu.edu/~csjudy/STL/Multimap.html> 最佳答案 C++03标准,23.1.2中的表69(“关联容器要求”)表示equal_range具有对数复杂度。 关于c++-std::multimap::e