草庐IT

algorithm

全部标签

c++ - 抛出异常时不调用析构函数

考虑以下代码:#includeusingnamespacestd;classTest{staticintcount;intid;public:Test(){count++;id=count;cout上面的代码产生以下输出:Constructingobjectnumber1Constructingobjectnumber2Constructingobjectnumber3Constructingobjectnumber4Destructingobjectnumber3Destructingobjectnumber2Destructingobjectnumber1Caught4我认为析构函

c++ - 近似排序(数组/vector ),可预测的运行时间

背景:在艰难的时限内,我需要处理数十万个事件(产生结果)。时钟实际上是滴答滴答,并且当计时器启动时,必须清除此时的所有操作。到那个时候尚未准备好的东西要么被丢弃(取决于重要性度量),要么在下一个时间范围内处理(具有“重要性提升”,即在重要性度量中添加常数)。现在,理想情况下,CPU的速度比所需的要快得多,并且整个设备在时间片结束之前很长时间就可以准备好了。不幸的是,世界很少有理想的,“数十万”变成了“数千万”。事件进入时将事件添加到队列的后面(实际上是一个vector),并在各个下一量子期间从前端进行处理(因此程序始终会处理最后一个量子的输入)。但是,并非所有事件都同样重要。如果可用时

c++ - vector < vector > : verify that all have equal sizes

是否有std/boost算法来验证一个vector中的所有vector是否具有相同的大小?推而广之,所有元素的属性都相同吗?在下面的示例中,我使用了我正在寻找的假设的std::all_equal:typedefstd::vectorLine;std::vectorlines;lines.push(Line(10));lines.push(Line(11));autoequalLengths=std::all_equal(lines.begin(),lines.end(),[](constLine&x){returnx.size();});(并且通过扩展:std::vectorvec;a

c++ - 如何更改 C++ 标准库中堆中的最大元素?

如果我有一个最大堆,并且如果我需要更改最大元素,则归结为单个向下冒泡算法。有什么方法可以通过C++标准库实现这一点,而无需手动编写算法代码?我理解它应该等同于pop_heap+push_heap,但这是2个冒泡操作而不是一个。那么-这种向下冒泡算法是通过库API公开的吗? 最佳答案 如果你愿意在你自己的容器v上调用std::pop_heap(),那么你可以先v.push_back()在弹出堆之前容器上的“修改”元素。然后,收缩v。//Preconditionisthatvisalreadyaheap.voidchange_max_e

c++ - 哪种设计模式最合适?

我想创建一个可以使用四种算法之一的类(并且要使用的算法仅在运行时已知)。我当时认为Strategy设计模式听起来很合适,但我的问题是每个算法需要的参数略有不同。使用策略,但将相关参数传递给构造函数是否是一个糟糕的设计?。这是一个例子(为简单起见,假设只有两种可能的算法)...classFoo{private://Atrun-timethecorrectalgorithmisused,e.g.a=newAlgorithm1(1);AlgorithmInterface*a;};classAlgorithmInterface{public:virtualvoidDoSomething()=0

c++ - 对列表串联(STL)进行排序的有效方法,合并排序提示,部分排序

我有一种情况,我得到一个已经部分排序的值列表。我的最终列表中有N个block,每个block都已排序。所以我最终得到了这样的数据列表(斜杠只是为了强调):12345678/12345/23456789/1234我将这些作为一系列指向对象的指针放在vector中。目前我只是将std::sort与自定义比较器一起用于排序。我猜这是次优的,因为我的序列是一些退化的情况。是否有任何其他STL函数、提示或其他我可以用来提供此类数据的最佳排序?(Boost库也很好)。虽然我不能轻易地分解输入数据,但我当然可以确定子序列从哪里开始。 最佳答案 你

c# - 检测两张图片是否相似

如果我愿意确定是否有人可以给我一个正确方向的插入两张图片实际上一起构成了一个全景图(或者是类全景图,例如包含“相同”的部分,这些部分显然有点变形)。 最佳答案 您所追求的技术称为“图像拼接”。有一个合理的Wikipediaentry在上面。这给出了一些关于该算法如何工作的提示。这必然是一个棘手的启发式方法。您需要找到相似(但显然不相同)的像素组。这可能包括略微旋转、略微缩放或颜色略有不同的部分。 关于c#-检测两张图片是否相似,我们在StackOverflow上找到一个类似的问题:

c++ - 生成除循环旋转之外的所有排列

所以我需要一种算法来生成数字列表的所有排列,不包括循环旋转(例如[1,2,3]==[2,3,1]==[3,1,2])。当序列中至少有1个唯一数字时,它是相当简单的,取出那个唯一数字,生成剩余数字的所有排列(但对“标准”排列算法稍作修改)并添加前面的唯一编号。为了生成排列,我发现有必要将排列代码更改为:defpermutations(done,options)permuts=[]seen=[]foreachoinoptionsifonotinseenseen.add(o)permuts+=permutations(done+o,options.remove(o))returnpermut

java - 转置矩阵存储在一维数组中而不使用额外的内存

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:In-placetranspositionofamatrix最近参加了技术笔试面试。通过以下问题。我有一个数组testArray={a1,a2,a3,...an,b1,b2,b3,....bn,c1,c2,c3,.....,cn}我需要将这个数组排序为`testArray={a1,b1,c1,a2,b2,c2,a3,b3,c3,.....,an,bn,cn}约束是我不应该使用额外的内存,不应该使用任何内置函数。应该写出完整的代码,可以是任何语言,也可以是任何数据结构。例如:Input:{1,2,3,4,5,6

c++ - 加速 C/Rcpp 中 Dice 系数的计算

我需要计算一个相似性度量,称为R中二进制vector的大型矩阵(600,000x500)上的Dice系数。为了提高速度,我使用C/Rcpp。该功能运行良好,但由于我不是背景计算机科学家,我想知道它是否可以运行得更快。此代码适合并行化,但我没有并行化C代码的经验。Dice系数是相似性/不相似性的简单度量(取决于您如何看待)。它旨在比较不对称二元vector,这意味着其中一个组合(通常为0-0)并不重要,并且一致(1-1对)比不一致(1-0或0-1对)具有更大的权重。想象一下以下列联表:101ab0cd骰子系数为:(2*a)/(2*a+b+c)这是我的Rcpp实现:library(Rcpp