草庐IT

algorithm

全部标签

c++ - 使用 STL 容器查找序列的 k 个最大元素的最快算法是什么

我需要使用c++任何STL容器找到序列的k最大元素的最快算法。我的想法:使用列表或vector,对它们进行排序,获取前k个元素。在这种情况下,操作数等于n*log(n)。n-元素数。但我认为这不是最好的。 最佳答案 使用std::partial_sort的方法可能是最好的答案。另请注意std::nth_element,只是获取第n个位置右侧的元素(并将序列划分为“更小的”'在第n个元素之前和之后'更大'因此,如果您真的对前k个元素感兴趣(没有特定的内部顺序),那么nth_element绝对需要cookies

c++ - 如何检测椭圆是否与另一个椭圆/矩形碰撞

我想检测椭圆是否与另一个椭圆和矩形发生碰撞。我该怎么做?我正在用C++编写。我想用它来玩游戏。 最佳答案 如果这是一个游戏,那么准确性应该不是问题。将您的椭圆视为多边形,即在您的椭圆上选择N个均匀分布的点并将其视为多边形。将N调整到所需的正确性级别。现在您需要测试凸多边形是否与矩形碰撞。后者也是一个凸多边形。这是convexpolygoncollisiondetection的链接 关于c++-如何检测椭圆是否与另一个椭圆/矩形碰撞,我们在StackOverflow上找到一个类似的问题:

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++ - 校验和计算——所有字节的补码和

我有关于创建这样描述的消息的校验和的说明:校验和由一个字节组成,等于从“消息类型”字开始到消息block结尾的所有字节的二进制补码和(不包括传输的校验和)。忽略最高有效位的进位。我找到的另一个描述是:校验和值包含数据消息中其他字(即消息类型、消息长度和数据字)的模256和的二进制补码。接收设备可以计算接收到的字的模256和,并将该和添加到接收到的校验和字中。结果为零通常表示消息已正确接收。我理解这意味着我将消息中所有字节的值相加(不包括校验和),得到这个数字的模256。得到这个数字的补码,这就是我的校验和。但是我在处理示例消息示例时遇到了问题(来自设计文档,因此我必须假设它已被正确编码

c++ - 在一系列值之间生成随机 double

我目前无法生成介于-32.768和32.768之间的随机数。它一直给我相同的值,但在小数字段中有一个小的变化。例如:27.xxx。这是我的代码,如有任何帮助,我们将不胜感激。#include#include#includeusingnamespacestd;intmain(){srand(time(NULL));doubler=(68.556*rand()/RAND_MAX-32.768);cout 最佳答案 我应该提一下,如果你使用的是C++11编译器,你可以使用类似这样的东西,它实际上更容易阅读,也更难搞砸:#include#i

c++ - 设置不对称截锥体

我有一个程序,我在其中跟踪用户的位置并设置视锥体(将相机设置在用户的位置)以根据用户的位置更改场景的视角。直到现在,我的显示屏的所有四个角都处于同一z轴,并且我能够设置不对称平截头体并根据用户的视角改变场景。当前代码如下所示:UserCam::begin(){saveGlobalMatrices();glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(_topLeftNear.x,_bottomRightNear.x,_bottomRightNear.y,_topLeftNear.y,_camZNear,_camZFar);gl

c++ - 递归:按顺序遍历返回列表

我有一个在C++中执行顺序遍历的基本函数:voidinorder(Node*root){if(root!=NULL){inorder(root->left);coutdataright);}}但是,我想返回一个列表作为顺序遍历的结果。但关键是我们如何确定这个递归函数实际结束的时间并且我可以返回列表。这是我到目前为止完成的代码;vectorinorder(Node*root,vectorlistToAdd){if(root!=NULL){inorder(root->left,listToAdd);listToAdd.push_back(root->data);inorder(root->

c++ - 这个入队功能是如何工作的?

我无法理解这一行:rear->next=temp;在这个队列函数中:voidQueue::enqueue(intdata){Node*temp=newNode();//makeatemporarynodetemp->info=data;//assignpassedindatatoittemp->next=0;//makeitpointtonullif(front==0)//ifthereisnofrontnodefront=temp;//makethisafrontnodeelse//else,ifthereisalreadyafrontnoderear->next=temp;//ma

c++ - 为什么 std::copy 或 std::swap 不需要 <algorithm>?

根据这个cplusplus.com页,std::copy在header,原样std::swap然而这有效:#include//std::cout#include//std::vector#include//std::ostream_iterator()#include//rand(),srand()//NOTincludingintmain(){srand(time(NULL));constintSIZE=10;std::vectorvec;for(inti=0;i(std::cout,""));std::cout我唯一能想到的是它们是由导出的也...但是为什么我们需要标题吗?

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

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