草庐IT

algorithm

全部标签

c++ - 在 C++ 中使用 vector 设置并集算法

在这个问题中我只使用了std::vector,我可以保证每个vector中没有重复项(但每个vector中没有任何顺序)。如何合并我拥有的vector?例子:如果我有以下vector...11325542442合并后我应该只剩下两个vector:12345同样,我只使用vector,std::set是不允许的。 最佳答案 您可以使用std::set_union算法。intfirst[]={5,10,15,20,25};intsecond[]={50,40,30,20,10};std::vectorv(10);//0000000000

c++ - 删除元素的算法

我知道C++有删除-删除习惯用法。和remove下的方法会将目标元素移动到范围的后面。但是,下面的输出让我感到困惑。#include#include#includeusingnamespacestd;intmain(){vectorvec={10,20,30,20,30,20,10,10,20};autopend=remove(vec.begin(),vec.end(),20);cout输出是:Afterremoving20:103030101020101020usepend:1030301010这里有两个问题:“去掉20后”,为什么后面的10和20混在一起了?103030101020

c++ - remove_if 字符串中的最后一个字符

我想删除按引用传递的字符串中的第一个和最后一个括号。不幸的是,我很难有条件地删除第一个和最后一个元素。我不明白为什么remove_if不能像我期望的那样使用迭代器。Demo#include#includeusingnamespacestd;voidprint_wo_brackets(string&str){autodetect_bracket=[](charx){return(')'==x||'('==x);};if(!str.empty()){str.erase(std::remove_if(str.begin(),str.begin()+1,detect_bracket));}if

c++ - 登录循环的时间复杂度

这个循环的复杂度是多少for(inti=0;i根据我的说法,内部循环将运行log(1)+log(2)+log(3)+...+log(n)次,所以我如何计算它的复杂度? 最佳答案 因此,您有一个总和log(1)+log(2)+log(3)+...+log(n)=log(n!)。通过使用Stirling'sapproximation以及ln(x)=log(x)/log(e)一个人可以得到的事实log(n!)=log(e)*ln(n!)=log(e)(nln(n)-n+O(ln(n)))它给出了与另一个答案相同的复杂度O(nln(n))(

c++ - 将小的重叠 block 合并为较大的连续 block 的有效算法?

我面临一个相当有趣的问题。我有(相当大)数量的block。block只是从偏移量开始并具有长度和颜色的东西。偏移量和长度是有限的——这些block所在的空间是,其中N的范围从几十万到几百万。无效block是偏移量大于N或偏移量和长度之和大于N的任何block。block可能有大约16种不同的颜色(只是其中一种)。可能有几千block,总有这样的情况:block_X:off:100,len:50,color:blueblock_Y:off:148,len:50,color:blueblock_Z:off:200,len:30,color:red如您所见,X和Yblock可以连接成一个更大

java - 用最少的计算量寻找素数的算法

假设您要编写一个函数/方法来查找质数,最有效的方法是什么?我认为这将是一个类似这样的测试:半C++代码如下boolprimeTest(intx){//Xisthenumberwe'retestinginttestUpTo=(int)((sqrt(x))+1);for(inti=3;i有人有更好的方法来解决这个问题,而且计算量会更少吗?编辑:稍微更改了代码,两次。我没有考虑使用任何特定语言编写此代码,尽管由于bool这个词,我认为它是基于Java的C++。 最佳答案 我会使用MillerRabintest,对于小于341,550,07

c++ - 在一个字符串中搜索另一个字符串的变位词?

我试图从字符串text中找到一个子字符串,它是字符串pattern的变位词。我的问题:可以Rabin-Karpalgorithm为此目的进行调整?还是有更好的算法?我尝试了一种蛮力算法,但在我的案例中不起作用,因为文本和模式每个都可以达到一百万个字符。更新:我听说有一个使用O(1)空间的最坏情况O(n2)算法。有谁知道这个算法是什么?更新2:作为引用,这里是Rabin-Karp算法的伪代码:functionRabinKarp(strings[1..n],stringsub[1..m])hsub:=hash(sub[1..m]);hs:=hash(s[1..m])forifrom1ton

c++ - 在 C++ 中查找重复文件的最佳方法是什么?

我想用C++在文件系统中查找重复文件。有没有算法可以尽快做到这一点?我是否需要创建一个多线程应用程序,或者我可以只使用一个线程来完成它? 最佳答案 我同意KerrekSB的观点,有比C++更好的工具,但是,假设您确实需要在C++中执行此操作,这里有一些建议和在您的实现中需要考虑的事项:使用boost::filesystem进行可移植的文件系统遍历散列每个文件的建议非常合理,但首先制作一个以文件大小为关键的multimap可能更有效。然后仅在存在重复大小的文件时应用哈希。决定如何处理空文件和符号链接(symboliclink)/快捷方

c++ - 清晰缩放图像的算法

我知道可以借助图像金字塔来缩放图像。我知道opencvpyrUp()方法可以缩放图像。但是,在一定程度上,图像变得不清晰。举个例子,如果我们把一张小图放大到原来的15倍,肯定是不清晰的。OpenCV中是否有任何方法可以缩放图像但保持原始图像中的间隙?或者,有什么算法可以做到这一点? 最佳答案 要记住一件事:您不能凭空提出额外的解决方案。放大图像时,您可以得到模糊、平滑的图像,也可以得到清晰、block状的图像,或者介于两者之间。更好的算法,似乎对特定类型的主题有更好的表现,对图像的内容做出某些假设,如果为真,可以产生更高的表观性能,

c++ - 如何处理 std::find_if() 返回 false?

以下示例取自thecplusplus.comreferencepage并更改为返回false://find_ifexample#include//std::cout#include//std::find_if#include//std::vectorboolIsOdd(inti){return((i%2)==1);}intmain(){std::vectormyvector;myvector.push_back(10);myvector.push_back(20);myvector.push_back(40);myvector.push_back(50);std::vector::it