草庐IT

OPTIMIZATION

全部标签

c++ - 最近点算法 |如何改进?

我写了一个k-means聚类算法和一个颜色量化算法。它们在结果方面按预期工作,但我想让它们更快。在这两种实现中我都需要解决一个问题:在3D空间中有两个点数组,然后对于第一个数组中的每个点,你需要从第二个数组中找到最近的点。我这样做:size_tclosest_cluster_index;doublex_dif,y_dif,z_dif;doubleold_distance;doublenew_distance;for(autopoint=points.begin();point!=points.end();point++){//FIX//assuggestedbyjuvian//K=1i

c++ - 最准确的线相交坐标计算与 float ?

我在给定横坐标x处计算直线上一点的纵坐标y。该线由其两个端点坐标(x0,y0)(x1,y1)定义。端点坐标是float,必须以浮点精度进行计算才能在GPU中使用。数学和天真的实现都是微不足道的。设t=(x-x0)/(x1-x0),则y=(1-t)*y0+t*y1=y0+t*(y1-y0)。问题出在x1-x0很小的时候。结果将引入取消错误。当与x-x0中的一个结合时,在除法中我预计t会出现重大错误。问题是是否存在另一种更准确地确定y的方法?即我应该先计算(x-x0)*(y1-y0),然后除以(x1-x0)吗?y1-y0的差异总是很大。 最佳答案

c++ - 可以优化从临时对象创建复合对象吗?

我已经问了几个涉及这个问题的问题,但我得到了不同的回答,所以我认为最好直接问。假设我们有以下代码://SillyexamplesofAandB,don'ttakesoseriously,//justkeepinmindthey'rebigandnotdynamicallyallocated.structA{intx[1000];A(){for(inti=0;i!=1000;++i){x[i]=i*2;}};structB{inty[1000];B(){for(inti=0;i!=1000;++i){y[i]=i*3;}};structC{Aa;Bb;};Acreate_a(){retu

c++ - 如何最好地快速填充 vector ?

我有一些正在处理的模拟代码,就优化而言,我刚刚摆脱了所有唾手可得的成果。现在,代码将一半时间用于推回vector。(最终vector的大小是已知的,我适当保留)本质上,我是将一个vector重新排列成另一个vector的排列,或者用随机元素填充vector。有没有更快的推回vector的方法?还是推回/复制多个元素?std::vector>::push_back(unsignedintconst&)提前致谢。编辑:额外信息;我正在使用-O3运行发布版本,另外:需要保留原始vector。 最佳答案 你可以看看c++0x(这在theco

C++:调用临时对象的构造函数

假设我有以下内容:intmain(){SomeClass();return0;}如果不优化,会调用SomeClass()的构造函数,然后调用它的析构函数,对象就没有了。但是,根据IRCchannel,如果编译器认为对SomeClass构造函数/析构函数没有副作用,则可以优化构造函数/析构函数调用。我想解决这个问题的明显方法是不使用某些构造函数/析构函数(例如使用函数或静态方法等),但是有没有办法确保构造函数/析构函数的调用? 最佳答案 However,accordingtoanIRCchannelthatconstructor/de

c++ - 找到最小化 sigma(abs(a[i]+c[i])) 的递增序列 a[]

问题陈述c是给定数组n整数;问题是找到n的递增数组整数a(a[i]使这个总和最小化:abs(a[0]+c[0])+abs(a[1]+c[1])+...+abs(a[n-1]+c[n-1])//abs(x)=absolutevalueofx一个最优a仅由出现在c中的整数构成所以我们可以在O(n^2)中使用DP解决它:dp[i][j]:a[i]>=j'thinteger但是应该有更快的解决方案,大概是O(nlgn). 最佳答案 更新:我添加了最小化绝对值总和的解决方案。其他最小化平方和的解决方案仍然在这里,在这篇文章的末尾,以防有人感兴

c++ - 从文件中读取大量数据并以有效的方式解析日期。如何提高海量数据的性能?

我正在从文件中读取大量数据://abc.txt10121415129-1214-18-900-123414512131232685176-59-025----etcfun(char*p,intx,inty,intz){}我尝试过使用atoi、strtok,但是当数组太大并且sscanf也是时,它们是实时耗时的很慢。如何提高海量数据的性能?我正在使用strtok进行解析。我正在寻找解析每一行的快速方法。我正在阅读每一行,然后将每一行解析为:char*ptr;ptr=strtok(str,"");while(ptr!=NULL){intvalue1=atoi(ptr);ptr=strtok

c++ - 正弦和余弦哪个更有效? Sin 和 Cos 还是 Sin 和 Sqrt?

不幸的是,标准C++库没有对sincos的单一调用,这为这个问题提供了空间。第一个问题:如果我想计算sin和cos,计算sin和cos更便宜,还是先计算sin再计算sqrt(1-sin^2)以获得cos?第二个问题:intel数学内核库为标准数学函数计算提供了非常好的函数,因此存在函数vdSinCos()以非常优化的方式解决问题,但intel编译器不是免费的。Linux发行版中是否有任何开源库(C、C++、Fortran)可用,它们具有我可以简单地链接到它们并获得最佳实现的那些功能?注意:我不想深入探讨指令调用,因为并非所有CPU都支持它们。我想链接到一个通用库,它可以在任何CPU上为

c++ - c++ 中汉明距离的更快形式(可能利用标准库)?

我有两个intvectors像a[100],b[100].计算它们的汉明距离的简单方法是:std::vectora(100);std::vectorb(100);doubledist=0;for(inti=0;i我想问一下,在C++中有没有更快的方法来完成这个计算,或者如何使用STL来完成同样的工作? 最佳答案 您要求更快的方法。这是embarrassinglyparallelproblem,因此,对于C++,您可以通过两种方式利用它:线程并行性和通过优化进行矢量化。//Thefollowingflagsallowcpuspecif

c++ - 使用简短且定义可用的虚拟方法进行优化?

我只是想知道是否大多数编译器都可以进行以下优化classA{virtualvoidf(){m=5;}voidg(){f();}intm;};f()是一个虚函数,因此不是内联的。但是,由于f()的定义简短且可用,编译器能否优化g()以将f()调用为内联? 最佳答案 canthecompileroptimizeg()forcallingf()asinlinesincethedefinitionoff()isshortandavailable?这很复杂。g()可以内联,这样调用A::g()会生成与调用A::f()相同的优化代码.如果您从A