草庐IT

algorithm

全部标签

c++ - C++ 中的 sort() 可以有 n^2 性能吗?

在尝试评估程序的性能时,我总是将sort()函数视为性能最差的n^2函数。但是,我遇到了一个维基百科页面:sort(C++)其中指出GNUC库sort()首先使用某种称为Introsort的混合排序算法,然后进行插入排序。Introsort的相应页面声称该算法具有nlogn的最坏情况性能。但是,由于我对这个算法不熟悉,所以对于sort()我还是有以下担心:1)GNUsort()使用的混合算法能否保证O(nlogn)的性能?如果是这样,nlogn的常量开销有多大?2)是否有任何其他实现可能导致sort()的性能比这更差(或更好,哪个更好)?编辑:回复Kevin:提到的sort()是std

c++ - remove_if 有问题(删除几次后停止删除)

下面的代码想要获取一个字符串并只输出英文字母表中的小写字母。stringsimplifyString(stringword){word.erase(remove_if(word.begin(),word.end(),[](charletter){return!isalpha(letter);}));transform(word.begin(),word.end(),word.begin(),tolower);returnword;}intmain(){strings="a.b.c.d.e.f.g.h.";cout输出为:abcdefgh.f.g.h。所以代码工作然后停止工作。这到底是怎

c++ - 迭代器和反向迭代器的区别

以下两个代码片段有什么区别。vectora;//initializationcodesort(a.rbegin(),a.rend());和vectora;//sameinitializationasabovesort(a.begin(),a.end(),comp);其中comp是下面给出的bool函数boolcomp(inti,intj){returni>j;}为了说明,下面的代码给出了WA而此代码给出AC对于SPOJ问题XMAX.AC之间的唯一区别和WA是使用的sort()的版本。 最佳答案 这两个函数调用不给出相同的答案,因为s

c++ - 数字在数组中出现的次数

我在一本C++书中找到了一个练习,上面写着“编写一个函数来计算一个数字在数组中出现的次数。”。一切正常,程序运行正常。但是练习还说函数应该是递归的。如何使递归函数像这样工作?#includeintcount(intnumber,intarray[],intlength){intcounter=0;for(inti=0;i 最佳答案 使用这个count函数:intcount(intnumber,intarray[],intlength){if(length==0)return0;return(number==*array)+count

c++ - For循环与使用相对较旧的编译器的标准库算法

我知道没有任何混淆的代码会更好for在其中循环。尽可能重用标准库算法总是好的。但是,我发现迭代器和算法的语法看起来真的很困惑。我想举一个我当前项目的真实例子:我想复制vector>in的内容进入vectorout.我看不出两者之间的区别:for(inti=0;i还有:std::transform(in[0].begin(),in[0].end(),out.begin(),[](constQString&a)->QVariant{if(a.isNull()||a.isEmpty())return"NONE";elsereturna;});因为我们有visualstudio2012,我什至

c++ - 应用于数组时呈现数组积分的最小正乘数

给定一个包含n个非负元素的数组,C/C++的任何库中是否有一个函数返回最小的正乘数当应用于数组的每个元素时返回一个整数?例如,如果n=2的数组是1.66667,2.33333,则乘数将为3。当我们将数组的每个元素乘以3时,我们得到5、7,都是整数。如果数组为8,10,则乘数将为0.5。这会给我们4,5。(1)boost、eigen等知名库中是否有有效的函数?(2)如果库中没有可用的东西,计算倍数的有效算法是什么? 最佳答案 在一般情况下,您的问题没有很好的解决方案,因为值以浮点格式存储,精度有限,只能存储分母的幂为2的分数。例如,0

c++ - 应用考虑特定边缘子集的算法

我有一个带有类型边的巨大图形(即具有类型属性的边)。说typedefadjacency_listGraph;边的“类型”是edge_prop的成员,值在{A,B,C,D}中,我想运行广度优先搜索算法,只考虑类型A或B的边。你会怎么做? 最佳答案 因为很难找到混合BGL不同主题的简单示例,所以我在下面发布了一个使用filtered_graph和捆绑属性的完整且有效的示例。#include#include#include#includeusingnamespaceboost;enumedge_type_e{A,B,C,D};classe

c++ - 在文本中搜索多个字符串之一的有效算法?

我需要在传入的不太长的文本中搜索给定字符串的出现。字符串在整个session中都是不变的,而且数量不多(~10)。额外的简化是没有任何字符串包含在任何其他字符串中。我目前正在使用与str1|匹配的boost正则表达式海峡...。这个任务的性能很重要,所以我想知道我是否可以改进它。并不是说我的编程能力比boost人更好,但也许专用实现比一般实现更有效。由于字符串长时间保持不变,我有能力预先构建一个数据结构,例如状态转换表。例如,如果字符串是abcx、bcy和cz,到目前为止我已经阅读了abc,我应该处于组合状态,这意味着您要么将3个字符放入字符串1,将2个字符放入字符串2,要么将1个字符

c++ - 这个插值搜索实现有什么问题?

这是在Internet上找到的插值搜索算法的常见C/C++实现。但是,当与大约100000个整数的排序数组一起使用时,中间变量开始生成负数组索引,从而导致段错误。可能是什么问题?#include#include#includeintinterpolationSearch(intsortedArray[],inttoFind,intlen){//ReturnsindexoftoFindinsortedArray,or-1ifnotfoundintlow=0;inthigh=len-1;intmid;while(sortedArray[low]=toFind){mid=low+((toFi

c++ - 获取唯一编号并知道它们何时被释放

我有一个物理模拟(使用Box2D),其中具有相同整数ID的物体不会发生碰撞,例如,属于同一角色的物体。我有一个问题,因为我需要能够为每个可能的实体获得一个唯一的编号,这样就不会有两个字符意外地获得相同的ID。物体的数量是有限的,但它们是根据模拟指令创建和销毁的,因此一旦它们所属的物体消失,就有必要释放唯一的ID。A类World负责创建和销毁所有物体,也是管理唯一数字生成的实体,以及与物理模拟相关的任何其他内容。到目前为止,我想到了两种方法,但我不确定哪种方法更好,如果有的话:保留vector,数据是float的引用数,vector中的位置是ID本身。这种方法的缺点是在编写操作组ID的实